Bazel システムは、長時間実行されるサーバー プロセスとして実装されています。これにより、バッチ指向の実装では不可能な多くの最適化(BUILD ファイル、依存関係グラフ、その他のメタデータのビルド間のキャッシュなど)を実行できます。これにより、増分ビルドの速度が向上し、
build や query などのさまざまなコマンドで、
読み込まれたパッケージの同じキャッシュを共有できるため、クエリが非常に高速になります。
bazel を実行すると、クライアントが実行されます。クライアントは、出力ベースに基づいてサーバーを検索します。出力ベースはデフォルトで、ベース ワークスペース ディレクトリのパスとユーザー ID によって決まります。そのため、複数のワークスペースでビルドする場合は、複数の出力ベースと複数の Bazel サーバー プロセスが存在することになります。同じワークステーション上の複数のユーザーは、出力ベースが異なる(ユーザー ID が異なる)ため、同じ
ワークスペースで同時にビルドできます。クライアントが実行中のサーバー インスタンスを見つけられない場合は、新しいインスタンスが起動されます。サーバー
プロセスは、一定期間操作がないと停止します(デフォルトでは 3 時間。起動オプション --max_idle_secs を使用して
変更できます)。
ほとんどの場合、サーバーが実行されていることは ユーザーにはわかりませんが、覚えておくと役立つことがあります。たとえば、さまざまなディレクトリで多くの自動ビルドを実行するスクリプトを実行している場合は、 アイドル状態のサーバーが大量に蓄積されないようにすることが重要です。これを行うには、 使用が完了したら明示的にシャットダウンするか、 短いタイムアウト期間を指定します。
Bazel サーバー プロセスの名前は、ps x または ps -e f
の出力に bazel(dirname) として表示されます。ここで、dirname はワークスペース ディレクトリのルートを囲む
ディレクトリのベース名です。次に例を示します。
ps -e f
16143 ? Sl 3:00 bazel(src-johndoe2) -server -Djava.library.path=...これにより、特定の
ワークスペースに属するサーバー プロセスを簡単に確認できます。(ps の他のオプションによっては、Bazel サーバー
プロセスに java という名前が付けられることがあります)。Bazel サーバーは、
shutdown コマンドを使用して停止できます。
bazel を実行すると、クライアントはまずサーバーが適切な
バージョンであることを確認します。そうでない場合は、サーバーが停止し、新しいサーバーが起動されます。これにより、
長時間実行されるサーバー プロセスの使用が適切な
バージョン管理を妨げないようにします。