萌えハッカーニュースリーダー

2025/11/22 15:26 Migrating to Bazel symbolic macros

出典: https://www.tweag.io/blog/2025-11-20-migrating-bazel-symbolic-macros/
hakase
博士

ロボ子、Bazelのマクロについて新しい情報が出てるぞ。今回はシンボリックマクロがメインみたいじゃ。

roboko
ロボ子

シンボリックマクロですか。Bazel 8で導入された、コードを明確にするための推奨マクロですね。

hakase
博士

そうじゃ!シンボリックマクロは、型付き引数とか、ターゲットの可視性を定義する機能があるらしいぞ。便利じゃな。

roboko
ロボ子

確かに便利そうですね。従来のレガシーマクロとはどう違うんですか?

hakase
博士

シンボリックマクロは、ターゲットを生成するテンプレートとして機能して、Bazelのロードフェーズで展開されるんじゃ。Bazelが明示的に認識してるから、「ファーストクラスマクロ」って呼ばれてるみたいじゃな。

roboko
ロボ子

なるほど。遅延評価もサポートしているんですね。

hakase
博士

そうそう。あと、シンボリックマクロで作られるターゲットの名前は、マクロの`name`パラメータと完全に一致するか、その後に`_`、`.`、`-`が続く必要があるらしいぞ。

roboko
ロボ子

名前の規則があるんですね。セキュリティ面も考慮されているのでしょうか?

hakase
博士

セキュリティといえば、シンボリックマクロは引数として渡されたファイルか、親パッケージが公開したファイルにしかアクセスできないらしいぞ。安心じゃな。

roboko
ロボ子

それは重要な制限ですね。ところで、引数の扱いには何か注意点はありますか?

hakase
博士

位置引数はサポートされてないみたいじゃ。属性は`attrs`ディクショナリで宣言するか、継承する必要があるみたいじゃな。あと、`attrs`ディクショナリでデフォルト値を宣言するのを忘れずに。マクロ関数のパラメータに定義されたデフォルト値は無視されるらしいぞ。

roboko
ロボ子

`attrs`ディクショナリですね。configurable attributesもサポートされているとのことですが、これはどういう意味ですか?

hakase
博士

configurable attributesは、設定によって属性の値を変えられる機能じゃ。シンボリックマクロのすべての属性は、特に宣言されてない限りconfigurableになるみたいじゃな。

roboko
ロボ子

柔軟性が高いですね。`select`オブジェクトを使う場合はどうすればいいですか?

hakase
博士

`select`オブジェクトは実際の値に解決されないから、`alias`ターゲットと`location`を使うと解決できるらしいぞ。

roboko
ロボ子

なるほど。少し複雑ですね。BUILDファイルのクエリについてはどうですか?

hakase
博士

マクロはBUILDファイルのクエリ時に評価されるから、Bazel自体を使って「raw」BUILDファイルをクエリすることはできないんじゃ。`buildozer`ツールを使うと、BUILDファイルの内容をクエリできるみたいじゃ。

roboko
ロボ子

`buildozer`ですね。覚えておきます。

hakase
博士

レガシーマクロとシンボリックマクロは組み合わせることもできるから、移行中に役立つ場合もあるみたいじゃな。レガシーマクロも当面の間はサポートされるみたいじゃし。

roboko
ロボ子

段階的に移行できるのは良いですね。シンボリックマクロ、奥が深いですね。

hakase
博士

そうじゃな!しかし、マクロを使いすぎると、ビルドが複雑になるから、ほどほどにするのが大事じゃぞ!

roboko
ロボ子

肝に銘じます。今日はありがとうございました。

hakase
博士

どういたしまして。最後に一つ、ロボ子。シンボリックマクロを使いこなせば、君も立派なマクロ…じゃなくて、デキるロボットになれるぞ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search