コマンドラインから sbt プロジェクトをスキャンする
このページでは、コマンドラインから sbt プロジェクトをスキャンする方法について説明いたします。
sbt プロジェクト をスキャンする場合、事前に sbt/sbt-dependency-graph プラグインをセットアップする必要があります。
sbt-dependency-graph プラグインをセットアップする
sbt プラグインのセットアップ方法は大きく分けて 2 通りあります。1 つは対象の sbt プロジェクトの project
ディレクトリにプラグインを格納する方法、もう 1 つは ~/.sbt
配下にプラグインを格納する方法です。
詳細は sbt のドキュメントをご参照ください。
General Best Practices
以下はプロジェクトディレクトリ内の project
ディレクトリにプラグインセットアップする場合の手順です。
- まず
<対象プロジェクトのルートディレクトリ>/project/plugins.sbt
ファイルが存在しなければ作成してください。 - 次に 1 で作成したファイルに以下の内容を追記してください。
sbt 1.4 以上の場合
addDependencyTreePlugin
sbt 1.3 以下の場合
addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.10.0-RC1")
sbt プロジェクトをスキャンする
sbt プロジェクトのコマンドスキャンでは前述の sbt-dependency-graph
プラグインの dependencyTree
タスクによって依存関係を抽出した出力テキストをスキャンします。
スキャンを行うには、コマンドライン上でスキャン対象の sbt プロジェクトのルートディレクトリに移動し、以下を実行してください。
sbt -J-Dsbt.log.noformat=true "project <sbt のプロジェクト名>" dependencyTree | PROJECT_GROUP_KEY=<yamory 上のプロジェクトグループ識別キー> YAMORY_API_KEY=xxxxxxxxxxxxxxxxx YAMORY_OPEN_SYSTEM=true YAMORY_DISTRIBUTED=false bash -c "$(curl -sSf -L <https://yamory/script/...>)"
上記の < >
内の箇所は、以下の内容に適宜置き換えてください。
<sbt のプロジェクト名>
: sbt のスキャン対象にするサブプロジェクト名を入力します。単一プロジェクトの場合は、"project <...>"
の箇所を削除してください。
サブプロジェクト名は、sbt プロジェクトのルートディレクトリに移動し、sbt projects
を実行して見つけることができます。
<yamory 上のプロジェクトグループ識別キー>
:サービス名称などを設定してください(例: yamory )(半角英数記号のみ、半角スペースは入力不可)。
<https://yamory/script/...>
: サイドバーの「アプリライブラリ」>「スキャン」を開き、「新しいプロジェクトをスキャン+」ボタンを押して出てくる案内にしたがって入力を進め、最後に表示されるスキャンコマンドの URL に置き換えてください。
環境変数について
YAMORY_OPEN_SYSTEM について
yamory 上の「公開サービス(外部ネットワークからパブリックアクセスが可能なアプリケーション、またはサービスとして使用するか)」を指定できます。
公開サービスの場合は true
、非公開サービスの場合は false
を指定します。
YAMORY_OPEN_SYSTEM が未入力の場合、前回スキャン情報があればその状態を引き継ぎ、初回スキャン時は公開サービスとして登録されます。
本パラメータはトリアージレベルの計算に使用されます。
YAMORY_DISTRIBUTED について
yamory 上の「頒布プロジェクト」の状態を指定できます。
頒布プロジェクトの場合は true
、非頒布プロジェクトの場合は false
を指定します。
YAMORY_DISTRIBUTED が未入力の場合、前回スキャン情報があればその状態を引き継ぎ、初回スキャン時は非頒布プロジェクトとして登録されます。
依存ツリー解析エラーが出た場合
sbt-dependency-graph
プラグインは、標準入出力デバイスの端末幅より長い依存ツリーを省略します。 依存ツリーが省略されたため正しく解析ができなかった場合下記のエラーが発生します。次の対処方法を実施してください。
Failed to parse dependency tree. message=Dependency Tree is truncated.
sbt 1.6 未満の対処方法
script
コマンドが利用できる場合、スキャンコマンドを以下の通りに修正することで、事象回避できます。
修正前
sbt -J-Dsbt.log.noformat=true "project <sbt のプロジェクト名>" dependencyTree | ..省略
修正後
script -q /dev/null bash -c 'stty cols 10240; sbt -J-Dsbt.log.noformat=true "project <sbt のプロジェクト名>" dependencyTree' | ..省略
コマンド例
# 依存ツリーのサイズに合わせて調整してください
TERMINAL_WIDTH=10240
# アクセストークンはyamoryの画面上から取得してください
YAMORY_ACCESS_TOKEN='xxxx'
# urlはダミーなので、画面上から取得してください
script -q /dev/null bash -c 'stty cols ${TERMINAL_WIDTH}; sbt -J-Dsbt.log.noformat=true dependencyTree' | PROJECT_GROUP_KEY=sbt YAMORY_API_KEY=${YAMORY_ACCESS_TOKEN} YAMORY_OPEN_SYSTEM=true YAMORY_DISTRIBUTED=false bash -c "$(curl -sSf -L https://yamory/script/...)"
sbt 1.6 以上の対処方法
sbt 1.6 以上は asciiGraphWidth
パラメータを設定することで、長い依存ツリーの省略を回避できます。また、マルチプロジェクト構成の場合、set
で設定するパラメータはすべてのプロジェクトに反映されません。build.sbt
で直接設定するか、set every
をご利用ください。
asciiGraphWidth パラメータを set every で設定する際のコマンド例
sbt -J-Dsbt.log.noformat=true "set every asciiGraphWidth := 10000" "project <sbt のプロジェクト名>" dependencyTree | PROJECT_GROUP_KEY=<yamory 上のプロジェクトグループ識別キー> YAMORY_API_KEY=xxxxxxxxxxxxxxxxx bash -c "$(curl -sSf -L <https://yamory/script/...>)"