sbtで外部ライブラリを使用する

最終更新:2020年7月9日

[AD] scalapediaでは記事作成ボランティアを募集しています

Scalaには、便利な外部ライブラリが豊富に存在します。
また、Javaにはさらに多くのライブラリが存在しています。こちらも、自由に活用することができます。

この記事では、これらの外部ライブラリを活用する方法について解説します。

外部ライブラリを使うには

build.sbtに設定を追記することで、外部のライブラリを簡単に使用することができます。

外部ライブラリを追加するには、以下のように記述します。

build.sbt
libraryDependencies += "groupId" % "artifactId" % "version"

libraryDependenciesという設定項目(「設定キーといいます」)があり、これに追加したい外部ライブラリの情報を追加するという形になります。

プロジェクトが依存するものを依存性(Dependencies)といいます。
プロジェクトが依存するライブラリについての設定キーなので、「ライブラリ依存性」という名前になっています。

groupIdには組織名が入ります。 artifactIdにはライブラリ名が入ります versionにはライブラリ名が入ります

Javaのライブラリを追加する

それでは、例としてApache Commons Textを依存性に追加してみましょう。

Commons Textは、テキストに関する便利な処理をまとめたユーティリティです。

ライブラリの指定に必要な情報はMavenと同じ

JavaでMavenというビルドツールを使用したことのある人も多いと思います。

Mavenにおいては、使用する外部ライブラリを以下のような形式で指定していました。
Commons Textのサイトにおいてもこの形式で案内されています。

xml
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-text</artifactId> <version>1.8</version> </dependency>

sbtにおける外部ライブラリの指定についても、形式は違えど必要とする情報は同じです。
ここに現れているgroupIdartifactIdversionと同じものを指定すれば大丈夫です。

build.sbtに依存性を追加する

build.sbtに対して、以下のようにライブラリ依存性を追記してください。

build.sbt
libraryDependencies += "org.apache.commons" % "commons-text" % "1.8"

ここでは

  • groupIdにはorg.apache.commons
  • artifactIdにはcommons-text
  • versionには1.8

を入力しています。

(実際にはApache Commons Textの公式Webサイトにて案内されている最新版をご利用ください)

今後複数のライブラリを使用する場合に、一度に定義することも可能です。

以下のように記述します。libraryDependenciesに対して+=ではなく++=を使うことによってSeqの形で一度に複数のライブラリを追加することができます。

build.sbt
libraryDependencies ++= Seq( "org.apache.commons" % "commons-text" % "1.8", ... )

build.sbtを再読み込みする

sbtシェルをすでに起動している場合は、reloadコマンドを実行してください。

sbtにおいては、ビルド定義ファイル(build.sbt)を変更した際には再読み込みが必要です。

reloadコマンドの代わりに、一旦sbtシェルを終了して再起動することによってもbuild.sbtを読み込み直すことができます。

IntelliJ IDEAでbuild.sbtを再インポートする

IntelliJ IDEAを使用している場合は、こちらにおいてもbuild.sbtの再読み込みが必要です。

build.sbtを編集して保存すると、以下のようなダイアログがウィンドウの右下に表示されます。

このダイアログのImport Changesを押すことで、build.sbtを読み込み直すことができます。

あるいは、右サイドバーのsbtをクリックしてsbtバーを開いたあと、Reimport All sbt Projectsボタンをクリックすることによっても再読み込みすることができます。

再読み込みをしないと、使えるはずのクラスを使えなかったり、シンタックスハイライトが真っ赤にエラー表示されたりと、何一つ良いことがありません。どうぞご注意ください。

準備完了!

これにて、Commons Textを使用できるようになりました。

Commons Textを実際に活用している例については、こちらの記事をご覧ください。

マルチプロジェクト構成をとっている場合のライブラリ指定方法

Scalaプログラムがマルチプロジェクト構成となっている場合には、外部ライブラリを使用したいサブプロジェクトに対して設定を行うことになります。

サブプロジェクトに対してライブラリ依存性を追加するには、以下のようにします。

build.sbt
lazy val sample = project .settings( // この中に設定キーを渡します libraryDependencies += "org.apache.commons" % "commons-text" % "1.8" )

サブプロジェクトに対してsettingsメソッドを使用し、引数としてlibraryDependencies設定キーを渡すことにより、当該サブプロジェクトにおいて外部ライブラリが使用できるようになります。

Scalaのライブラリを追加する

Scalaのライブラリを追加するには、Javaのライブラリを追加するときとは少しだけ違った書き方をする必要があります。

ここでは、ScalaTestというテスティングフレームワークを追加してみましょう。

ScalaTestを追加するには以下のように記述します。

build.sbt
libraryDependencies += "org.scalatest" %% "scalatest" % "3.1.1" % Test

テスト用ライブラリを追加する場合について

今回のサンプルには、末尾に% Testが付いていますね。

今回のように専らテストにのみ用いるライブラリを追加したい場合は、末尾に% Testを付加するようにします。

これによって、プロダクションコードにテストでしか使わないライブラリを依存させないということができます。

Javaのライブラリを追加する場合との違い

また、上述のCommons TextなどのJavaのライブラリを追加する場合と、今回のようにScalaのライブラリを追加する場合との間には違いがあります。

それは、groupIdartifactIdの間の%%%に変わっていることです。

%%を使用することによって、使用しているScalaのバージョンに合わせて依存性を自動的に解決してくれます。

もし%%を使用せずに%を使用するとなれば、Scalaのバージョン番号を手作業で管理することになり大変ですので、避けましょう。

build.sbt
libraryDependencies += "org.scalatest" % "scalatest_2.13" % "3.1.1" % Test

あるいは依存性がうまく解決できない場合には、%をつけ忘れていることが原因かもしれませんので、確認してみましょう。

準備完了!

さて、あとはsbtシェルとIntelliJ IDEAをそれぞれリロードすれば準備完了です。

サイト内検索