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(Bazel 7.1 で提供されている #21435 を参照)。
  • 正規リポジトリ名を生成するスキームを改善し、依存関係のバージョン アップデートの前後でアクションのキャッシュ保存を改善しました。(#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 に適したビルドフラグを自動的に設定します。
  • プロジェクトでサポートされているフラグの組み合わせを定義し、bazelrcs を設定しなくても、デフォルト フラグでターゲットを自動的にビルドします。
  • ビルドフラグが変更されるたびにビルド分析をやり直すことは避けてください。

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 の登録商標です。