よくある質問

拡張機能の作成に関するよくある問題と質問を以下に示します。

ファイルが生成されない、またはアクションが実行されないのはなぜですか?

Bazel は、リクエストされた出力ファイルを生成するために必要なアクションのみを実行します。

  • 必要なファイルにラベルが付いている場合は、直接リクエストできます: bazel build //pkg:myfile.txt

  • ファイルがターゲットの出力グループにある場合は、コマンドラインでその 出力グループを指定する必要があります: bazel build //pkg:mytarget --output_groups=foo

  • コマンドラインでターゲットが 指定されるたびにファイルを自動的にビルドする場合は、 DefaultInfo プロバイダを返して、ルールのデフォルト出力に追加します。

詳細については、ルールページをご覧ください。

実装関数が実行されないのはなぜですか?

Bazel は、ビルド用にリクエストされたターゲットのみを分析します。コマンドラインでターゲットの名前を指定するか、ターゲットに依存するものを指定する必要があります。

アクションまたはバイナリの実行時にファイルが見つからない

1)ファイルがアクションまたは バイナリの入力として登録されていること、2)実行されるスクリプトまたはツールが正しいパスを使用してファイルにアクセスしていることを確認してください。

アクションの場合、アクションを作成する ctx.actions.* 関数 に渡すことで入力を宣言します。ファイルの適切なパスは、 File.path を使用して取得できます。

バイナリ(bazel run または bazel test コマンドで実行される実行可能出力)の場合、 runfilesに含めることで入力を宣言します。path フィールドを使用する代わりに、 File.short_path を使用します。これは、バイナリが実行される ランファイル ディレクトリに対するファイルの相対パスです。

bazel build //pkg:mytarget でビルドされるファイルを制御するにはどうすればよいですか?

DefaultInfo プロバイダを使用して デフォルト出力を設定します

ビルドの一部としてプログラムを実行したり、ファイル I/O を行ったりするにはどうすればよいですか?

ツールは、ビルドの他の部分と同様にターゲットとして宣言し、 実行フェーズで実行して他のターゲットのビルドに役立てることができます。ツールを実行するアクションを作成するには、ctx.actions.run を使用し、ツールを executable パラメータとして渡します。

読み込みフェーズと分析フェーズでは、ツールを実行することも、ファイル I/O を 実行することもできません。つまり、ツールとファイルの内容(BUILD ファイルと .bzl ファイルの内容を除く)は、ターゲット グラフとアクション グラフの作成方法に影響しません。

実行フェーズの前と実行フェーズ中に同じ構造化データにアクセスする必要がある場合はどうすればよいですか?

構造化データを .bzl ファイルとしてフォーマットできます。ファイルを load() して 読み込みフェーズと分析フェーズ中にアクセスできます。実行フェーズ中に必要なアクションと実行可能ファイルに、入力または ランファイルとして渡すことができます。

Starlark コードをドキュメント化するにはどうすればよいですか?

ルールとルール属性の場合は、ドキュメント文字列リテラル(三重引用符で囲むことも可能)を docrule または attr.*() パラメータに渡すことができます。ヘルパー 関数とマクロの場合は、ここに記載されている形式 に従って、三重引用符で囲まれたドキュメント文字列リテラルを使用します 通常、ルール実装関数には独自のドキュメント文字列は必要ありません。

想定される場所に文字列リテラルを使用すると、自動化 ツールでドキュメントを抽出しやすくなります。コードの読みやすさに役立つ場合は、標準の文字列以外のコメントを自由に使用してください。