sbt dependencyTree
概要
sbt dependencyTree [サブコマンド] [オプション]
sbt dependencyTree list [オプション]
sbt dependencyTree graph [オプション]
sbt dependencyTree html [オプション]
sbt dependencyTree html-graph [オプション]
sbt dependencyTree json [オプション]
sbt dependencyTree xml [オプション]
sbt dependencyTree stats [オプション]
説明
dependencyTree タスクは、プロジェクトの依存関係グラフを様々な形式で表示し、間接依存ライブラリの可視化と分析を支援する。このタスクは、sbt 1.4.0 で Johannes Rudolph さん作の sbt-dependency-graph より取り込まれたDependencyTreePlugin により提供される。なお、グラフの生成時にライブラリ依存性が解決されるため、実行時にダウンロードが発生する場合がある。
使用方法
sbt シェルから実行する。デフォルトのサブコマンドは tree で、ASCII ツリーを表示する。
サブコマンド
tree(デフォルト): ライブラリ依存性の ASCII ツリーを表示し、階層関係を示す。概要の把握に便利。list: 全てのライブラリ依存性を1行ずつフラットなリストで表示する。スクリプトや grep に適している。graph/dot: 可視化用の GraphViz DOT ファイルを出力する。互換性のためdotエイリアスが提供されている。html: 依存関係グラフをテキストで描画したスタンドアロン HTML ページを作成する。html-graph: GraphViz 図を埋め込んだ HTML ページを作成する(システムに GraphViz のインストールが必要)。json: ライブラリ依存性を JSON 形式で出力する。プログラムでの利用に適した構造である。xml: ライブラリ依存性を GraphML 形式で出力する。グラフ解析ツールに適している。stats: ライブラリ依存性の総数やバージョン数などの要約統計を表示する。help: 使用ヘルプを表示する(引数なしでdependencyTreeを実行した場合と同様)。
オプション
--quiet: コンソール出力を抑制し、タスク値として結果を返す(他タスクでの利用など)。--out <ファイル>: 標準出力の代わりに指定ファイルへ出力する。ファイル拡張子でデフォルトのサブコマンドが決まる:.txt:tree.dot:graph.html:html.json:json.xml:xml
--browse: 出力ファイルをデフォルトブラウザで自動的に開く(graphまたはhtmlサブコマンドでのみ動作)。
例
ASCII ツリー(デフォルト)
ライブラリ依存性の階層ビューを表示する。[S] は Scala ライブラリ依存性を示す。
> Compile/dependencyTree
[info] default:example_3:0.1.0-SNAPSHOT
[info] +-org.scala-lang:scala3-library_3:3.3.1 [S]
[info] +-com.example:library_3:1.0.0
[info] +-org.typelevel:cats-core_3:2.9.0
[info] | +-org.typelevel:cats-kernel_3:2.9.0
[info] | +-org.scala-lang:scala3-library_3:3.1.3 (evicted by: 3.3.1)
[info] +-org.typelevel:cats-effect_3:3.4.0
Evicted されたライブラリ依存性(新しいバージョンで置き換えられた古いバージョン)は括弧内に表示される。
ライブラリ依存性の一覧
> Compile/dependencyTree list
org.scala-lang:scala3-library_3:3.3.1
com.example:library_3:1.0.0
org.typelevel:cats-core_3:2.9.0
org.typelevel:cats-kernel_3:2.9.0
org.typelevel:cats-effect_3:3.4.0
GraphViz DOT ファイル
グラフ描画用の DOT ファイルを生成する(例: dot コマンドで使用)。
> Compile/dependencyTree graph --out dependencies.dot
dependencies.dot の内容:
digraph "dependency-graph" {
graph[rankdir="LR"; splines=polyline]
edge [arrowtail="none"]
"default:example_3:0.1.0-SNAPSHOT" -> "org.scala-lang:scala3-library_3:3.3.1"
"default:example_3:0.1.0-SNAPSHOT" -> "com.example:library_3:1.0.0"
"com.example:library_3:1.0.0" -> "org.typelevel:cats-core_3:2.9.0"
// ... more edges
}
PNG に変換: dot -Tpng dependencies.dot -o dependencies.png
HTML 出力
> Compile/dependencyTree html --out deps.html --browse
テキストベースのグラフを含む deps.html を作成し、ブラウザで開く。
グラフ埋め込み HTML
> Compile/dependencyTree html-graph --browse
GraphViz のインストールが必要。HTML に視覚的なグラフを埋め込む。
JSON 出力
> Compile/dependencyTree json --out deps.json
出力例:
{
"organization": "default",
"name": "example_3",
"version": "0.1.0-SNAPSHOT",
"dependencies": [
{
"organization": "org.scala-lang",
"name": "scala3-library_3",
"version": "3.3.1",
"configurations": ["compile"],
"evicted": false
},
// ... more
]
}
XML (GraphML) 出力
> Compile/dependencyTree xml --out deps.graphml
yEd などのグラフ可視化ツールへのインポートに適している。
統計
> Compile/dependencyTree stats
Total dependencies: 15
Unique organizations: 5
Versions: 10 distinct
Evictions: 2
設定キー
build.sbt で以下の設定により動作をカスタマイズできる:
dependencyTreeIncludeScalaLibrary := true: 出力に Scala ライブラリ依存性を含める(デフォルト:false)。dependencyDotNodeColors := false: DOT ノードラベルの色を無効にする(デフォルト:true)。dependencyDotNodeLabel := (org: String, name: String, version: String) => s"$org:$name:$version": DOT ノードラベルをカスタマイズする。dependencyDotHeader := """digraph "custom" { rankdir="TB"; }""": カスタム DOT ヘッダーを設定する。
関連タスク
whatDependsOn <モジュール>: 特定のモジュールに依存しているものを表示する(例:whatDependsOn org.example:lib:1.0)。dependencyLicenseInfo: ライブラリ依存性のライセンス情報を表示する。
スコープ
Compile と Test コンフィギュレーションで利用可能。必要に応じて Global/ でクロスコンフィギュレーション表示を行う。