sbtで外部ライブラリを使用する
[AD] Scalaアプリケーションの開発・保守は合同会社ミルクソフトにお任せください
Scalaには、便利な外部ライブラリが豊富に存在します。
また、Javaにはさらに多くのライブラリが存在しています。こちらも、自由に活用することができます。
この記事では、これらの外部ライブラリを活用する方法について解説します。
外部ライブラリを使うには
build.sbtに設定を追記することで、外部のライブラリを簡単に使用することができます。
外部ライブラリを追加するには、以下のように記述します。
build.sbtlibraryDependencies += "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における外部ライブラリの指定についても、形式は違えど必要とする情報は同じです。
ここに現れているgroupId
、artifactId
、version
と同じものを指定すれば大丈夫です。
build.sbtに依存性を追加する
build.sbtに対して、以下のようにライブラリ依存性を追記してください。
build.sbtlibraryDependencies += "org.apache.commons" % "commons-text" % "1.8"
ここでは
groupId
にはorg.apache.commons
artifactId
にはcommons-text
version
には1.8
を入力しています。
(実際にはApache Commons Textの公式Webサイトにて案内されている最新版をご利用ください)
今後複数のライブラリを使用する場合に、一度に定義することも可能です。
以下のように記述します。libraryDependencies
に対して+=
ではなく++=
を使うことによってSeq
の形で一度に複数のライブラリを追加することができます。
build.sbtlibraryDependencies ++= 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.sbtlazy val sample = project .settings( // この中に設定キーを渡します libraryDependencies += "org.apache.commons" % "commons-text" % "1.8" )
サブプロジェクトに対してsettings
メソッドを使用し、引数としてlibraryDependencies
設定キーを渡すことにより、当該サブプロジェクトにおいて外部ライブラリが使用できるようになります。
Scalaのライブラリを追加する
Scalaのライブラリを追加するには、Javaのライブラリを追加するときとは少しだけ違った書き方をする必要があります。
ここでは、ScalaTestというテスティングフレームワークを追加してみましょう。
ScalaTestを追加するには以下のように記述します。
build.sbtlibraryDependencies += "org.scalatest" %% "scalatest" % "3.1.1" % Test
テスト用ライブラリを追加する場合について
今回のサンプルには、末尾に% Test
が付いていますね。
今回のように専らテストにのみ用いるライブラリを追加したい場合は、末尾に% Test
を付加するようにします。
これによって、プロダクションコードにテストでしか使わないライブラリを依存させないということができます。
Javaのライブラリを追加する場合との違い
また、上述のCommons TextなどのJavaのライブラリを追加する場合と、今回のようにScalaのライブラリを追加する場合との間には違いがあります。
それは、groupId
とartifactId
の間の%
が%%
に変わっていることです。
%%
を使用することによって、使用しているScalaのバージョンに合わせて依存性を自動的に解決してくれます。
もし%%
を使用せずに%
を使用するとなれば、Scalaのバージョン番号を手作業で管理することになり大変ですので、避けましょう。
build.sbtlibraryDependencies += "org.scalatest" % "scalatest_2.13" % "3.1.1" % Test
あるいは依存性がうまく解決できない場合には、%
をつけ忘れていることが原因かもしれませんので、確認してみましょう。
準備完了!
さて、あとはsbtシェルとIntelliJ IDEAをそれぞれリロードすれば準備完了です。