こんにちは、タイミーでバックエンドのテックリードをしている新谷 (@euglena1215) です。
GitHubマージキューTIPSシリーズ、前回までに、マージメソッドの制約やCIの高速化といったTIPSを共有してきました。今回は、マージキューのポテンシャルを最大限に引き出すためのパラメータチューニングと、そのために不可欠なキューの状態の可視化について解説します。
デプロイ効率と安定性のトレードオフ
マージキューには、その挙動をコントロールするためのいくつかのパラメータが存在します。
Build concurrency:マージキューのCIを同時に実行する並列数。Minimum/Maximum pull requests to merge:一度のデプロイ(マージ)に含めるPRの最小数と最大数。
これらのパラメータは、効率性と安定性という、二つの相反する要素を調整するために使用します。
- 効率性(デプロイの速さ):開発者の待ち時間を短縮するため、PRを迅速にマージすることが求められます。
- 安定性(変更の分離):問題発生時の影響範囲を限定し、原因特定を容易にするため、一度にマージする変更は少なくすることが望ましいです。
例えば、Maximum pull requests to merge を10に設定するとデプロイのスループットは向上しますが、障害発生時には10個のPRの中から原因を特定することが困難になります。逆に1に設定すると、原因特定は容易になりますが、PRが多数待機している場合に待ち時間が増加します。
キューの長さを計測する必要性
この関係を考慮してパラメータを調整するには、「現在のマージキューで待機しているPRがどの程度あるか」というデータが必要です。キューに待機しているPRがなければ設定を変更する必要はありませんが、常に多数のPRが待機している場合は、CIの並列数を増やすなどの対策を検討する必要があります。
しかし、キューの長さや待ち時間といった情報は、GitHubの標準機能では提供されていません。このため、キューの長さを計測し、可視化する仕組みを構築しました。
キューの長さを計測する方法
私たちのチームでは、GitHub Actionsを利用してキューの長さを計測し、Datadogへ送信しています。
その実装で利用している方法を紹介します。
ghコマンドによるキュー長の取得
GitHubマージキューの現在の長さは、GitHubのGraphQL APIを通じて取得できます。ghコマンドを使えば、これを1行のコマンドで簡単に行えます。
使用するコマンドは以下の通りです。
QUEUE_COUNT=$(gh api graphql -f query='
query {
repository(owner: "THIS_IS_ORG_NAME", name: "THIS_IS_REPO_NAME") {
mergeQueue(branch: "DEFAULT_BRANCH_NAME") {
totalCount: entries {
totalCount
}
}
}
}
' --jq '.data.repository.mergeQueue.totalCount.totalCount')
このコマンドは、GraphQLクエリで必要なデータ (totalCount) を指定し、ghコマンドの--jqフラグでレスポンスから値を直接抽出しています。
このコマンドを、on.merge_group(PRがマージキューに追加された時)をトリガーにしたGitHub Actionsで実行します。その結果をモニタリングツール(私たちの場合はDatadog)に送信することで、キューの長さを時系列グラフとして可視化できます。

このダッシュボードによって「どの時間帯にマージが集中するのか」「現在のパラメータ設定でキューが効率的に処理されているか」といった状況を把握できるようになりました。
データに基づくパラメータ調整の実際
このダッシュボードを2週間運用した結果、私たちのチームでは同時にマージキューに積まれていたPRは最大でも3件であることが分かりました。
この実績データに基づき、安定性をさらに高めるため、パラメータを以下のように調整しました。
Maximum pull requests to merge: 変更前 5 → 変更後 3Build concurrency: 変更前 10 → 変更後 6
一度にマージするPR数を実績値(3件)に合わせ、ビルドの並列数(Build concurrency)をその2倍に設定しました。これにより、リソースを効率的に使いつつ、より安定した運用を目指しました。
まとめ
マージキューは導入するだけでも一定の効果がありますが、その効果を高めるには、開発の規模や状況に応じてパラメータを継続的に調整することが重要です。その調整は、勘や感覚ではなく、今回紹介したような可視化されたデータに基づいて行うことが推奨されます。
今回はキューの可視化とパラメータ調整について解説しました。次回以降も、マージキューをより効果的に活用するための情報をお届けします。