このセクションでは、一般的な各種用語と概念を定義します。 作成ルールを使用します。
目次
- Bourne シェルのトークン化
- ラベルの拡張
- ほとんどのビルドルールで定義される一般的な属性
- すべてのビルドルールに共通する属性
- すべてのテストルールに共通する属性(*_test)
- すべてのバイナリルールに共通する属性(*_binary)
- 構成可能な属性
- 暗黙的な出力ターゲット
Bourne シェルのトークン化
一部のルールで、特定の文字列属性が複数に分割される Bourne シェルのトークン化ルールに従って単語が抽出されます。 スペースは引用符で囲まないで、個々の単語を区切り、 二重引用符とバックスラッシュは、 説明しました。
このトークン化の対象となる属性は、 使用しないでください。
  「Make」の対象となる属性変数展開と Bourne シェル
  トークン化は通常、任意のオプションを
  その他のツールもサポートしています。このような属性の例として、
  cc_library.copts と java_library.javacopts。
  これらの置換により
  構成固有のリストに展開する単一の文字列変数
  できます。
ラベルの展開
  ごく一部のルールでは、一部の文字列属性にラベルが適用される
  展開: 文字列として有効なラベルが
  部分文字列(//mypkg:target など)であり、そのラベルは
  現在のルールの前提条件として宣言されている場合、
  で表されるファイルのパス名
  ターゲット
  //mypkg:target。
  属性の例: genrule.cmd、
  cc_binary.linkopts。詳細は、
  相対ラベルの有無といった問題に対して
  開いています。複数のファイルに展開されるラベルは
  ルール属性のドキュメントで、
  あります。
ほとんどのビルドルールで定義される一般的な属性
このセクションでは、多くのビルドルールによって定義される属性について説明します。 すべてではありません
| 属性 | 説明 | 
|---|---|
| data | 
 実行時にこのルールで必要なファイル。ファイルまたはルールのターゲットをリストできます。一般 任意のターゲットを許可します。 
 
新しいルールで  | 
| deps | 
 
このターゲットの依存関係。通常は、ルール ターゲットのみをリストします。(ただし、
一部のルールでは、 通常、言語固有のルールにより、リストされるターゲットは、 特定のプロバイダ 
ターゲットが、Cloud KMS を使用して別のリソースに依存することの意味の正確なセマンティクスは、
 
ほとんどの場合、 | 
| licenses | 
 この特定のターゲットに使用されるライセンス タイプの文字列のリスト。 これは、Bazel で使用されなくなった非推奨のライセンス API の一部です。すべきでないこと 使用します。 | 
| srcs | 
 
このルールによって処理または追加されたファイル。通常、ファイルは直接リストされますが、
は、ルールのターゲット( 多くの場合、言語固有のルールにより、リストされたファイルには特定のルールが ファイル拡張子。 | 
すべてのビルドルールに共通する属性
このセクションでは、すべてのビルドに暗黙的に追加される属性について説明します。 できます。
| 属性 | 説明 | 
|---|---|
| compatible_with | 
 以下に加えて、このターゲットを構築できる環境のリスト 環境に依存しています。 これは Bazel の制約システムの一部です。これにより、ユーザーはどの Pod が ターゲット同士の相互依存が可能です。たとえば、外部にデプロイ可能な バイナリは、企業秘密のコードを含むライブラリに依存すべきではありません。詳しくは、 <ph type="x-smartling-placeholder"></ph> ConstraintSemantics をご覧ください。 | 
| deprecation | 
 このターゲットに関連付けられている、説明付きの警告メッセージ。 通常これは、ターゲットが古くなったことをユーザーに知らせるために使用されます。 別のルールに置き換わっている、特定のパッケージに限定公開されている なんらかの理由で有害と判断されます名前は、 ウェブページ、バグ番号、移行 CL の例などの参照情報を メッセージを回避するために必要な変更を簡単に確認できます。 交換の減少として使用できる新しい目標がある場合、それは 古いターゲットのすべてのユーザーを移行することをおすすめします 
この属性はビルド方法には影響しませんが、
ビルドツールの診断出力に影響することがあります。ビルドツールは
 パッケージ内の依存関係はこの警告から除外されるため、 たとえば、非推奨のルールのテストを構築しても、 警告が表示されます。 非推奨のターゲットが別の非推奨のターゲットに依存している場合、警告は表示されません。 メッセージが発行されます。 ユーザーが使用をやめると、ターゲットを削除できます。 | 
| distribs | 
 この特定のターゲットに使用される分散方法文字列のリスト。 これは、Bazel で使用されなくなった非推奨のライセンス API の一部です。すべきでないこと 使用します。 | 
| exec_compatible_with | 
 
リスト
 | 
| exec_properties | 
  このターゲットに対して選択されたプラットフォームの  プラットフォーム レベルのプロパティとターゲット レベルのプロパティの両方にキーが存在する場合、値はターゲットから取得されます。 | 
| features | 
 機能とは、ターゲットで有効または無効にできる文字列タグです。「 対象物の意味はルール自体によって異なります。 この  | 
| restricted_to | 
 代わりにこのターゲットを構築できる環境のリスト 環境に依存しています。 
これは、Bazel の制約システムの一部です。詳しくは、
 | 
| tags | 
   
  タグは任意のルールで使用できます。テストと検証のタグ
   
  Bazel は次の場合にサンドボックス コードの動作を変更します。
  任意のテストまたは  
 テストのタグは通常、テストにおける役割にアノテーションを付けるために使用されます。 デバッグとリリースのプロセスを使用します通常、タグは C++ と Python で最も有用です このテストにはランタイム アノテーション機能がありません。タグとサイズの使用 要素を使用すると、コードベースに基づいてテストスイートを柔軟に組み合わせることができます。 チェックイン ポリシーが適用されます。 
  Bazel は、
  テストルールの  
 | 
| target_compatible_with | 
 
リスト
 互換性のないターゲットに推移的に依存するターゲット自体 互換性がないと見なされますまた、ビルドとテストでもスキップされます。 空のリスト(デフォルト)は、ターゲットに互換性があることを示します。 すべてのプラットフォームに対応します 
 
Workspace ルール以外のすべてのルールでサポートされています。
属性です。
一部のルールでは、この属性は機能しません。たとえば、
 
 詳しくは、 プラットフォーム 互換性のないターゲットのスキップに関する詳細をご覧ください。 | 
| testonly | 
 True の場合、testonly ターゲット(テストなど)のみがこのターゲットに依存できます。 
同様に、 
テスト( この属性は、ターゲットを バイナリに含まれているファイルです。 testonly は実行時ではなくビルド時に適用され、伝播するため 依存関係ツリーで拡散している場合は、慎重に適用する必要があります。対象 偽のスタブやフェイクなど、 単体テストや統合テストにも役立つ 本番環境にリリースされるのと同じバイナリが関係する testonly とマークすべきではありません。これとは逆に、 リンクさえも危険です 通常の動作をオーバーライドする場合は、必ず testonly とマークしてください。 | 
| toolchains | 
 
  このターゲットの [Make 変数] が、
  許可します。これらのターゲットは、特定のリソースへの
   
 
  これは、Terraform の概念は
    ツールチェーンの解決
    これは、プラットフォームに依存する設定のルール実装で使用されます。これは使用できません。
  特定の  | 
| visibility | 
 
ターゲットの  | 
すべてのテストルールに共通する属性(*_test)
このセクションでは、すべてのテストルールに共通する属性について説明します。
| 属性 | 説明 | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| args | 
 Bazel がターゲットに渡すコマンドライン引数
 
これらの引数は、 | ||||||||||||||||||||
| env | 
   
  テストの実行時に設定する追加の環境変数を指定します。
   
  この属性は、 | ||||||||||||||||||||
| env_inherit | 
 プロジェクトから継承する追加の環境変数を
   
  この属性はネイティブ ルール( | ||||||||||||||||||||
| size | 
 テスト ターゲットの「重さ」、つまり実行に必要な時間/リソースを指定します。 単体テストは「小規模」、統合テストは「中」、エンドツーエンド テストは「大規模」と見なされますまたは
「enormous」です。Bazel はこのサイズを使用してデフォルトのタイムアウトを決定します。デフォルトのタイムアウトは
 テストサイズは、以下のデフォルトのタイムアウトと想定されるピーク ローカル リソースに対応します。 用途: 
 環境変数  | ||||||||||||||||||||
| timeout | 
 返される前に予想されるテスト実行時間。 
テストのサイズ属性はリソースの見積もりを制御しますが、テストのサイズ属性はリソースの見積もりを
個別に設定できます。明示的に指定しない場合、
タイムアウトはテストサイズに基づきます。テスト
タイムアウトは  
 
上記以外の時間では、テストのタイムアウトは
 環境変数  | ||||||||||||||||||||
| flaky | 
 テストを「不安定」としてマークします。 設定すると、テストが 3 回まで実行され、失敗した場合にのみ不合格としてマークされます 失敗します。デフォルトでは、この属性は False に設定されており、テストは 1 回だけ実行されます。なお、この属性は、通常は使用しないことをおすすめします。 テストは、アサーションが維持されていれば、確実に合格する必要があります。 | ||||||||||||||||||||
| shard_count | 
 並列シャードの数を指定します 使用できます。 この値は、一致するイベント数を
テスト実行に使用する並列シャードを指定します一部のテストでは
このパラメータは、シャーディングの有効化に
あります。 テストのシャーディングが有効になっている場合、テストの生成時に環境変数  シャーディングを行うには、テストランナーがテストのシャーディング プロトコルをサポートしている必要があります。 そうでない場合は、すべてのシャードですべてのテストが実行される可能性が高いため、 意図したものではありません。 詳しくは、 テストのシャーディング をご覧ください。 | ||||||||||||||||||||
| local | 
 テストをサンドボックス化せずにローカルで強制的に実行します。 True に設定すると、「local」を指定するのと同じ結果になります。タグとして
( | 
すべてのバイナリルールに共通する属性(*_binary)
このセクションでは、すべてのバイナリルールに共通する属性について説明します。
| 属性 | 説明 | 
|---|---|
| args | 
 
Bazel の実行時にターゲットに渡すコマンドライン引数
 
注: ターゲットの実行時に引数は渡されません。
Bazel 以外(たとえば、Terraform でバイナリを手動で実行する、
 | 
| env | 
 ターゲットの作成時に設定する追加の環境変数を指定します。
   
  この属性はネイティブ ルール( 
注: ターゲットの実行時に環境変数は設定されません。
Bazel 以外(たとえば、Terraform でバイナリを手動で実行する、
 | 
| output_licenses | 
 このバイナリが生成する出力ファイルのライセンス。 これは、Bazel で使用されなくなった非推奨のライセンス API の一部です。すべきでないこと 使用します。 | 
構成可能な属性
ほとんどの属性は「構成可能」です。つまり、実行時に値が変更されることがあります。 ターゲットはさまざまな方法で構築されます。具体的には、構成可能な属性が Bazel コマンドラインに渡されるフラグ、または 下流の依存関係がターゲットをリクエストしています。これは 複数のプラットフォームやコンパイル モードに応じてターゲットをカスタマイズできます。
  次の例では、ターゲットごとに異なるソースを宣言しています
  構築できますbazel build :multiplatform_lib --cpu x86 実行中
  x86_impl.cc を使用してターゲットをビルドし、
  --cpu arm を指定すると、代わりに arm_impl.cc が使用されます。
cc_library(
    name = "multiplatform_lib",
    srcs = select({
        ":x86_mode": ["x86_impl.cc"],
        ":arm_mode": ["arm_impl.cc"]
    })
)
config_setting(
    name = "x86_mode",
    values = { "cpu": "x86" }
)
config_setting(
    name = "arm_mode",
    values = { "cpu": "arm" }
)
  select() 関数
  構成可能な属性の代替値が選択されます。
  対象: config_setting
  または constraint_value
  ターゲットの構成が満たしている条件を定義します。
  Bazel は、マクロの処理の後と前に構成可能な属性を評価します
  処理ルール(厳密には、
  <ph type="x-smartling-placeholder"></ph>
  読み込みと分析のフェーズをご覧ください。
  select() の評価前の処理では、
  select() が選択するブランチに格納されます。マクロなど
  動作し、bazel query は、
  ターゲットの構成可能な依存関係について、控えめに推測するだけです。詳しくは、
  <ph type="x-smartling-placeholder"></ph>
  こちらのよくある質問
  ルールとマクロで select() を使用する方法の詳細をご覧ください。
  ドキュメントで nonconfigurable とマークされている属性は使用できません
  使用できます。Bazel では属性を構成できないのが一般的です。
  問題解決方法を判断するには、その価値を社内で知る必要があります
  select()。
<ph type="x-smartling-placeholder"></ph>をご覧ください。 構成可能なビルド属性をご覧ください。
暗黙的な出力ターゲット
C++ の暗黙的な出力は非推奨になりました。使用は控えてください 可能な限り他の言語で行います非推奨のパスはまだありません 最終的にはサポート終了となります。
BUILD ファイルでビルドルールを定義する場合、
  新しい名前付きのルール ターゲットをパッケージ内で宣言します。多数のビルドルール
  関数は、暗黙的に 1 つ以上の出力ファイルを伴う
  その内容と意味はルール固有です。
  たとえば、明示的に宣言する
  java_binary(name='foo', ...) 個のルールに加えて、
  出力ファイルの暗黙的な宣言
  foo_deploy.jar を同じパッケージのメンバーとしてターゲットに設定します。
  (このターゲットは自己完結型の Java アーカイブであり、
  します)。
  暗黙的な出力ターゲットは、
  ターゲット グラフ。他のターゲットと同様にオンデマンドで構築され、
  トップレベルのビルド コマンドで指定されるか、
  他のビルド ターゲットに必要な前提条件です。特徴
  BUILD ファイルでは依存関係として参照され、
  bazel query などの分析ツールの出力。
ビルドルールの種類ごとに、ルールのドキュメントに 暗黙的な依存関係の名前と内容が 出力が生成されます。
  2 つのモデルの間に重要だが、微妙な違いは
  2 つの Namespace があります。
  labels はターゲットを識別します。
  ルールまたはファイルがあります。ファイル ターゲットは、
  ソース(または入力)ファイルのターゲットと派生(または出力)ファイル
  できます。BUILD ファイルでは
  コマンドラインからビルドするか、bazel query を使用して調べる
  これがターゲット名前空間です。各ファイルターゲットは
  ディスク上の 1 つの実際のファイル(「ファイルシステムの名前空間」)。各ルール
  ターゲットはディスク上のゼロ、1 つ、または複数の実際のファイルに対応します。
  対応するターゲットがないファイルがディスク上に存在する可能性があります。
  C++ コンパイル中に生成された .o オブジェクト ファイルなど
  BUILD ファイル内やコマンドラインから参照することはできません。
  このようにして、特定の実装の詳細がビルドツールに表示されない場合があります。
  確認しますこれについては
  BUILD コンセプト リファレンスをご覧ください。