Claude CodeのprUrlTemplate設定でPRリンク先を変える
settings.jsonのprUrlTemplateで、フッターバッジとツール結果に出るPRリンクの飛び先をgithub.com以外へ差し替えられます。5つのプレースホルダーと適用条件、効かないケースをまとめました。
このTipsでできること
prUrlTemplateは、Claude Codeがフッターバッジやツール実行結果の要約に表示するPRリンクの飛び先を書き換える設定です。github.com以外のコードレビューツールを使うセルフホストGit環境で、リンクの行き先を実際に使っているツールへ差し替えられます。この記事では使える5つのプレースホルダー、置き換えが効く条件、そして効かないケースをまとめます。
GitHub Enterpriseの手前に社内の承認フローや監査ログを挟むレビューダッシュボードを立てているチームには、開発者がクリックするリンクを常にそのダッシュボード経由にしたいという要望が出やすくなります。git操作自体はGitHub互換のまま、Claude Codeが表示するリンクだけを差し替えたいときにprUrlTemplateが向きます。
PRリンクが表示される場面をおさらいする
Claude Codeは、オープンなプルリクエストのあるブランチで作業しているとき、フッターにPR #446のようなクリック可能なリンクを自動で表示します。このリンクはgit pushやgh pr系コマンドの成功のたびに更新され、PRがマージ・クローズされると消えます。gh pr createやgh pr viewのようにPRの情報を返すツールを実行したときは、その実行結果の要約にも同じPR URLが埋め込まれます。prUrlTemplateが書き換えるのは、この2箇所でClaude Codeが自分から表示するリンクです。
prUrlTemplateが書き換える2箇所
prUrlTemplateはsettings.jsonの文字列設定です。Claude Codeが自分でレンダリングするPRリンクの飛び先を、URLテンプレートで上書きします。書き換わるのは次の2箇所だけです。
- フッターに出る
PR #446のようなクリック可能なバッジ - ツール実行結果の要約に含まれるPRリンク
対象はあくまでClaude Codeが自分で描画するリンクです。Claudeがチャット本文に#123のように書いたPR参照は、この設定の影響を受けません。Claudeが書いた文字列はそのまま残ります。
使える5つのプレースホルダーと設定例
テンプレート文字列には5つのプレースホルダーを使えます。Claude Codeは元のPR URLからそれぞれの値を取り出し、テンプレートに埋め込みます。
| プレースホルダー | 中身 |
|---|---|
{host} | 中身Gitホストのドメイン |
{owner} | 中身リポジトリのオーナー(組織 / ユーザー) |
{repo} | 中身リポジトリ名 |
{number} | 中身PR番号 |
{url} | 中身元のPR URLそのもの |
内部のコードレビューツールへ向けるなら、.claude/settings.jsonに次のように書きます。
# .claude/settings.json に追記する内容
{
"prUrlTemplate": "https://reviews.example.com/{owner}/{repo}/pull/{number}"
}この例では、GitHub上のPR URLがそのままreviews.example.com上の同じowner・repo・番号のパスへ差し替わります。ホスト名だけを変えたい場合は、{host}を使わず固定文字列にしても構いません。5つのプレースホルダーを全部使う必要はなく、リポジトリを1つしか運用していないチームなら{number}だけを使った短いテンプレートでも成立します。
{
"prUrlTemplate": "https://reviews.example.com/review/{number}"
}スコープの表記は他の多くの設定キーと同じく「どのファイルにも書ける」(Any file)で、特定のスコープに書き込みを限定されることはありません。
適用条件 — GitHub形式のPR URLだけが対象
prUrlTemplateが効くのは、元のURLが/pull/<number>という形をしているときだけです。この形になっていないURLは書き換えられず、そのまま表示されます。
つまり、リポジトリのリモートがGitHub互換のPR URL形状を返すセルフホスト環境(GitHub Enterprise、あるいはGitHub互換のプロキシを挟んだ内部ツール)であれば、Claude Code自体はGitHubリポジトリとして扱いながら、実際に開くリンクだけを社内レビューツールへ差し替えられます。
一方、GitLabのマージリクエストは/pull/<number>とは異なる形のURLを持ち、フッターの同じ位置にMR !Nという別書式のバッジで表示されます。!NはGitLab独自のマージリクエスト番号の書き方です。GitLabのマージリクエストリンクは、フッターバッジとツール実行結果の要約のどちらでも元のGitLab URLのまま変わりません。gitlab.comだけでなく、セルフホスト(self-managed)のGitLabインスタンスでも同じです。
GitLabのマージリクエストバッジを表示するにはClaude Code v2.1.234以降・GitLabを指すリモート・認証済みのglab CLIという3条件が必要ですが、これらを満たしてもリンク先のテンプレート差し替えはできません。GitLab環境で表示や紐付けを調整したい場合は、prUrlTemplateではなくglab CLIの設定やCI/CD側の@claudeメンション連携を見直す方向になります。GitLabのマージリクエストとの紐付け方はClaude Code GitLab連携ガイドにまとめています。
レビュー状態の取得方法は変わらない
フッターのPRバッジには、承認済み(緑)・レビュー待ち(黄)・変更要求あり(赤)・draft(グレー)を示す色付きの下線が付きます。prUrlTemplateが書き換えるのはクリックしたときの飛び先だけで、この色分けの元になるレビュー状態の取得方法は変わりません。GitHubリポジトリなら引き続きgh CLIの認証情報が必要で、内部ツールへリンクを差し替えても、状態そのものはghが確認しているGitHub側から取得されます。バッジの色分けや更新頻度の詳細はClaude Code PRレビューステータスの見方(GitHub/GitLab)にまとめています。
落とし穴 — 効かないケースを先に知る
- チャット本文のPR番号は対象外:
#123のようにClaudeが会話中に書いたPR参照はテンプレートの対象になりません - 設定ファイルの構文ミスは起動時のダイアログで気づける:
prUrlTemplateを追記した直後にJSON構文エラーのダイアログが出た場合は、カンマや引用符の書き忘れを疑います - PR/MRステータスの取得自体は別設定:
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFICを設定すると、PR・MRステータスのチェック自体が止まりバッジが出なくなります。これはprUrlTemplateとは無関係な設定で、両方を混同すると「テンプレートを消したらバッジも消えた」という誤診断につながります - ハイパーリンクが効かない環境は別問題: SSH越しやtmux内でリンクがクリックできない場合は、
prUrlTemplateではなくFORCE_HYPERLINK環境変数の対象です。0に設定するとバッジがプレーンテキスト表示に切り替わります
どのスコープに書くか
| スコープ | ファイル | 向いているケース |
|---|---|---|
| User scope | ファイル~/.claude/settings.json | 向いているケース個人的に社内のミラーツール経由でPRを開きたい |
| Project scope | ファイル.claude/settings.json(git管理) | 向いているケースリポジトリ全体で内部レビューツールへの統一を徹底したい |
| Local scope | ファイル.claude/settings.local.json(git管理外) | 向いているケースチームの既定はgithub.comのまま、自分だけ検証用の内部URLを試したい |
他の設定と同じく、複数スコープに書かれていればLocalがProjectより、ProjectがUserより優先されます。settings.jsonの構成全体を見直す場合はClaude Code settings.json完全ガイドを、Claudeが作るコミットやPR本文の署名文言を変えたい場合はClaude Code attributionでコミット署名とPR署名を変えるを参照してください。prUrlTemplateはリンクの飛び先だけを変える設定で、署名文言を扱うattributionとは別のキーなので、両方を組み合わせて使えます。
Issue参照リンクは別の仕組みで動く
Claudeがチャットでowner/repo#123という形式のIssue参照を書くと、ターミナルがハイパーリンクに対応していればクリックできるリンクになります。これはprUrlTemplateとは別の、ホスト名だけで飛び先を決める仕組みです。リンク先を決めるホストは、owner/repoという参照文字列が指すリポジトリではなく、Claude Codeが今動いているリポジトリのgitリモートが指すホストです。
| gitリモートのホスト | owner/repo#123のリンク先 |
|---|---|
| github.com・GitHub Enterprise・下の行に挙げていないホスト | owner/repo#123のリンク先https://<host>/owner/repo/issues/123 |
| gitlab.com | owner/repo#123のリンク先https://gitlab.com/owner/repo/-/issues/123 |
| bitbucket.org・codeberg.org・gitea.com | owner/repo#123のリンク先リンク化されずプレーンテキストのまま |
Issueへのリンクはリポジトリのホストごとに固定のパスへ組み立てられ、prUrlTemplateのようなテンプレート差し替えの対象にはなりません。owner/repo#123のようなIssue参照だけがリンクになり、#123という省略形やコードスパン内の参照はリンク化されない点もPRリンクとは扱いが異なります。社内ツールへ導線をまとめたい場合、PRリンクはprUrlTemplateで差し替えられても、Issue参照リンクは差し替えられないという非対称を覚えておくと、想定外の挙動に戸惑いません。Issue参照リンク専用のテンプレート設定は今のところ用意されていません。
よくある質問
テンプレートを設定すると、ghやglabの認証判定も変わりますか
変わりません。prUrlTemplateは表示するリンクの文字列を書き換えるだけで、PR・MRステータスを取得するためのgh・glabの認証状態の判定ロジックには影響しません。認証が済んでいなければ、リンク先を差し替えていてもバッジ自体は従来どおり出ません。
設定を追加した時点で開いているPRにも反映されますか
反映されます。prUrlTemplateはフッターやツール結果を描画するたびに適用される設定なので、既に開いているPRであっても、設定を追加した後に次のリンクが描画されるタイミングから新しいテンプレートが使われます。PRごとに個別の設定を保持する仕組みではありません。
差し替え先のURLも/pull/番号という形にする必要がありますか
必要ありません。/pull/<number>という形が求められるのは、書き換え対象を判定するための元のPR URLだけです。テンプレート側のprUrlTemplateに設定するパス構造は自由で、社内ツールのURLがどんな階層になっていても、{owner} {repo} {number}を好きな位置に埋め込めます。
まとめ
prUrlTemplateは、Claude Codeがフッターバッジとツール実行結果の要約に表示するPRリンクの飛び先を、{host} {owner} {repo} {number} {url}の5つのプレースホルダーで書き換える設定です。適用されるのは元のURLが/pull/<number>形状のときだけで、GitLabのマージリクエストリンクには影響しません。レビュー状態の色分けやステータス取得の仕組み自体は変わらないため、セルフホストGit環境で内部レビューツールへ導線をまとめたい場面で使う設定です。