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: ライブラリ依存性のライセンス情報を表示する。

スコープ

CompileTest コンフィギュレーションで利用可能。必要に応じて Global/ でクロスコンフィギュレーション表示を行う。