Bazel ロードマップ

問題を報告 ソースを表示 毎晩

概要

皆様のニーズに応じて Bazel プロジェクトが進化し続ける中、Google は 2024 年のアップデートについて共有したいと思います。

このロードマップでは、Bazel 開発の将来に関する現在のイニシアチブと予測について説明し、現在の優先事項と進行中のプロジェクトを可視化します。

Bazel 8.0 リリース

Bazel 8.0 は 2024 年後半に長期サポート(LTS)をリリースする予定です。実装が予定されている機能は以下のとおりです。

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

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

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

Bazel 8.0 では、Bazel の外部依存関係管理機能に次のような機能強化が追加されます。

  • 新しいフラグ --enable_workspacefalse に設定すると、WORKSPACE の機能を完全に無効にできます。
  • 新しい Directory Watch 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 に多くの状態を保持し、高速な増分ビルドを実現しています。ただし、多くの場合、デベロッパーはソースファイルの小さなサブセットを変更します(外部依存関係はほとんど変更しません)。Skyfocus を使用すると、Bazel は試験運用版の方法で不要な増分状態を破棄し、Bazel のメモリ フットプリントを削減しながら、同じ高速増分ビルド エクスペリエンスを提供します。

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

その他

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

Bazel-JetBrains* IntelliJ IDEA サポート

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

このロードマップのスナップショットは、あくまで対象であり、保証するものではありません。優先事項は、デベロッパーやお客様からのフィードバックや、新たな市場機会に応じて、変更される可能性があります。

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

*Copyright © 2022 JetBrains s.r.o. JetBrains および IntelliJ は JetBrains s.r.o の登録商標です。