Claude Code PRレビューステータスの見方(GitHub/GitLab)
フッターに出るPR/MRバッジの色分けと更新のきっかけ、GitHub(gh CLI)とGitLab(glab CLI、v2.1.234以降)それぞれの必要条件を扱います。
バッジが出ない原因の大半は、ghやglabの認証が見つかっていないことです。ただしGitHubとGitLabでは認証の見つけ方が違い、GitHubはトークンの環境変数でも動き、GitLabは環境変数を無視します。この記事は、バッジの色の意味を確認したうえで、出ないときの切り分けをプロバイダー別に並べます。
フッターのバッジが示すもの
オープンなプルリクエストのあるブランチで作業していると、Claude Codeはプロンプトフッターに「PR #446」のようなクリック可能なリンクを表示します。リンクの色付きの下線がレビューの状態を示します。GitLabのマージリクエストではMR !Nの形式で、同じフッターの位置に出ます。
下線の色の意味(フッター)
GitHub
緑は承認済み(approved)、黄はレビュー待ち(pending review)、赤は変更要求あり(changes requested)、グレーはdraftです。
GitLab
緑はGitLabがマージ可能(mergeable)と報告している状態、黄はそれ以外のオープンな状態、グレーはdraftです。赤はありません。
GitLabの緑は「承認された」ではなく「マージ可能と報告された」ことを指します。承認の有無とマージ可否は別の概念なので、色だけで承認済みと読まないよう注意が要ります。
プルリクエストやマージリクエストがマージまたはクローズされると、バッジは消えます。macOSではCmd+クリック、Windows/LinuxではCtrl+クリックでブラウザ上のページを開けます。
この機能はClaude Code v2.1.20で、フッターのPRレビュー状態表示として導入されました。Claudeが実装したプルリクエストを人間がレビューする流れで、ターミナルを離れずに状況を追えます。
GitHubでバッジが出ないとき
GitHubではghにログインしていなくても、トークンが見つかればバッジは出ます。トークンの探し方は、リモートのホストによって3通りに分かれます。
GitHubのホスト別: トークンの探し先
github.com
GH_TOKENかGITHUB_TOKEN、またはgh auth loginで保存されたトークンです。どれも無いと、フッターにinstall gh for PR status(ghが未インストール)かgh auth login for PR status(インストール済み)が出ます。GitHub Enterprise(GH_HOST)
GH_ENTERPRISE_TOKENかGITHUB_ENTERPRISE_TOKEN、またはgh auth login --hostname <host>のトークンです。見つからないときのヒントはgithub.comと同じです。その他のGitHubホスト
gh auth login --hostname <host>で保存したトークンだけが対象です。無いときはバッジもヒントも出ないため、原因に気づきにくい構成です。
ヒント文言が出ているなら原因は認証の欠落で確定します。何も出ないときは、疑う先が3つあります。対象ブランチにオープンなプルリクエストが無い。リモートがGitHub系のホストとして扱われていない。その他のGitHubホストでgh auth login --hostname <host>をしていない。設定と環境変数の経路は次の小見出しにあります。
設定と環境変数でバッジを止める経路
意図せずバッジが消えているケースもあります。経路は2つあります。
prStatusFooterEnabledをfalseにしている。/configでは「Show PR status footer」で、保存先は~/.claude.jsonです。settings.jsonに書いても無視されますCLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFICを設定している。PR・MRの状態確認も止まります。この変数は0やfalseを入れても無効化されたままで、解除するには変数そのものを外します
前者を切る設定の単体解説はprStatusFooterEnabledとcopyFullResponseの記事にあります。リンク先のURLをGitHub以外のコードレビュー基盤に向けたい場合は、prUrlTemplateを扱うPR URLテンプレートの記事を参照してください。
GitLabでバッジが出ないとき
GitLabのマージリクエスト対応はv2.1.234(2026年8月17日リリース)で加わりました。必要なものは次の3つで、満たす順序も大切です。
GitLabでMRバッジを出す順序
- 1
Claude Codeをv2.1.234以降にする
それより古いと、
MR !NのバッジもstatusLineのpr情報への反映も出ません。 - 2
glab CLIをインストールして認証する
glab auth loginで認証します。リモートはgitlab.comか自己ホスト(self-managed)のGitLabを指している必要があります。 - 3
Claude Codeを再起動する
glabの存在とログイン状態は、セッションごとに一度だけ確認されます。2の後に再起動しないと、認証済みでもバッジは出ません。
GitHubでGH_TOKENが通ることと対比すると、CIのようにトークンだけを渡す環境でGitLabのバッジが出ないのは仕様どおりの挙動です。なお公式には、GitLabでglabが見つからないときのヒント文言の記述がありません。install gh for PR statusに相当する表示があるかは確認できないため、ステップ2と3を順に確かめます。
更新はgit pushと、MRを変えるglab mrコマンドの成功をきっかけに即座に走ります。v2.1.259では、glab mrのcreate merge close reopen note updateが認識されます。折りたたまれたツール要約にもMR !Nと出るようになりました。
GitLab連携をCI/CDパイプライン側から使う@claudeメンション自動化については、Claude CodeをGitLab CI/CDに組み込むで扱っています。フッターバッジはローカルの対話セッション向けの機能で、CI/CD連携とは別の仕組みです。
バッジが更新されないとき
バッジの再取得は、2つの契機で働くと公式に書かれています。セッション内でgit pushが成功したときと、gh pr createやgh pr mergeのようにプルリクエストの状態を変えるgh prコマンドが成功したときです。
定期的な自動更新の間隔については、現行のドキュメントに秒数の記載がありません。変更履歴からわかるのは次の挙動です。
- v2.1.247: 最後の確認から1分未満なら、ターミナルのリフォーカス時の再確認を省く
- v2.1.248: プルリクエストに変化が無い間は、GitHubへの確認頻度を下げる。pushと
gh prコマンドでは即座に更新される - v2.1.251: Bedrock・Vertex・Foundryの利用時と、テレメトリがオフのときは、
gh pr viewではなくGitHub APIを直接呼ぶ。認証にはgh auth token・GH_TOKEN・GITHUB_TOKENを使う
更新の契機として公式に書かれているのは上の2つなので、ブラウザ側だけで状態が変わった場合の反映タイミングは書かれていません。
ハイパーリンクが働かないとき
SSH接続やtmux内など、ターミナルのハイパーリンク対応を自動検出できない環境でも、バッジは常にハイパーリンクとしてレンダリングされます。クリックしても反応しない、あるいは奇妙な文字列が見える場合は、環境変数FORCE_HYPERLINKを0に設定するとプレーンテキスト表示に切り替わります。
この変数は真偽値ではなく数値として解釈される点に注意が必要です。false・no・offを入れるとハイパーリンクが有効になり、無効にできるのは0だけです。環境変数の全体像はClaude Code環境変数リファレンスにまとめています。
claude agentsパネルは別の色分けを使う
複数セッションを一覧するclaude agentsパネル(agent view)にも、行の右端にプルリクエスト・マージリクエストへのリンクが出ます。書式はGitHubなら#1234、GitLabなら!1234です。ただし色の意味はフッターのバッジと異なります。
| 色 | agent viewでの意味 |
|---|---|
| 黄 | agent viewでの意味CIチェック待ちまたはレビュー待ち、あるいはチェック失敗 |
| 緑 | agent viewでの意味チェック通過かつレビューがブロックしていない |
| 紫 | agent viewでの意味マージ済み |
| グレー | agent viewでの意味draftまたはクローズ済み |
フッターが表すのはレビュー状態そのものです。agent viewのラベルは「このタスクは片付いたか」を判断するための色で、CIチェックの結果も加味されます。同じ緑でも指す中身が違うため、両方の画面を併用するときは意味を読み替えます。
1つのセッションが複数のプルリクエストにリンクしているときは、ラベルが3 PRsのような件数表示になり、色は最も対応が必要なものに合わせて決まります。agent view全体の設計や状態遷移の読み方は、Claude Codeのagent view — 複数セッションを束ねる常駐プロセス設計で扱っています。
セッションとプルリクエストの紐付き方
ラベルは、セッションがプルリクエストを開いた時点で付きます。既存のプルリクエストへ後から紐付くケースもあり、紐付け方はClaudeが実行したコマンドで変わります。
ghでプルリクエストの編集・コメント・クローズ・draft解除を行った場合は、そのコマンドの出力が名指ししたプルリクエストにリンクします。出力が対話端末にしか表示されないgh pr mergeは、出力から特定できず新しいリンクを作りませんgh pr checkoutでチェックアウトした場合やブランチにプッシュした場合は、gh pr viewでブランチを逆引きして、オープンなプルリクエストにリンクします- プッシュ時点でプルリクエストが無くても構いません。同じディレクトリで後続する
gitghglabcurlコマンドが最大5回実行されるたびに再検索が走ります。GitHub REST API経由で後から作られたプルリクエストも、見つかり次第リンクされます
agent viewのGitLab対応はフッターより先で、v2.1.233でラベルが!1234の書式になりました。それ以前は#1234と表示され、MRのURLを貼ってセッションを選ぶ操作も、最初のプロンプトにURLが含まれるときに限られていました。
自作のステータスラインからPRステータスを読む
statusLineスクリプトを自作している場合は、フッターと同じ情報をJSONフィールドとして受け取れます。prオブジェクトは、対象ブランチにオープンなプルリクエストまたはマージリクエストが見つかっている間だけ存在します。
| フィールド | 内容 |
|---|---|
pr.number / pr.url | 内容番号とURL。GitLabのリモートではマージリクエストの番号が入る(v2.1.234以降) |
pr.review_state | 内容approved / pending / changes_requested / draft。prがあっても単独で欠けることがある |
pr.kind | 内容GitLabのマージリクエストのときだけmr。GitHubでは存在しない(v2.1.234以降) |
GitLabのreview_stateはフッターの色と同じ規則で決まります。GitLabがマージ可能と報告していればapproved、それ以外のオープン状態はpending、draftはdraftです。changes_requestedが入ることはありません。したがってスクリプトでapprovedを「承認済み」と読むと、GitLabでは誤読になります。
jq -r 'if .pr then "\(.pr.kind // "pr"): #\(.pr.number) [\(.pr.review_state // "unknown")]" else empty end'pr.kindの有無で分岐すれば、GitHubとGitLabを同じスクリプトで扱えます。review_stateが欠ける場合に備えて、//演算子でフォールバック値を置いておきます。
バッジの機能が入ってきた順序
フッターのバッジは、GitHub専用の小さな表示から、複数のホストとビューにまたがる仕組みへ段階的に広がってきました。変更履歴から該当する項目だけを抜き出すと、次の順序になります。
PR/MRバッジの変更履歴
- v2.1.20フッターにPRレビュー状態を表示
GitHub専用のバッジとして始まりました。
- v2.1.119prUrlTemplate
バッジの飛び先を、github.com以外のコードレビューURLに変える設定が加わりました。
- v2.1.145更新の即時反映の修正
gh pr createなど状態を変えるコマンドの実行後に、バッジがすぐ更新されない不具合が直りました。同じ版で、statusLineのJSON入力にGitHubのリポジトリとPRの情報が入るようになり、後段のprフィールドの前提になっています。 - v2.1.217ハイパーリンクの強制出力
SSHやtmuxを含む環境で、バッジのリンク表示が常時有効になりました。
- v2.1.233 / v2.1.234GitLab対応
バッジがGitHub以外のホストにも広がった節目です。agent viewが先、フッターとstatusLineが一つ後の版でした。
まとめ
バッジが出ないときは、GitHubならトークン(環境変数でも可)、GitLabならglab auth loginと再起動の順に確かめます。