Claude Media
Claude Code attributionでコミット署名とPR署名を変える

Claude Code attributionでコミット署名とPR署名を変える

settings.jsonのattributionでgitコミットとPRの署名を変える方法。コミット署名が消えない原因、includeCoAuthoredByとの優先関係、trailerがgitに読まれる条件を実測付きで扱います。

このTipsでできること

Claude Codeがgitコミットやプルリクエストに自動で付けるAI署名は、settings.jsonのattributionで変更できます。署名を消したい、文言を組織のルールに合わせたい、セッションURLだけ外したい。この3つが主な用途です。

Claude Codeのバージョンはclaude --versionで確認できます。設定の挙動はv2.1.285のドキュメントに、trailerの読まれ方は使い捨てgitリポジトリでの再現に基づきます。

attributionは3つの署名を別々に制御する

何も設定しなければ、コミットにはCo-Authored-Byのgit trailerが、PR本文には生成元を示す1行が付きます。クラウドやRemote Controlのセッションでは、コミットにClaude-Sessionのtrailerも加わります。

設定

attributionの3つのキー

  • commit

    コミットメッセージの署名です。既定はCo-Authored-By: <モデル名> <noreply@anthropic.com>。空文字列で非表示になります。

  • pr

    PR本文の署名です。既定は🤖 Generated with [Claude Code](https://claude.com/claude-code)の1行。空文字列で非表示になります。

  • sessionUrl

    クラウド / Remote Controlセッションのclaude.aiリンクです。既定はtrueで、falseにするとコミットのtrailerもPR本文のリンクも付きません。

3つは独立しています。コミット履歴には残しつつ、PR本文だけチームのテンプレートで統一するといった使い分けが、1つのオブジェクトで書けます。

コミット署名を消したいとき

.claude/settings.json(プロジェクト共有)か~/.claude/settings.json(自分専用)に書きます。

.claude/settings.json
{
  "attribution": {
    "commit": "",
    "pr": "",
    "sessionUrl": false
  }
}

commitとprを空文字列にしただけでは、クラウドセッションのリンクは残ります。3つ目のsessionUrlまで書いて、初めてすべての署名が消えます。

v2.1.281以降なら、もっと短く書けます。

v2.1.281以降
{
  "attribution": false
}

falseはすべての署名を隠す指定です。ただし古いバージョンはこの値を受け付けず、falseを書いたファイルごと読み飛ばします。複数人で共有するファイルには、上のオブジェクト形式を残すほうが安全です。

署名の文言を差し替えたいとき

組織のAI利用ポリシーで文言が決まっているなら、commitに文字列をそのまま書きます。改行は\nで入れます。

.claude/settings.json
{
  "attribution": {
    "commit": "Generated with AI\n\nCo-Authored-By: AI <ai@example.com>",
    "pr": ""
  }
}

既定のモデル名は3通りに変わる

既定のtrailerに入る名前は、コミットした時点のモデルです。サブエージェントがコミットしたときは、そのサブエージェントのモデル名になります。

モデルのバージョンを確認できない場合はClaudeだけが入ります。Claudeモデルと判別できない場合、たとえばANTHROPIC_BASE_URL経由のサードパーティモデルではClaude Codeと入ります。trailerの名前でモデルを集計しているなら、この3通りを想定しておく必要があります。

trailerとして読まれるのは最終段落だけ

commitに複数行を書くとき、gitがCo-Authored-Byをtrailerと認識するのは、メッセージ末尾の段落が空行で分かれ、しかもその段落がtrailer行だけでできているときです。本文の行と同じ段落に空行なしで置くと、最終段落でも認識されません。使い捨てリポジトリで、文言の位置を変えて確かめました。

# 1) 空行で分けた最終段落がtrailer行だけ
git commit --allow-empty -q \
  -m $'subj\n\nGenerated with AI\n\nCo-Authored-By: AI <ai@example.com>'
git log -1 --format='[%(trailers:key=Co-Authored-By,valueonly,separator=%x2C )]'
# → [AI <ai@example.com>]
 
# 2) 本文の行と同じ段落に空行なしで置く
git commit --allow-empty -q \
  -m $'subj\n\nGenerated with AI\nCo-Authored-By: AI <ai@example.com>'
git log -1 --format='[%(trailers:key=Co-Authored-By,valueonly,separator=%x2C )]'
# → []
 
# 3) Co-Authored-Byの後ろに別の段落が続く
git commit --allow-empty -q \
  -m $'subj\n\nCo-Authored-By: AI <ai@example.com>\n\nnote'
git log -1 --format='[%(trailers:key=Co-Authored-By,valueonly,separator=%x2C )]'
# → []

2つ目と3つ目は本文にCo-Authored-By行があるのに、gitからはtrailerが0件に見えます。git logやgit interpret-trailersでtrailerを集計している場合、この違いが集計結果に出ます。文言の末尾にnoteなどを足すときは、trailerの後ろに段落を続けないでください。

署名が消えない・変わらないとき

includeCoAuthoredByを書いたのに効かない

旧設定のincludeCoAuthoredByは、v2.0.62でattributionに置き換わりました。今も読まれますが、attribution.commitかattribution.prを設定した時点で無視されます。

くらべる

includeCoAuthoredBy: false の効き方

効く

attributionを書いていない

コミットのtrailerとPR本文の署名が、どちらも消えます。

効かない

commitかprを書いている

includeCoAuthoredByは無視されます。書かなかった側は既定の文言に戻ります。

両方をattributionに移し、旧キーは削除してください。

CLAUDE.mdに署名のルールを書いたとき

Claude Codeは、CLAUDE.mdやメモリーに書いた署名についての指示を、attributionのコミット・PR用の文言より優先するようClaudeに伝えます。ただし署名の文言をmanaged settingsで指定している場合は、その行が優先されます。

CLAUDE.mdに「コミットにCo-Authored-Byを付けない」と書けば、attributionを触らなくても署名が付かない場合があります。逆に、署名が出ない原因が設定ファイルに見当たらないときは、CLAUDE.mdやメモリーの中身も疑う価値があります。

設定ファイルが読み込まれていない

JSONの構文エラーや不正な値があると、ファイルごと、または不正な値だけが読み飛ばされます。対話セッションの開始時に、Settings Errorのダイアログが出ます。-pで実行したときはダイアログが出ないので、claude doctorで確認します。

コメントや末尾のカンマは構文エラーです。attributionを書いた直後に署名が変わらないなら、まずファイルの読み込みを疑います。

手順

署名が想定どおりにならないときの切り分け

  1. 1

    バージョンを確認する

    claude --versionを実行します。attribution: falseはv2.1.281、sessionUrlはv2.1.183が必要です。

  2. 2

    設定が読み込まれているか見る

    Claude Code内で/statusを開き、Setting sourcesの行を確認します。User settingsやProject local settingsなど、読み込まれたファイルが並びます。

  3. 3

    複数スコープの優先順位を確かめる

    同じキーは、managed settings、コマンドライン、ローカル、共有プロジェクト、ユーザーの順に優先されます。低いスコープから順にキーを外し、そのつどgit logでtrailerを見ると、どのファイルが効いているか分かります。

  4. 4

    CLAUDE.mdとメモリーを見る

    署名についての指示が書かれていないか確認します。

/statusが示すのは、読み込まれたファイルの一覧です。キーごとの出どころは表示しません。読み飛ばされた値の一覧はclaude doctorで出ます。

sessionUrlはローカルのターミナルでは付かない

Claude-SessionのtrailerとPR本文のリンクは、クラウドかRemote Controlのセッションでコミット・PRを作ったときに付きます。ローカルのターミナルで通常どおり使っている場合は付きません。PR本文には、セッションURLが単独の1行で入ります。コミットのtrailerは、次のように取り出せます。

git log -1 --format='%(trailers:key=Claude-Session,valueonly)'
# → https://claude.ai/code/session_...

社内リポジトリでセッションURLを外に出したくないときや、PR本文を短く保ちたいときは、sessionUrlだけをfalseにします。commitとprの署名は残ります。Remote Controlの導入でつまずいているなら、Remote Controlが使えない「requires the Anthropic API」の意味が参考になります。

名前が似た設定との違い

CLAUDE_CODE_ATTRIBUTION_HEADERという環境変数は、attribution設定とは無関係です。こちらはAPIリクエストのシステムプロンプト冒頭に付く、クライアントのバージョンとプロンプトのフィンガープリントを含むブロックを制御します。0で省略できます。

もう1つ、includeGitInstructionsというキーもあります。これは署名の文言ではなく、Claudeに渡す組み込みのコミット・PR手順とgitの状態のスナップショットを外す設定です。falseにしても、署名の有無はattributionの側で決まります。

どのスコープに書くか

attributionはどのスコープのsettings.jsonにも書けます。個人の好みなら~/.claude/settings.json、リポジトリの慣習なら.claude/settings.json、自分だけの一時的な上書きなら.claude/settings.local.jsonです。Claude Codeがこのファイルを作った場合はgit管理外になり、共有設定を汚さずに試せます。手で作ったときは.gitignoreに自分で追加してください。

組織全体で署名を統一するなら、managed settingsで配ると個々のメンバーは上書きできません。運用はClaude Code組織管理ガイド — managed settingsで統制するにまとめています。

場面別の設定例

判断の軸は、このコミット履歴を誰が読むかです。

場面commitprsessionUrl
OSSの公開リポジトリcommit既定のままpr既定のままsessionUrl既定のまま
納品物にAI利用の痕跡を残さない受託開発commit""pr""sessionUrlfalse
社内の個人開発でURLだけ外したいcommit既定のままpr既定のままsessionUrlfalse
AI利用の明記が組織ポリシーで義務commit指定の文言pr必要に応じてsessionUrl必要に応じて

署名を消す理由が無ければ、既定のままで問題ありません。契約やポリシーで表記が決まっているなら、その文言をattributionに書けば、コミット後の手直しが要りません。

よくある質問

attributionを設定しても既存のコミットは変わりますか

変わりません。attributionが効くのは、これから作るコミットとPRだけです。過去のコミットを書き換えるには、git rebaseなどClaude Codeとは別のgit操作が必要です。

まとめ

署名を消すならsessionUrlまで書き、旧キーのincludeCoAuthoredByは残さない構成にすると食い違いが起きません。文言を差し替えたら、一度コミットしてtrailerとして読まれているかをgit logで見ておくと、集計の抜けを防げます。

設定全体の構成はClaude Code settings.json完全ガイド、権限やhooksまで含めた例はClaude Code設定ガイドにあります。

この記事を共有:XはてブLinkedIn