1. プラグインの使用

プラグインの使用 

はじめにガイドの前のページを最初に読んでください。特に、build.sbtタスクグラフライブラリ依存関係を理解する必要があります。

プラグインとは何か 

プラグインはビルド定義を拡張し、最も一般的なのは新しい設定を追加することです。新しい設定は新しいタスクになる可能性があります。たとえば、プラグインはテストカバレッジレポートを生成するcodeCoverageタスクを追加できます。

プラグインの宣言 

プロジェクトがhelloディレクトリにあり、sbt-siteプラグインをビルド定義に追加する場合、hello/project/site.sbtを作成し、プラグインのIvyモジュールIDをaddSbtPluginに渡してプラグイン依存関係を宣言します。

addSbtPlugin("com.typesafe.sbt" % "sbt-site" % "0.7.0")

sbt-assemblyを追加する場合は、次の内容でhello/project/assembly.sbtを作成します。

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

すべてのプラグインがデフォルトのリポジトリにあるわけではなく、プラグインのドキュメントには、プラグインが見つかるリポジトリを追加するよう指示されている場合があります。

resolvers ++= Resolver.sonatypeOssRepos("public")

プラグインは通常、プラグインの機能を有効にするためにプロジェクトに追加される設定を提供します。これは次のセクションで説明されています。

自動プラグインの有効化と無効化 

プラグインは、その設定をビルド定義に自動的に追加するように宣言できます。その場合、設定を追加するために何もする必要はありません。

sbt 0.13.5以降、自動プラグインという新しい機能により、プラグインは設定と依存関係をプロジェクトに安全かつ自動的に確実に追加できます。多くの自動プラグインはデフォルト設定を自動的に持っていますが、明示的な有効化が必要なものもあります。

明示的な有効化が必要な自動プラグインを使用する場合は、次のものをbuild.sbtに追加する必要があります。

lazy val util = (project in file("util"))
  .enablePlugins(FooPlugin, BarPlugin)
  .settings(
    name := "hello-util"
  )

enablePluginsメソッドを使用すると、プロジェクトは使用したい自動プラグインを明示的に定義できます。

プロジェクトは、disablePluginsメソッドを使用してプラグインを除外することもできます。たとえば、utilからIvyPluginの設定を削除する場合は、build.sbtを次のように変更します。

lazy val util = (project in file("util"))
  .enablePlugins(FooPlugin, BarPlugin)
  .disablePlugins(plugins.IvyPlugin)
  .settings(
    name := "hello-util"
  )

自動プラグインは、明示的に有効にする必要があるかどうかをドキュメントで説明する必要があります。特定のプロジェクトに対してどの自動プラグインが有効になっているかを知りたい場合は、sbtコンソールでpluginsコマンドを実行するだけです。

例:

> plugins
In file:/home/jsuereth/projects/sbt/test-ivy-issues/
        sbt.plugins.IvyPlugin: enabled in scala-sbt-org
        sbt.plugins.JvmPlugin: enabled in scala-sbt-org
        sbt.plugins.CorePlugin: enabled in scala-sbt-org
        sbt.plugins.JUnitXmlReportPlugin: enabled in scala-sbt-org

ここで、pluginsの出力は、sbtのデフォルトプラグインがすべて有効になっていることを示しています。sbtのデフォルト設定は、3つのプラグインによって提供されます。

  1. CorePlugin:タスクのコア並列処理制御を提供します。
  2. IvyPlugin:モジュールを公開/解決するメカニズムを提供します。
  3. JvmPlugin:Java/Scalaプロジェクトをコンパイル/テスト/実行/パッケージ化するメカニズムを提供します。

さらに、JUnitXmlReportPluginは、junit-xmlを生成するための実験的なサポートを提供します。

古い非自動プラグインは、設定を明示的に追加する必要があることが多く、そのためマルチプロジェクトビルドは異なる種類のプロジェクトを持つことができます。プラグインのドキュメントには設定方法が示されていますが、古いプラグインの場合、通常はプラグインの基本設定を追加し、必要に応じてカスタマイズする必要があります。

たとえば、sbt-siteプラグインの場合、次の内容でsite.sbtを作成します。

site.settings

それをそのプロジェクトで有効にします。

ビルドが複数のプロジェクトを定義する場合は、プロジェクトに直接追加します。

// don't use the site plugin for the `util` project
lazy val util = (project in file("util"))

// enable the site plugin for the `core` project
lazy val core = (project in file("core"))
  .settings(site.settings)

グローバルプラグイン 

プラグインは、$HOME/.sbt/1.0/plugins/で宣言することで、すべてのプロジェクトに一度にインストールできます。$HOME/.sbt/1.0/plugins/は、そのクラスパスがすべてのsbtビルド定義プロジェクトにエクスポートされるsbtプロジェクトです。簡単に言えば、$HOME/.sbt/1.0/plugins/内のすべての.sbtまたは.scalaファイルは、すべてのプロジェクトのproject/ディレクトリ内にあるかのように動作します。

$HOME/.sbt/1.0/plugins/build.sbtを作成し、そこにaddSbtPlugin()式を配置して、すべてのプロジェクトに一度にプラグインを追加できます。これを行うとマシン環境への依存性が増加するため、この機能は控えめに使用する必要があります。ベストプラクティスを参照してください。

利用可能なプラグイン 

利用可能なプラグインのリストがあります。

特に人気のあるプラグインには、次のものがあります。

  • IDE(sbtプロジェクトをIDEにインポートするため)のプラグイン
  • xsbt-web-pluginなどのWebフレームワークをサポートするプラグイン。

プラグインの開発方法など、詳細については、プラグインを参照してください。ベストプラクティスについては、プラグインのベストプラクティスを参照してください。