yamory の使い方

yamory へようこそ! yamory の基礎知識と使い方をご紹介します。

コマンドラインから sbt プロジェクトをスキャンする

このページでは、コマンドラインから sbt プロジェクトをスキャンする方法について説明いたします。

sbt プロジェクト をスキャンする場合、事前に sbt/sbt-dependency-graph プラグインをセットアップする必要があります。

sbt-dependency-graph プラグインをセットアップする

sbt プラグインのセットアップ方法は大きく分けて 2 通りあります。1 つは対象の sbt プロジェクトの project ディレクトリにプラグインを格納する方法、もう 1 つは ~/.sbt 配下にプラグインを格納する方法です。
詳細は sbt のドキュメントをご参照ください。
General Best Practices

以下はプロジェクトディレクトリ内の project ディレクトリにプラグインセットアップする場合の手順です。

  1. まず <対象プロジェクトのルートディレクトリ>/project/plugins.sbt ファイルが存在しなければ作成してください。
  2. 次に 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/...>)"