Bazel ロードマップ

概要

Bazel プロジェクトは、お客様のニーズに応えて進化を続けています。ここでは、2024 年の最新情報をお知らせします。

このロードマップでは、現在の取り組みと Bazel 開発の将来の予測について説明し、現在の優先事項と進行中のプロジェクトを把握できるようにします。

Bazel 8.0 リリース

2024 年後半に Bazel 8.0 長期サポート(LTS)を提供する予定です。次の機能の実装が予定されています。

Bzlmod: 外部依存関係管理システム

Bzlmod は推移的依存関係を自動的に解決するため、プロジェクトを高速かつリソース効率の高い状態に保ちながら、スケーリングできます。

Bazel 8 では、WORKSPACE のサポートがデフォルトで無効になります(--enable_workspace を使用して有効にすることは可能です)。Bazel 9 では、WORKSPACE のサポートが削除されます。Bazel 7.1 以降では、--noenable_workspace を設定して新しい動作を有効にできます。

Bazel 8.0 には、次のような Bazel の外部依存関係管理機能の拡張機能が多数含まれています。

  • 新しいフラグ --enable_workspacefalse に設定すると、WORKSPACE 機能を完全に無効にできます。
  • 新しいディレクトリ監視 API(#21435 を参照。Bazel 7.1 でリリース)。
  • 依存関係のバージョン更新全体でアクションのキャッシュ保存性を高めるため、正規のリポジトリ名を生成するスキームを改善しました。(#21316、Bazel 7.1 でリリース)
  • 共有リポジトリ キャッシュの改善(#12227 を参照)。
  • ベンダーとオフライン モードのサポート - ユーザーが事前にダウンロードした依存関係を使用してビルドを実行できるようにします(#19563 を参照)。
  • ロック ファイルのマージ競合を削減しました(#20396)。
  • 分割された MODULE.bazel (#17880)
  • モジュール拡張機能で生成されたリポジトリのオーバーライドを許可(#19301
  • ドキュメント(#18030#15821 など)と移行ガイド、移行ツールを改善しました。

リモート実行の改善

  • 非同期実行のサポートを追加し、フラグ --jobs で並列処理を増やしてリモート実行を高速化
  • 新しいコンパクトな実行ログにより、キャッシュミスをデバッグしやすくなりました。ログのサイズが 100 分の 1 に縮小され、実行時のオーバーヘッドが大幅に削減されました(#18643 を参照)。
  • ディスク キャッシュのガベージ コレクションを実装します(#5139 を参照)。
  • リモート出力サービスを実装して、任意のビルド出力の遅延ダウンロードを可能にします(#20933 を参照)。

Android、C++、Java、Python、Proto のルールの移行

Android、C++、Java、Python のルールセットを専用リポジトリに完全に移行し、Bazel リリースから切り離しました。この取り組みにより、Bazel ユーザーとルール作成者は、

  • Bazel とは独立してルールを更新します。
  • 必要に応じてルールを更新してカスタマイズします。

ルールセットの新しいロケーションは、bazelbuild/rules_androidrules_ccrules_javarules_pythongoogle/protobuf になります。rules_proto は非推奨になります。

Bazel 8 には、以前にバイナリの一部だったルールセットをリポジトリから自動的に使用する一時的な移行フラグが用意されています。これらのルールセットのすべてのユーザーは、最終的にリポジトリに依存し、Bazel の一部ではなかった他のルールセットと同様にリポジトリを読み込むことが想定されます。

Bazel 8 では、既存の拡張ルールとサブルール API も改善され、試験運用版ではなくなります。

Starlark の改善

  • シンボリック マクロは、BUILD ユーザー、マクロ作成者、ツールにとって使いやすい新しいマクロの記述方法です。Bazel の認識が限られている従来のマクロと比較して、シンボリック マクロは、一般的な落とし穴を回避し、ベスト プラクティスを適用するのに役立ちます。
  • パッケージ ファイナライザーは、カスタム パッケージ検証ロジックのファーストクラス サポートを追加するための提案された機能です。これらは native.existing_rules() の非推奨化を支援することを目的としています。

構成の柔軟性

  • 出力パス マッピングの安定化が継続: 移行を使用するルール デザイナー向けに、リモート キャッシュのパフォーマンスとビルド速度の改善が期待されます。
  • 特定の --platforms に適したビルドフラグを自動的に設定します。
  • プロジェクトでサポートされているフラグの組み合わせを定義し、bazelrc を設定しなくてもデフォルトのフラグでターゲットを自動的にビルドします。
  • ビルドフラグが変更されるたびにビルド分析をやり直さない。

Project Skyfocus - 保持されるデータ構造を最小限に抑える

Bazel は、高速な増分ビルドのために RAM に多くの状態を保持します。ただし、開発者が変更するのは、ソースファイルの小さなサブセットであることが多く(外部依存関係の 1 つであることはほとんどありません)、Skyfocus を使用すると、Bazel は不要な増分状態を削除して Bazel のメモリ フットプリントを削減する実験的な方法を提供しながら、同じ高速な増分ビルド エクスペリエンスを提供します。

最初のスコープは、保持されたヒープ指標の改善のみを目的としています。ヒープのピークを削減できる可能性がありますが、初期スコープには含まれていません。

その他

  • モバイル インストール v3。Android アプリケーションを段階的にデプロイするための、よりシンプルでメンテナンスしやすいアプローチ。
  • リポジトリ キャッシュと Bazel の install_base のガベージ コレクション。
  • サンドボックス化のオーバーヘッドが削減されました。

Bazel-JetBrains* IntelliJ IDEA のサポート

最新の JetBrains プラグイン リリースをサポートするための IntelliJ プラグインの増分更新。

このロードマップのスナップショットは目標を示したものであり、保証として受け取らないでください。優先度は、デベロッパーやお客様からのフィードバック、または新たな市場機会に応じて変更される可能性があります。

このロードマップの更新を含む新機能の通知を受け取るには、Google グループ コミュニティにご参加ください。

*Copyright © 2022 JetBrains s.r.o. JetBrains と IntelliJ は、JetBrains s.r.o の登録商標です。