0Pricing
Scala for Backend Engineering & Functional Programming · レッスン

依存関係の管理とプラグイン

外部ライブラリを管理し、依存関係を宣言し、SBTプラグインでビルド機能を拡張します。

「依存関係の管理とプラグイン」はCoddyKit上の無料Scala for Backend Engineering & Functional Programmingレッスンです。 これはレッスン2/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはScala for Backend Engineering & Functional Programming学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Scala for Backend Engineering & Functional Programmingコースには全3レッスンが含まれています。

外部ライブラリを使う理由

Scalaプロジェクトを構築する際、コア言語には含まれていない機能が必要になることがよくあります。ロギング、データベースアクセス、Webフレームワークなどが代表的な例です。

これらのコードをすべて自分で書く代わりに、外部ライブラリ(依存関係とも呼ばれます)を利用できます。外部ライブラリは、他の開発者が作成して共有している、あらかじめ用意されたコードのパッケージです。

build.sbtにライブラリを追加する

SBTを使うと、これらの外部ライブラリを簡単に追加できます。build.sbtファイルでlibraryDependencies設定を使って宣言します。

基本構文は次のとおりです。

  • "org.group":組織またはグループIDです。
  • % "artifact":アーティファクトID(ライブラリ名)です。Scalaライブラリでは%%を使うと、Scalaのバージョンに自動的に合わせられます。
  • % "version":使用するライブラリの具体的なバージョンです。

例:

libraryDependencies += "org.slf4j" % "slf4j-simple" % "1.7.32"

依存関係のスコープ:CompileとTest

ライブラリは、プロジェクトの特定の部分でだけ必要になる場合があります。SBTではスコープを使ってこれを管理します。

  • compile(デフォルト):メインコードのコンパイルと実行に必要です。
  • test:テストコードのコンパイルと実行にのみ必要です(例:ScalaTestなどのテストフレームワーク)。
  • runtime:コンパイルには不要ですが、アプリケーションの実行時に必要です。

スコープは次のように指定します。

libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.16" % "test"

依存関係の自動取得

Webフレームワークなどの利用するライブラリが、さらに別のライブラリを利用している場合を考えてみましょう。これらを推移的依存関係と呼びます。

SBTは、このような間接的な依存関係をすべて自動的に取得します。ライブラリを追加すると、SBTはそのライブラリ自身の依存関係を調べ、それらもダウンロードします。これにより、プロジェクトに必要なものがすべて揃います。

数十個ものライブラリを手作業で管理する必要がなくなります。

SLF4Jでロギングする

一般的なロギングライブラリであるSLF4J(Simple Logging Facade for Java)と、そのシンプルな実装を使ってみましょう。まず、build.sbtに追加します。

libraryDependencies += "org.slf4j" % "slf4j-simple" % "1.7.32"

次に、下のScalaコードを実行して動作を確認します。新しい依存関係から提供されるorg.slf4j.LoggerFactoryをimportしていることに注目してください。

import org.slf4j.LoggerFactory

object Main {
  private val logger = LoggerFactory.getLogger(getClass.getName)

  def main(args: Array[String]): Unit = {
    logger.info("Hello from a logged message!")
    println("This is a standard print output.")
  }
}

プラグインでSBTを拡張する

ライブラリの管理だけでなく、SBT自体もプラグインを使って拡張できます。プラグインは、SBTに新しいコマンドや設定を追加する特殊なJARファイルです。

たとえば、アプリケーションのパッケージ化、サーバーへのデプロイ、コードフォーマッターなど特定のツールとの連携に使えるプラグインがあります。

プラグインによって一般的な作業を自動化し、開発ワークフローを効率化できます。

plugins.sbtでプラグインを宣言する

build.sbtに記述する通常の依存関係とは異なり、SBTプラグインは専用ファイルであるproject/plugins.sbtに宣言します。このファイルは、SBTプロジェクトのルートにあるprojectディレクトリ内に配置します。

構文は依存関係の場合と似ていますが、addSbtPluginを使用します。

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "2.1.1")

これにより、指定したプラグインをSBTがダウンロードして、プロジェクトで有効にします。

sbt-assemblyでFat JARを作成する

人気のあるプラグインの一つがsbt-assemblyです。アプリケーションのコードとすべての依存関係を含む、単一の実行可能な「Fat JAR」を作成します。

まず、project/plugins.sbtにプラグインを追加します。

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "2.1.1")

追加後、ターミナルからsbt assemblyを実行するとJARを作成できます。下のScalaコードがsbt-assemblyによってパッケージ化される対象です。

object Main {
  def main(args: Array[String]): Unit = {
    println("This is a simple application.")
    println("sbt-assembly would package this along with its dependencies into a single JAR.")
  }
}

バージョン管理とリゾルバー

プロジェクトが大きくなると、多くの依存関係を管理するのは難しくなります。ここでは、いくつかのヒントを紹介します。

  • バージョンの統一:競合を避けるため、すべてのモジュールで同じライブラリには同じバージョンを使用します。
  • リゾルバー:SBTはリポジトリ(Maven Centralなど)からライブラリを取得します。ライブラリがデフォルトのリポジトリにない場合は、カスタムリゾルバーを追加できます。

デフォルトでは、SBTは標準のパブリックリポジトリを使用します。プライベートライブラリの場合は、build.sbtにカスタムリゾルバーを指定します。

手順を並べ替える

Scalaプロジェクトに新しい外部ライブラリを追加して使用したいとします。以下の手順を正しい順序に並べてください。

レッスンのまとめ

よくできました!Scalaプロジェクトで外部コードを管理する方法を学びました。

  • 依存関係(ライブラリ)は、libraryDependenciesを使用してbuild.sbtに追加します。
  • SBTは推移的依存関係を処理し、compileやtestなどの異なるスコープをサポートします。
  • プラグインはSBTの機能を拡張します。project/plugins.sbtでaddSbtPluginを使用して宣言します。

依存関係とプラグインの管理を習得することは、複雑で堅牢なScalaアプリケーションを効率的に構築するための重要な鍵です。

よくある質問

「依存関係の管理とプラグイン」レッスンは無料ですか?

はい。「依存関係の管理とプラグイン」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Scala for Backend Engineering & Functional Programmingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Scala for Backend Engineering & Functional Programmingコースには全3レッスンが含まれています。

「依存関係の管理とプラグイン」で何を学びますか?

外部ライブラリを管理し、依存関係を宣言し、SBTプラグインでビルド機能を拡張します。 ブラウザで直接実行するハンズオンコードでScala for Backend Engineering & Functional Programmingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Scala for Backend Engineering & Functional Programmingを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのScala for Backend Engineering & Functional Programmingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/3です。

「依存関係の管理とプラグイン」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このScala for Backend Engineering & Functional Programmingレッスンでコードを書いて実行できますか?

はい。すべてのScala for Backend Engineering & Functional Programmingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. SBTプロジェクトのセットアップと基礎
  2. 依存関係の管理とプラグイン
  3. マルチプロジェクトビルドとデプロイ
← Scala for Backend Engineering & Functional Programmingに戻る