GitHub API の 405 エラー:原因と解決策

冒頭まとめ GitHub API の 405 Method Not Allowed は、名前から受ける印象と中身が食い違うコードです。HTTP のメソッドを間違えたという意味ではありません。GitHub 公式の API 定義(OpenAPI)で数えると、405 を応答として定義している操作は全1,209操作のうち3つしかなく、そのうち実務で当たるのは事実上1つ、プルリクエストのマージ(PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge)です。この 405 に付けられた定義文は「マージを実行できない場合」であり、意味は「メソッドが違う」ではなく「今はマージできない」です。 応答本文には、422 のような errors 配列がありません。公式定義でも message と documentation_url の2つだけです。つまり調査は、message の文言を読むことに尽きます。実際に記録されている文言は5系統に整理できます。マージできる状態にない(Pull Request is not mergeable)、base ブランチが動いた(Base branch was modified. Review and try the merge again.)、必須ステータスチェックが未完了、必要なレビューが足りない、そのブランチへ push する権限がない、の5つです。 リトライしてよいかどうかも系統で分かれます。Base branch was modified だけが一時的な状態で、待って再試行するのが正しい対処です。残りは、状態を直さない限り何度送っても同じ結果になります。 境界を先に1つ引いておきます。マージ要求に sha を渡して head が一致しなかった場合は、405 ではなく 409(Head branch was modified. Review and try the merge again.)です。Base と Head の違いしかない文言で、ステータスコードも対処も異なります。 エラーの概要 公式 API 定義におけるマージ操作の 405 は、message と documentation_url を持つだけの単純なスキーマで、例として示されている値は Pull Request is not mergeable です。実際の応答は次の形になります(マージを自動化するボットが記録に残したもので、status はクライアント側が付けた項目です)。 ...

2026年7月26日 · ErrorLog