mod コマンドは、外部依存関係グラフを理解するのに役立つさまざまなツールを提供します。依存関係グラフの可視化、特定のモジュールまたはモジュールのバージョンがグラフに存在する理由の確認
、モジュールをサポートするリポジトリ定義の表示
、モジュール拡張機能の使用状況と生成されたリポジトリの検査
などを行うことができます。
構文
bazel mod <subcommand> [<options>] [<arg> [<arg>...]]
使用可能なサブコマンドとそれぞれの必須引数は次のとおりです。
graph: ルート モジュールから始まるプロジェクトの完全な依存関係グラフを表示します。--fromで 1 つ以上のモジュールが指定されている場合、これらの モジュールはルートの直下に表示され、グラフはこれらのモジュールからのみ展開されます(例を参照)。deps <arg>...: 指定された各モジュールの解決済み直接依存関係をgraphと同様に表示します。all_paths <arg>...: --from モジュール からターゲット モジュールまでのすべての依存関係パスを表示します。出力を簡略化するため、複数のパスで同じ接尾辞が共有されている場合は、最初の最短パス のみが表示されます。たとえば、A -> B -> X は表示されますが、長い A -> C -> B -> X は省略されます。つまり、ターゲット モジュール X に直接依存するすべてのモジュール Y について、出力には Y を経由して X に到達する最短パスのみが含まれます。path <arg>...:all_pathsと同じセマンティクスですが、--fromモジュールのいずれかから引数モジュールのいずれかまでの単一のパスのみを表示します。explain <arg>...: 指定されたモジュールが依存関係グラフに表示されるすべての場所と、それらに直接依存するモジュールを表示します。explainコマンドの出力は、基本的にall_pathsコマンドのプルーニングされたバージョンで、1)ルート モジュール、2)引数モジュールにつながるルート モジュールの直接依存関係、3)引数モジュールの直接依存関係、4)引数モジュール自体が含まれます(例を参照)。show_repo <arg>...: 指定されたリポジトリの定義を表示します( 例を参照)。--all_reposを使用すると、依存関係グラフ全体のリポジトリの定義が表示されます。--all_visible_reposを使用すると、--base_moduleから見えるすべてのリポジトリの定義が表示されます。show_extension <extension>...: 指定された各拡張機能に関する情報を表示します。生成されたリポジトリのリストと、use_repoを使用してそれらをインポートするモジュールのリスト、および使用されている各モジュールでのその拡張機能の使用状況のリスト(指定されたタグとuse_repo呼び出しを含む)が表示されます(例を参照)。
<arg> は、1 つ以上のモジュールまたはリポジトリを指します。次のいずれかになります。
リテラル文字列
<root>: 現在の プロジェクトを表すルート モジュール。<name>@<version>: バージョン<version>のモジュール<name>。レジストリ以外のオーバーライドがあるモジュールの場合、アンダースコア(_)を<version>として使用します。<name>: モジュール<name>の現在のすべてのバージョン。@<repo_name>:--base_moduleのコンテキストで、指定された 表示 名のリポジトリ。@@<repo_name>: 指定された正規 名のリポジトリ。
モジュールの指定が必要なコンテキストでは、モジュールに対応するリポジトリを参照する <arg> も、拡張機能で生成されたリポジトリではなく、使用できます。逆に、リポジトリの指定が必要なコンテキストでは、<arg> を参照する
モジュールを対応するリポジトリの代わりに使用できます。
<extension> は <arg><label_to_bzl_file>%<extension_name>.
の形式にする必要があります。<label_to_bzl_file> 部分は、リポジトリ相対ラベル(たとえば、
//pkg/path:file.bzl)にする必要があります。
次のオプションは、グラフを出力するサブコマンド(graph、
deps、all_paths、path、explain)にのみ影響します。
--from <arg>[,<arg>[,...]]default:<root>:graph、all_paths、path、explainでグラフが展開されるモジュール。詳細については、サブコマンドの説明をご覧ください 。--verbosedefault: "false": 出力グラフに、各モジュールのバージョン解決に関する追加情報を含めます。解決中にモジュール のバージョンが変更された場合は、どのバージョンに置き換えられたか、 元のバージョン、置き換えられた理由、理由が最小バージョン 選択の場合は新しいバージョンをリクエストしたモジュールを表示します。--include_unuseddefault: "false": 出力グラフに、依存関係グラフに元々存在していたが、モジュールの解決後に使用されなくなったモジュールを含めます。--extension_info <mode>: モジュール拡張機能 の使用状況に関する情報を出力グラフの一部として含めます(例を参照)。<mode>には次のいずれかを指定できます。hidden(デフォルト): 拡張機能に関する情報は表示されません。usages: 拡張機能が使用されている各モジュールに拡張機能を表示します。 の形式で出力されます。$<extension>repos:usagesに加えて、各拡張機能の使用状況でuse_repoを使用してインポートされたリポジトリを表示します。all:usagesとreposに加えて、どのモジュールにもインポートされていない拡張機能で生成されたリポジトリも表示します。これらの 追加のリポジトリは、出力で生成 拡張機能が最初に出現した場所に表示され、点線で接続されます。
--extension_filter <extension>[,<extension>[,...]]: 指定すると、出力グラフには、指定された拡張機能を使用するモジュールと、それらのモジュールにつながるパスのみが含まれます。空の拡張機能リスト(--extension_filter=など)を指定することは、依存関係グラフ内の任意のモジュールで使用されるすべての拡張機能を指定することと同じです。--depth <N>: 出力グラフの深さ。深さ 1 では、 ルートとその直接依存関係のみが表示されます。explainのデフォルトは 1、depsのデフォルトは 2、その他は無限大です。--cyclesdefault: "false": 出力グラフにサイクルエッジを含めます。--include_builtindefault: "false": 出力グラフに組み込みモジュール(@bazel_toolsなど)を含めます。組み込みモジュールは他のすべてのモジュールから暗黙的に依存しているため、 出力が大幅に煩雑になるため、 このフラグはデフォルトで無効になっています。--charset <charset>default: utf8: テキスト 出力に使用する文字セットを指定します。有効な値は"utf8"と"ascii"です。唯一の大きな 違いは、グラフを描画するために使用される特殊文字です。これは"text"出力形式には存在しません。"ascii"文字セットには存在しません。 そのため、"ascii"文字セットは、Unicode を使用できない レガシー プラットフォームでの使用もサポートするために存在します。--output <mode>: モジュール拡張機能の使用状況に関する情報を 出力グラフの一部として含めます。<mode> には次のいずれかを指定できます。text(デフォルト): 出力グラフの人間が読める形式の表現 (ツリーとしてフラット化)。json: グラフを JSON オブジェクトの形式で出力します( ツリーとしてフラット化)。graph: グラフを Graphviz の dot 表現で出力します。
bazel mod graph --output graph | dot -Tsvg > /tmp/graph.svg
その他にも次のような対応策があります。
--base_module <arg>default:<root>: 引数のリポジトリ名が解釈されるモジュールを指定します。この 引数自体は@<repo_name>の形式にできます。これは常に ルート モジュールを基準に解釈されます。--extension_usages <arg>[,<arg>[,...]]:show_extensionをフィルタして、指定されたモジュールの拡張機能の使用状況のみを 表示します。
例
実際の Bazel プロジェクトでの mod コマンドの使用例をいくつか紹介します。プロジェクトの外部依存関係を検査する方法の概要を把握できます。
MODULE.bazel ファイル:
module(
name = "my_project",
version = "1.0",
)
bazel_dep(name = "bazel_skylib", version = "1.1.1", repo_name = "skylib1")
bazel_dep(name = "bazel_skylib", version = "1.2.0", repo_name = "skylib2")
multiple_version_override(module_name = "bazel_skylib", versions = ["1.1.1", "1.2.0"])
bazel_dep(name = "stardoc", version = "0.5.0")
bazel_dep(name = "rules_java", version = "5.0.0")
toolchains = use_extension("@rules_java//java:extensions.bzl", "toolchains")
use_repo(toolchains, my_jdk="remotejdk17_linux")
|
|
|
プロジェクトの 依存関係グラフ全体を表示します。
bazel mod graph<root> (my_project@1.0) ├───bazel_skylib@1.1.1 │ └───platforms@0.0.4 ├───bazel_skylib@1.2.0 │ └───platforms@0.0.4 ... ├───rules_java@5.0.0 │ ├───platforms@0.0.4 ... │ ├───rules_cc@0.0.1 │ │ ├───bazel_skylib@1.1.1 ... │ │ └───platforms@0.0.4 ... │ └───rules_proto@4.0.0 │ ├───bazel_skylib@1.1.1 ... │ └───rules_cc@0.0.1 ... └───stardoc@0.5.0 ├───bazel_skylib@1.1.1 ... └───rules_java@5.0.0 ...依存関係グラフ全体を表示します( 未使用のモジュールを含み、バージョン解決に関する追加情報を含む)。
bazel mod graph --include_unused --verbose<root> (my_project@1.0) ├───bazel_skylib@1.1.1 │ └───platforms@0.0.4 ├───bazel_skylib@1.2.0 │ └───platforms@0.0.4 ... ├───rules_java@5.0.0 │ ├───platforms@0.0.4 ... │ ├───rules_cc@0.0.1 │ │ ├───bazel_skylib@1.0.3 ... (to 1.1.1, cause multiple_version_override) │ │ ├───bazel_skylib@1.1.1 ... (was 1.0.3, cause multiple_version_override) │ │ └───platforms@0.0.4 ... │ └───rules_proto@4.0.0 │ ├───bazel_skylib@1.0.3 ... (to 1.1.1, cause multiple_version_override) │ ├───bazel_skylib@1.1.1 ... (was 1.0.3, cause multiple_version_override) │ └───rules_cc@0.0.1 ... └───stardoc@0.5.0 ├───bazel_skylib@1.1.1 ... (was 1.0.3, cause multiple_version_override) ├───rules_java@5.0.0 ... (was 4.0.0, cause <root>, bazel_tools@_) ├───bazel_skylib@1.0.3 (to 1.1.1, cause multiple_version_override) │ └───platforms@0.0.4 ... └───rules_java@4.0.0 (to 5.0.0, cause <root>, bazel_tools@_) ├───bazel_skylib@1.0.3 ... (to 1.1.1, cause multiple_version_override) └───bazel_skylib@1.1.1 ... (was 1.0.3, cause multiple_version_override)特定のモジュール から展開された依存関係グラフを表示します。
bazel mod graph --from rules_java --include_unused<root> (my_project@1.0) ├───rules_java@5.0.0 │ ├───platforms@0.0.4 │ ├───rules_cc@0.0.1 │ │ ├───bazel_skylib@1.0.3 ... (unused) │ │ ├───bazel_skylib@1.1.1 ... │ │ └───platforms@0.0.4 ... │ └───rules_proto@4.0.0 │ ├───bazel_skylib@1.0.3 ... (unused) │ ├───bazel_skylib@1.1.1 ... │ └───rules_cc@0.0.1 ... └╌╌rules_java@4.0.0 (unused) ├───bazel_skylib@1.0.3 (unused) │ └───platforms@0.0.4 ... └───bazel_skylib@1.1.1 └───platforms@0.0.4 ...2 つの モジュール間のすべてのパスを表示します。
bazel mod all_paths bazel_skylib@1.1.1 --from rules_proto<root> (my_project@1.0) └╌╌rules_proto@4.0.0 ├───bazel_skylib@1.1.1 └───rules_cc@0.0.1 └───bazel_skylib@1.1.1 ...プロジェクトが特定の モジュールに依存する理由と方法を確認します。
bazel mod explain @skylib1 --verbose --include_unused<root> (my_project@1.0) ├───bazel_skylib@1.1.1 ├───rules_java@5.0.0 │ ├───rules_cc@0.0.1 │ │ └───bazel_skylib@1.1.1 ... (was 1.0.3, cause multiple_version_override) │ └───rules_proto@4.0.0 │ ├───bazel_skylib@1.1.1 ... (was 1.0.3, cause multiple_version_override) │ └───rules_cc@0.0.1 ... └───stardoc@0.5.0 ├───bazel_skylib@1.1.1 ... (was 1.0.3, cause multiple_version_override) ├╌╌rules_cc@0.0.1 │ └───bazel_skylib@1.1.1 ... (was 1.0.3, cause multiple_version_override) └╌╌rules_proto@4.0.0 ├───bazel_skylib@1.1.1 ... (was 1.0.3, cause multiple_version_override) └───rules_cc@0.0.1 ...モジュールのリポジトリの基盤となるルールを確認します。
bazel mod show_repo rules_cc stardoc## rules_cc@0.0.1: load("@@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "rules_cc+", urls = ["https://bcr.bazel.build/test-mirror/github.com/bazelbuild/rules_cc/releases/download/0.0.1/rules_cc-0.0.1.tar.gz", "https://github.com/bazelbuild/rules_cc/releases/download/0.0.1/rules_cc-0.0.1.tar.gz"], integrity = "sha256-Tcy/0iwN7xZMj0dFi9UODHFI89kgAs20WcKpamhJgkE=", strip_prefix = "", remote_patches = {"https://bcr.bazel.build/modules/rules_cc/0.0.1/patches/add_module_extension.patch": "sha256-g3+zmGs0YT2HKOVevZpN0Jet89Ylw90Cp9XsIAY8QqU="}, remote_patch_strip = 1, ) ## stardoc: load("@@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "stardoc+", urls = ["https://bcr.bazel.build/test-mirror/github.com/bazelbuild/stardoc/releases/download/0.5.0/stardoc-0.5.0.tar.gz", "https://github.com/bazelbuild/stardoc/releases/download/0.5.0/stardoc-0.5.0.tar.gz"], integrity = "sha256-yXlNzIAmow/2fPfPkeviRcopSyCwcYRdEsGSr+JDrXI=", strip_prefix = "", remote_patches = {}, remote_patch_strip = 0, )bazel mod show_repoは、use_repoでインポートされたリポジトリと、リポジトリuse_repo_ruleで作成されたリポジトリでも機能します。show_repoがリポジトリ名または--all_visible_reposで呼び出されると、リポジトリ名 が##で始まる行に表示されます。bazel mod show_repo @jq_linux_arm64 bazel mod show_repo --all_visible_repos## @jq_linux_arm64: load("@@bazel_tools//tools/build_defs/repo:http.bzl", "http_file") http_file( name = "+http_file+jq_linux_arm64", executable = True, integrity = "sha256-TdLYoGYd8LIvG7mh+YMPBrbzuPfZEhGh7118TwaotKU=", urls = ["https://github.com/jqlang/jq/releases/download/jq-1.7.1/jq-linux-arm64"], )依存関係グラフで使用されているモジュール拡張機能を確認します。
bazel mod graph --extension_info=usages<root> (my_project@1.0) ├───$@@rules_java.5.0.0//java:extensions.bzl%toolchains ├───rules_java@5.0.0 # │ ├───$@@rules_java.5.0.0//java:extensions.bzl%toolchains │ ├───rules_cc@0.0.1 # │ │ └───$@@rules_cc.0.0.1//bzlmod:extensions.bzl%cc_configure │ └───rules_proto@4.0.0 │ └───rules_cc@0.0.1 ... └───stardoc@0.5.0 └───rules_java@5.0.0 ...依存関係グラフの一部として、特定の拡張機能から生成および インポートされるリポジトリを確認します。
bazel mod show_extension @@rules_java+5.0.0//java:extensions.bzl%toolchains<root> (my_project@1.0) ├───$@@rules_java.5.0.0//java:extensions.bzl%toolchains │ ├───remotejdk17_linux │ ├╌╌remotejdk11_linux │ ├╌╌remotejdk11_linux_aarch64 │ ├╌╌remotejdk11_linux_ppc64le │ ├╌╌remotejdk11_linux_s390x ...(some lines omitted)... ├───rules_java@5.0.0 # │ └───$@@rules_java.5.0.0//java:extensions.bzl%toolchains ... │ ├───local_jdk │ ├───remote_java_tools │ ├───remote_java_tools_darwin │ ├───remote_java_tools_linux │ ├───remote_java_tools_windows │ ├───remotejdk11_linux_aarch64_toolchain_config_repo │ ├───remotejdk11_linux_ppc64le_toolchain_config_repo ...(some lines omitted)... └───stardoc@0.5.0 └───rules_java@5.0.0 ...拡張機能の生成されたリポジトリのリストと、その拡張機能が各モジュールで使用される方法を確認します。
bazel mod graph --extension_info=all --extension_filter=@rules_java//java:extensions.bzl%toolchains## @@rules_java.5.0.0//java:extensions.bzl%toolchains: Fetched repositories: - local_jdk (imported by bazel_tools@_, rules_java@5.0.0) - remote_java_tools (imported by bazel_tools@_, rules_java@5.0.0) - remote_java_tools_darwin (imported by bazel_tools@_, rules_java@5.0.0) - remote_java_tools_linux (imported by bazel_tools@_, rules_java@5.0.0) - remote_java_tools_windows (imported by bazel_tools@_, rules_java@5.0.0) - remotejdk11_linux_aarch64_toolchain_config_repo (imported by rules_java@5.0.0) - remotejdk11_linux_ppc64le_toolchain_config_repo (imported by rules_java@5.0.0) ...(some lines omitted)... - remotejdk17_linux (imported by <root>) - remotejdk11_linux - remotejdk11_linux_aarch64 - remotejdk11_linux_ppc64le - remotejdk11_linux_s390x - remotejdk11_macos ...(some lines omitted)... # Usage in <root> at <root>/MODULE.bazel:14:27 with the specified attributes: use_repo( toolchains, my_jdk="remotejdk17_linux", ) # Usage in bazel_tools@_ at bazel_tools@_/MODULE.bazel:23:32 with the specified attributes: use_repo( toolchains, "local_jdk", "remote_java_tools", "remote_java_tools_linux", "remote_java_tools_windows", "remote_java_tools_darwin", ) # Usage in rules_java@5.0.0 at rules_java@5.0.0/MODULE.bazel:30:27 with the specified attributes: use_repo( toolchains, "remote_java_tools", "remote_java_tools_linux", "remote_java_tools_windows", "remote_java_tools_darwin", "local_jdk", "remotejdk11_linux_toolchain_config_repo", "remotejdk11_macos_toolchain_config_repo", "remotejdk11_macos_aarch64_toolchain_config_repo", ...(some lines omitted)... )拡張機能で生成されたリポジトリの 基盤となるルールを確認します。
bazel mod show_repo --base_module=rules_java @remote_java_tools## @remote_java_tools: # <builtin> http_archive( name = "rules_java++toolchains+remote_java_tools", urls = ["https://mirror.bazel.build/bazel_java_tools/releases/java/v11.5/java_tools-v11.5.zip", "https://github.com/bazelbuild/java_tools/releases/download/java_v11.5/java_tools-v11.5.zip"], sha256 = "b763ee80e5754e593fd6d5be6d7343f905bc8b73d661d36d842b024ca11b6793", ) # Rule http_archive defined at (most recent call last): # /home/user/.cache/bazel/_bazel_user/6e893e0f5a92cc4cf5909a6e4b2770f9/external/bazel_tools/tools/build_defs/repo/http.bzl:355:31 in <toplevel>