Bazel 6.3.0 で導入された mod
コマンドには、
Bzlmod が有効な場合、ユーザーは外部依存関係グラフを理解できます。これは、
依存関係グラフを可視化したり、特定のモジュールや
あるモジュールのバージョンがグラフに存在する場合、バッキング リポジトリ定義を表示して
生成されたモジュール拡張機能とリポジトリの使用状況を検査し、
使用できます。
構文
bazel mod <subcommand> [<options>] [<arg> [<arg>...]]
使用可能なサブコマンドとそれに対応する必須の引数は次のとおりです。
graph
: プロジェクトの完全な依存関係グラフを表示します。このグラフは、 されます。--from
で 1 つ以上のモジュールが指定されている場合、これらのモジュールは モジュールはルートの直下に表示され、グラフは あります(例を参照)。deps <arg>...
: 各プロジェクトの解決済みの直接依存関係を表示します。 (graph
と同様に)を指定します。all_paths <arg>...
: ルートから 指定された<arg>...
。--from
で 1 つ以上のモジュールが指定されている場合、 これらのモジュールはルートの直下に表示され、グラフには--from
モジュールから引数モジュールへの既存のパス( 例を参照)。path <arg>...
: セマンティクスはall_paths
と同じですが、--from
モジュールの 1 つから引数モジュールのいずれかへの単一のパスです。explain <arg>...
: 指定したモジュールが表示されるすべての場所を表示します。 モジュールとともに、依存関係グラフに できます。explain
コマンドの出力は、基本的にはall_paths
コマンド(1)ルート モジュールを含む2)ルート モジュールの 引数モジュールにつながる直接的な依存関係3)引数 モジュール直接扶養家族および 4)引数モジュール自体(例を参照)。show_repo <arg>...
: 指定したリポジトリの定義を表示します( 例を参照)。show_extension <extension>...
: 各インスタンスに関する情報を表示します。 指定した拡張子: 生成されたリポジトリとモジュールのリスト そのモジュールをuse_repo
を使用してインポートし、その使用法のリストを 拡張子が、指定された名前リンクを含む タグとuse_repo
呼び出し(例を参照)
<arg>
は、1 つ以上のモジュールまたはリポジトリを指します。以下のいずれかになります。
リテラル文字列
<root>
: 現在のモデルを表すルート モジュール できます。<name>@<version>
: バージョン<version>
のモジュール<name>
。モジュールの場合 レジストリ以外のオーバーライドで、<version>
としてアンダースコア(_
)を使用します。<name>
: モジュール<name>
の現在のすべてのバージョン。@<repo_name>
: 指定された想定どおりのリポジトリ name を--base_module
のコンテキストで使用します。@@<repo_name>
: 指定された正規バージョンがあるリポジトリ 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>[,...]]
デフォルト:<root>
: 構成元のモジュール グラフはgraph
、all_paths
、path
、explain
で展開されています。確認 サブコマンドをご覧ください。--verbose
デフォルト: "false": 出力グラフ エクストラに含める 各モジュールのバージョン解決に関する情報が出力されます。モジュールが 解決中に変更されたバージョン(そのバージョンに置き換わったバージョンを表示するか、 元のバージョンは何で置き換えられたのか、どのモジュールが 理由が最小バージョンである場合、新しいバージョンをリクエストしました。 選択。--include_unused
デフォルト: "false": 出力グラフに 本来は依存関係グラフに存在していましたが、 モジュール解決後は使用されない。--extension_info <mode>
: モジュール拡張機能に関する情報を含めます。 usages を出力グラフの一部として追加します(例を参照)。<mode>
以下のいずれかになります。hidden
(デフォルト): 拡張機能については何も表示しません。usages
: 拡張機能が使用されている各モジュールに拡張機能を表示します。。$<extension>
の形式で出力されます。repos
:usages
に加えて、次のコマンドを使用してインポートしたリポジトリを表示します。 拡張機能の使用量ごとにuse_repo
。all
:usages
とrepos
に加えて、次も表示します 拡張機能が生成したリポジトリのうち、どのモジュールにもインポートされないもの。これらの 追加のリポジトリは、そのリポジトリ生成の 点線のエッジで接続されています。
--extension_filter <extension>[,<extension>[,...]]
: 指定すると、 出力グラフには、指定した拡張機能を使用するモジュールのみが含まれる そのモジュールにたどり着くパスを 確認します空の拡張機能リスト(--extension_filter=
内)は、使用するすべての拡張機能を指定するのと同じ意味を持ちます。 依存関係グラフの任意のモジュールで表示できます。--depth <N>
: 出力グラフの深さ。深度 1 にすると その直接依存関係が含まれます。explain
のデフォルトは 1、deps
のデフォルトは 2 です。 他は無限大にしています--cycles
デフォルト: "false": 出力グラフにサイクルのエッジを含めます。--include_builtin
デフォルト: "false": 組み込みモジュール(@bazel_tools
など)が含まれます。このフラグは、 組み込みのモジュールは、他のすべてのモジュールに暗黙的に依存します。 出力が大きく雑然とします--charset <charset>
デフォルト: utf8: テキストに使用する文字セットを指定します。 出力です。有効な値は"utf8"
と"ascii"
です。唯一の重要な 違いは、グラフの描画に使用される特殊文字が"text"
出力形式。これは"ascii"
文字セットには存在しません。 そのため、"ascii"
文字セットは、 レガシープラットフォームに 対応しています--output <mode>
: モジュール拡張機能の使用状況に関する情報を次のように追加します。 出力グラフの一部になります。<mode
>以下のいずれかになります。text
(デフォルト): 人が読める形式の出力グラフ。 (木として平坦化されます)。json
: グラフを JSON オブジェクト形式( します。graph
: Graphviz のドット表現でグラフを出力します。
bazel mod graph --output graph | dot -Tsvg > /tmp/graph.svg
その他にも次のような対応策があります。
--base_module <arg>
デフォルト:<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")
<ph type="x-smartling-placeholder"> | <ph type="x-smartling-placeholder"> |
アプリケーションの依存関係グラフ全体を表示する できます。
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: # <builtin> http_archive( name = "rules_cc~0.0.1", 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, ) # 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> ## stardoc: # <builtin> http_archive( name = "stardoc~0.5.0", 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, ) # 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>
依存関係グラフを作成します。
bazel mod graph --extension_info=usages --extension_filter=all
<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 ...
Google Cloud Storage バケットに対して生成された その拡張機能が各モジュールでどのように使用されるかを説明します。
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~5.0.0~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>