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 を設定しなくてもデフォルトのフラグでターゲットを自動的にビルドします。
  • ビルドフラグが変更されるたびにビルド分析をやり直さないでください。

プロジェクト 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 の登録商標です。