Bazel プロジェクトビュー
Bazel プロジェクトビューは、IntelliJ IDEA が次の目的で使用する構成です。
Bazel ワークスペースのどの部分をインポート / インデックスするかを決定します
コードナビゲーション、補完、実行構成、テストなどの機能のために同期する Bazel ターゲットを決定します。
IntelliJ IDEA から開始された同期アクションとビルドアクションに Bazel フラグとその他の設定を適用します。
Bazel プロジェクトビューは、1 つまたは複数のサブツリーのみが必要な場合に、Bazel ワークスペース全体をプルするのを防ぎます。 これは Bazel の動作を変更するものではなく、Bazel と IntelliJ IDEA の作業範囲を限定するものです。 これによりパフォーマンスが向上し、プロジェクトの作業が容易になります。
プロジェクトビューの構成
プロジェクトビューは .bazelproject ファイルで設定されます。 プロジェクト内の任意の場所に、このファイルが複数存在する可能性があります。 .bazelproject ファイルの構文については、 .bazelproject ファイル参照 の章を参照してください。
現在のプロジェクトビューに移動する
現在アクティブなプロジェクトビューが構成されている場所が不明な場合は、IDE で対応するファイルに移動できます。
プロジェクトビューを選択
ワークスペースに複数のプロジェクトビューがある場合は、切り替えることができます。
プロジェクト ツールウィンドウから、 .bazelproject ファイルを右クリックし、 プロジェクトビューを読み込む を選択します。
Ctrl+Alt+S 設定から に移動し、 プロジェクトビューパス フィールドに .bazelproject ファイルへのパスを入力します。
.managed.bazelproject},{
リポジトリにコミットされ、リポジトリのメンテナーが所有する、特別な型の .bazelproject ファイルがあります。 共通のテンプレートを定義するには、 tools/intellij/.managed.bazelproject},{ に配置します。 大規模なリポジトリや短期間のリモート開発環境などのシナリオで、既定の最小限のビューを提供するために使用されます。
2 つのプロジェクトビューの型の相違を簡単にまとめると、次のとおりです。
.managed.bazelproject},{ | .bazelproject | |
|---|---|---|
目的 | 組織やリポジトリで中央管理される標準的なプロジェクトビューのテンプレート。 | IntelliJ IDEA がインデックス作成やビルドの際に実際に読み込む具体的なプロジェクトビュー。 |
ロケーション | 通常はリポジトリ直下の tools/intellij/.managed.bazelproject},{ 。 | チェックアウト先の .bazelbsp/.bazelproject 内に生成されます。 |
所有者 | リポジトリで管理(コードオーナー、ビルドチーム)。 | プラグインによって作成される、ユーザー単位・作業コピー単位のアーティファクト。 |
VCS | VCS にコミット。 | 通常はコミットしない。生成ファイルとして扱われる。 |
想定される編集 | 全員向けの共有テンプレートを変更する場合を除き、ローカルで編集することは基本的にありません。 | ここではローカルな微調整が可能ですが、ほかの人と共有されません。 |
.managed.bazelproject},{ ファイルを含む新しいプロジェクトを開くと、IntelliJ IDEA はそれに基づいて .bazelproject ファイルを生成します。
プロジェクトビューの解決における優先順位は次のとおりです。
{project root}/.bazelproject},{
managed.bazelproject},{ は {project root}/.bazelbsp/.bazelproject},{ にコピーされます( で設定可能)。
既定の {project root}/bazelbsp/.bazelproject は、次の設定で作成されます。
derive_targets_from_directories: true directories: .
.bazelproject ファイル参照
プロジェクトビューファイルは名前付きセクションに分割され、2 つのスペースでインデントされた Python のような形式が使用されます。
ファイルとセクションの構文
#以降から改行までの内容はコメントとして扱われます。セクションヘッダーは行の先頭から始まり、
name: bodyまたはname body形式を使用します。 セクション名の後には、スペースまたはコロンを使用できます。セクション本体は次のセクションヘッダーまで拡張されます。
セクションの種類
すべての名前付きセクションは、次のいずれかのタイプに属します。
単一値セクション: 1 つの値 (Boolean、Int、Path、String)、例:
derive_targets_from_directories: true import_depth 2リストセクション :複数の値をスペースまたは改行で区切ります。例えば:
build_flags: --config=ci --cxxopt=-O2除外可能なリストセクション :複数の値をスペースまたは改行で区切ります。
-で始まる項目は除外されます。 例:targets: //app:all -//app:tests
繰り返しセクション
セクションは複数回出現する場合があります。 その場合、以下の解決ルールが適用されます。
単一値セクション: 最後に出現したものが優先されます。
リストセクション: セクションは表示順に結合されます。
除外可能なリストセクション: 通常のリストセクションと同様に、含まれるリストと除外されるリストの両方が表示順に結合されます。
インポート
プロジェクトビューは、 インポート および try_import を使用して他のプロジェクトビューをインポートできます。
import path/to/file.bazelproject必須のインポート。 ファイルが見つからない場合、プロジェクトビューは有効ではないとみなされます。
try_import path/to/optional.bazelprojectオプションのインポート。 ファイルが見つからない場合は、他のプロジェクトビューをインポートしなくても、プロジェクトビューは有効のままです。
IntelliJ IDEA はまず インポート エントリをすべて解析し、次に try_import エントリをファイル内の出現順に解析します。 インポート後、現在のファイル自体のセクションが処理されます。
プロジェクトビューでは複数のインポートを使用できます。 この場合、インポートされたリストセクション(例: targets )はマージされ、単一値セクション(例: bazel_binary )は以前に検出されたセクションを上書きします。
セクション参照
以下に、利用可能なセクションの完全なリストをタイプ別に示します。 セクションタイプとその構文のリストについては、 セクションの種類 の章を参照してください。
除外可能なリストセクション
- targets (List<Path>)
インポートに含める Bazel ターゲットのセット。 パッケージの再帰ワイルドカード(
/...)をサポートします。 ターゲットの数が増えるほど、IDE の動作が遅くなる可能性があります。例:
targets: //install/src/main/kotlin/org/jetbrains/bazel/install //executioncontext/projectview/... -//executioncontext/projectview/src/main/kotlin/org/jetbrains/bazel/projectview/parser/...- directories (List<Path>)
Bazel ターゲットにマッピングするディレクトリ。 derive_targets_from_directories と併用することで、指定されたディレクトリをスキャンし、関連するターゲットを自動で検出できます。
例:
directories: install/src/main/kotlin/org/jetbrains/bazel/install executioncontext/projectview/ -executioncontext/projectview/src/main/kotlin/org/jetbrains/bazel/projectview/parser
リストセクション
- build_flags (List<String>)
すべての Bazel コマンド呼び出しで渡される Bazel フラグのセット。 デフォルトではフラグは渡されません。
例:
build_flags: --define=ij_product=intellij-latest- sync_flags (List<String>)
同期中に Bazel コマンド呼び出しで渡される Bazel フラグのセット。 デフォルトではフラグは渡されません。
例:
sync_flags: --define=ij_product=intellij-latest- test_flags (List<String>)
将来のリリースでサポートされる予定です。
- debug_flags (List<String>)
デバッグモードで
bazel runに渡される Bazel フラグのセット。例:
debug_flags: --cxxopt=-g- enabled_rules (List<String>)
プロジェクトで有効にする外部 Bazel ルールセットを明示的に宣言し、一部のセットアップでは不完全になる可能性がある自動検出をオーバーライドします。
例:
enabled_rules: rules_java rules_kotlin- import_run_configurations (List<Path>)
Bazel 同期中に実行構成としてインポートする XML ファイルのリスト。
例:
import_run_configurations: tools/intellij/run_application.xml tools/intellij/run_tests.xml- python_code_generator_rule_names (List<String>)
どの Bazel ルールの種類を Python コードジェネレーターとして扱うかを指定します。
例:
python_code_generator_rule_names: my_py_codegen_rule another_py_codegen
単一値セクション
- bazel_binary (パス)
Bazel のパスです。サーバーで、プロジェクトのビルドや Bazel のクエリの実行などに使用されます。 未指定の場合、サーバーは $PATH 変数のバイナリを使用します。
例:
bazel_binary: /usr/local/bin/bazel- derive_targets_from_directories (ブール値)
ディレクトリセクションのディレクトリからターゲットを派生させるかどうかを指定します。 デフォルトではターゲットは派生されません(false)が、ディレクトリはプロジェクトビューから除外されません。例:
derive_targets_from_directories: true- import_depth (整数)
Bazel ターゲットの依存関係をモジュールとしてインポートするレベル数を指定します。 ワークスペースに存在するターゲットのみがインポートされます。 負の値を指定すると、すべての推移的依存関係をインポートできます。 デフォルト値は
-1で、すべての推移的コンテキストが含まれます。例:
import_depth: 1- allow_manual_targets_sync (ブール値)
手動タグが付けられたターゲットの同期を許可します。 デフォルト(
false)では、手動のみのターゲットはスキップされます。例:
allow_manual_targets_sync: true- ide_java_home_override (パス)
IntelliJ IDEA が Java ターゲットの同期および IDE の操作中に使用する
JAVA_HOMEをオーバーライドします。 本来は Bazel の Java ツールチェーン/ランタイムから推論される JDK をオーバーライドします。 Bazel 自体は、構成済みのツールチェーンで引き続きビルドされます。このオーバーライドは IDE のみで有効です。例:
ide_java_home_override: /Users/me/Library/Java/JavaVirtualMachines/jbr-21Bazel の同期 / ビルドを、単一の同期 / ビルドではなく、シャードと呼ばれる小さなバッチに分割できます。 これにより、Bazel のメモリ不足を回避し、多数のターゲットを同期する際にコマンドラインが長くなりすぎるなどの問題を軽減できます。 Bazel で メモリリークが発生する可能性(英語)があるため、デフォルトは
falseです。例:
shard_sync: true- target_shard_size (整数)
シャードに構築するターゲットの数を指定します。 デフォルトは
1000です例:
target_shard_size: 500元のターゲットのリストをシャーディングする際に使用する戦略を指定します。 shard_sync と組み合わせて使用します。 デフォルトは
QUERY_AND_SHARDです。可能な値は次のとおりです。
EXPAND_AND_SHARD: ワイルドカードターゲットをパッケージターゲットに拡張し、単一のターゲットをクエリし、バッチにシャーディングするQUERY_AND_SHARD: 指定されたターゲットリストから拡張せずに単一のターゲットをクエリし、バッチに分割します。SHARD_ONLY: 展開されていないワイルドカードターゲットをバッチに分割する
例:
shard_approach: EXPAND_AND_SHARD- gazelle_target (文字列)
IntelliJ IDEA が Bazel の同期開始時に Gazelle ターゲットを自動的に実行するかどうかを指定します。 これにより、IntelliJ IDEA がターゲットを収集し、ソースをインデックスする前に、プロジェクトビューに含まれるディレクトリの BUILD ファイルが更新または生成されます。
例:
gazelle_target: //tools/gazelle:gazelle- index_all_files_in_directories (ブール値)
IntelliJ IDEA が、
ディレクトリセクションにリストされたディレクトリ配下のすべてのファイルを、Bazel ターゲットに属するかどうかに関係なくインデックス化するかどうかを指定します。 これにより、ターゲット以外のソース、ドキュメント、スクリプトの検索とナビゲーションが高速化されますが、モノレポや大規模プロジェクトではインデックス化自体が遅くなり、メモリを大量に消費する可能性があります。 デフォルトはfalseです。例:
index_all_files_in_directories: true- import_ijars (ブール値)
JVM ライブラリのインポート時に、完全な jar ではなくインターフェース / ヘッダー jar(ijar) を優先するかどうかを指定します。 インターフェース / ヘッダー jar には、パブリック API クラスのスタブのみが含まれ、完全なバイトコードは含まれません。 これにより、ライブラリ実装へのナビゲーションと一部の IDE 警告の誤検知を犠牲にして、インデックスのサイズが削減され、インポートのパフォーマンスが向上します。 デフォルトは
falseです。例:
import_ijars: true- derive_instrumentation_filter_from_targets (ブール値)
インポートされたすべてのターゲットの Bazel パッケージを含む
--instrumentation_filterを計算して追加するかどうかを指定します。falseの場合、インストルメンテーションフィルターは追加されません。または、 .bazelrc を使用して指定できます。 例:coverage --instrumentation_filter="^//"。 デフォルトはtrueです。例:
derive_instrumentation_filter_from_targets: false

