DEVELOPMENT / DEVOPS / 2026.10
大きなPRや積み重ねPRを扱う自動化ほど、非同期処理の最終状態を正しく見届ける必要があります。
PUT .../merge-asyncのHTTP 202は処理の受理です。返されたUUIDでGETを行い、merged・enqueued・failedを判別します。[^api]enqueuedはキューに入っただけでマージ完了ではありません。自動化の成功条件はマージ済み状態まで追跡して設計します。^api従来の同期マージAPIは1回のリクエストでマージ結果を返します。一方、ルール評価、複数PRの処理、マージキューなどは時間がかかることがあります。GitHubは非同期APIを、複雑なマージでタイムアウトを避けやすく、バックグラウンドで再試行できる方式として説明し、プログラムからマージする際の推奨経路と位置づけました。これはGitHubの製品説明であり、すべてのリポジトリでマージ所要時間が短縮するという実測結果ではありません。[news][api]
積み重ねPR(stacked PR)は、小さな変更を依存関係のある複数PRに分ける方法です。GitHubの現行文書では、このPR群をAPIからマージするには非同期APIが必須です。[stack][api]
merge_actionはdefault、direct_merge、merge_queueを選べます。defaultは対象ブランチにキューが設定されていればキューを使い、そうでなければ直接マージします。bypass_rulesもありますが、権限のある利用者が明示的に指定する例外操作です。通常の自動化では既定のままルールを尊重するのが基本です。[^api]
| 応答・状態 | 意味 | 自動化での判断 |
|---|---|---|
| PUT: HTTP 202 | 非同期要求を受け付けた | 成功完了にはしない。UUIDを保存 |
| GET: pending | 処理中 | 間隔を空けて再確認 |
| GET: merged | ベースブランチにマージ済み | マージコミットIDを記録 |
| GET: enqueued | マージキューへ追加済み | PRのマージ済み状態を別途追跡 |
| GET: failed | 要求が失敗 | 理由を記録し、ルール・競合を確認 |
GitHubの文書では、ブランチ保護やリポジトリルールはPUT時点で完全には評価されず、後段で失敗する可能性があります。202をデプロイ開始の合図にしてはいけない理由です。また、enqueuedのGET結果はキュー投入に対する最終結果で、その後にmergedへ変わるわけではありません。[^api]
以下はAPIの形を示す擬似コードです。実行用トークンの取得・保存方法は組織の秘密情報管理に従ってください。shaには事前に取得したPRの現在のhead SHAを指定し、確認後にPRが更新された場合の意図しないマージを防ぎます。[^api]
PUT /repos/OWNER/REPO/pulls/NUMBER/merge-async
body: {"sha":"確認済みのPR head SHA","merge_action":"default"}
202ならUUIDを保存
GET /repos/OWNER/REPO/pulls/NUMBER/merge-async/UUID
pending → 間隔を空けて再確認
merged → マージコミットIDを記録し次工程へ
enqueued → PRのmerged状態を別の確認経路で監視
failed → 理由を記録して停止
shaを省略した場合もGitHubは要求時のheadを使い、処理までに更新されたらキャンセルすると説明しています。明示すると自動化側の意図が監査しやすくなります。[^api]PUTの200、202、400、409を分岐します。409は同じPRの保留中要求がある場合にUUIDとオプションを返すため、無条件に別要求を連打しません。[^api]202ならGETで確認します。結果は最終更新から24時間保持され、その後UUID照会は404になり得ます。タイムアウトと失敗通知を設け、ジョブを放置しないでください。[^api]enqueuedの後はPRが実際にマージされたか別途確認します。キューから除外される場合もあります。^api自動マージbotやリリースパイプラインは、単一のHTTP応答ではなく要求・処理・キュー・実際のマージを別の状態として管理する必要があります。GitHubは積み重ねPRの対象までの未マージ下位PRをまとめて扱い、要求を原子的に処理すると説明しています。レビューとチェックが揃わなければ、後段で失敗し得ます。^stack
実務上の推論として、デプロイやリリースノート作成のトリガーは202やenqueuedではなく、マージ済みのPRまたはベースブランチ上のコミットを根拠に置くのが安全です。
Contents: writeが必要です。bypass_rulesを安易に有効化しないでください。[^api]積み重ねPRの正式提供範囲、キュー連携の運用実績、既存の同期APIを使うbotの移行状況です。まずはテスト用リポジトリでpending → mergedとenqueued → 実際のマージを別経路として検証し、成功条件を見直すとよいでしょう。
最終確認日:2026年10月2日(日本時間)。 発表日は2026年10月1日。仕様とステータスはGitHubの一次資料、CI運用の勧めは編集上の提案です。
[^news]: GitHub Changelog:非同期マージAPIの一般提供(2026年10月1日) [^api]: GitHub公式REST API:非同期マージ要求と結果取得