Claude Code attributionでコミット署名とPR署名を変える
settings.jsonのattributionでgitコミットとPRの署名表記をカスタマイズできます。既定値・commitとprの違い・非推奨のincludeCoAuthoredByとの関係をまとめました。
このTipsでできること
Claude Codeがgitコミットやプルリクエストに自動で付けるAI署名は、settings.jsonのattributionで変更できます。この記事では、commit・pr・sessionUrlという3つのキーが何を表示するか、既定値と空文字列にしたときの挙動、そして旧設定includeCoAuthoredByとの優先関係をまとめます。
attributionが変えるもの — commit / pr / sessionUrl
Claude Codeは何も設定しなければ、作成したコミットにCo-Authored-Byのgit trailerを、PRの本文に生成元を示す1文を自動で加えます。attributionはこの2箇所を個別に制御するオブジェクト設定です。
| キー | 対象 | 空文字列にすると |
|---|---|---|
commit | 対象git trailerを含むコミットメッセージへの署名 | 空文字列にするとコミット側の署名を非表示 |
pr | 対象PR本文への署名 | 空文字列にするとPR側の署名を非表示 |
sessionUrl | 対象クラウド / Remote Controlセッションのリンク | 空文字列にするとセッションURLの付与を省略(falseで無効化) |
commitとprは別々に制御できる点が重要です。「コミット履歴には残したいが、PR本文はチームのテンプレートで統一したい」といった使い分けが1つの設定オブジェクトで完結します。
デフォルトの署名とカスタマイズ方法
attributionを何も設定していない状態の既定値は次の内容です。
# 既定のコミット署名(git trailer)
git log -1 --format=%B
# → 末尾に以下が付く
# Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>trailerに書かれるモデル名は、そのセッションで実際に稼働していたモデルを反映します。PR本文側の既定は🤖 Generated with [Claude Code](https://claude.com/claude-code)という1行です。
署名を変更・非表示にするには、.claude/settings.json(プロジェクト共有)や~/.claude/settings.json(自分専用)にattributionオブジェクトを書きます。
{
"attribution": {
"commit": "",
"pr": ""
}
}commitとprの両方を空文字列にすると、コミット・PRのどちらからもClaude Codeの署名が消えます。逆に、組織のAI利用ポリシーで「AI支援を明記する」ことが求められている場合は、既定文言をそのまま使わずに独自の文言へ差し替える使い方もできます。
{
"attribution": {
"commit": "Generated with AI\n\nCo-Authored-By: AI <ai@example.com>",
"pr": ""
}
}commitには改行を含む複数行のテキストを渡せるため、trailer部分だけを独自の名前・メールアドレスに差し替えるといった細かな調整も1つの文字列内で完結します。
変更前後でコミットメッセージはどう変わるか
attribution.commitを空文字列にした場合と、独自文言に差し替えた場合で、実際のコミットメッセージ末尾がどう変わるかをまとめると次のとおりです。
| 設定 | コミットメッセージ末尾 |
|---|---|
| 未設定(既定) | コミットメッセージ末尾Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> |
commit: "" | コミットメッセージ末尾trailerなし(本文だけ) |
commit: "Co-Authored-By: AI <ai@example.com>" | コミットメッセージ末尾指定した文字列がそのままtrailerとして入る |
trailerを完全に消すか、名前だけ差し替えるかは、リポジトリのgit logをそのままGitHubの貢献グラフやCODEOWNERSのメール一致に使っているかどうかで判断が変わります。メールアドレスをチームの実在するドメインに寄せて集計に混ぜたくない場合は、noreplyのような明らかな非実在ドメインを保っておくのが無難です。
attributionはどのスコープに書くべきか
attributionはどのスコープのsettings.jsonにも書けますが、影響範囲が変わります。
| スコープ | ファイル | 向いているケース |
|---|---|---|
| User scope | ファイル~/.claude/settings.json | 向いているケース個人の好みとして署名を消したい。自分が触る全プロジェクトに適用される |
| Project scope | ファイル.claude/settings.json(git管理) | 向いているケースリポジトリの慣習として揃えたい。コミットする全員に同じルールが適用される |
| Local scope | ファイル.claude/settings.local.json(git管理外) | 向いているケース自分だけ一時的に文言を変えたい |
同じキーが複数スコープにあるときはLocalがProjectより、ProjectがUserより優先されるため、個人の一時的な上書きはLocalに書くのが安全です。チームの取り決めを.claude/settings.json(Project scope)で固定していても、自分だけ一時的に別の文言を試したい場合はLocal scopeに書けば、コミット対象のProject scopeを汚さずに検証できます。
CLAUDE_CODE_ATTRIBUTION_HEADERとは別物
似た名前の環境変数CLAUDE_CODE_ATTRIBUTION_HEADERがありますが、これはattribution設定とは無関係です。こちらはAPIリクエストのシステムプロンプト冒頭に付く、クライアントのバージョンやプロンプトのフィンガープリントを含む別種のヘッダーブロックを指し、LLMゲートウェイでのキャッシュ挙動に関わる設定です。
attribution(git commit / PRの署名)とCLAUDE_CODE_ATTRIBUTION_HEADER(APIリクエストのヘッダー)は「attribution」という語が共通しているだけの別機能です。検索で見つけた設定がどちらを指しているかは、名前だけで判断せず確認する必要があります。
includeCoAuthoredByとの関係(非推奨化)
attributionより前はincludeCoAuthoredByという真偽値の設定でCo-Authored-By trailerの有無だけを切り替えていました。現在この設定は非推奨で、attributionが優先されます。両方が設定ファイルに残っている場合、attributionの値が使われるため、includeCoAuthoredByだけをfalseにしても効かないケースがあります。既存の設定ファイルにincludeCoAuthoredByが残っている場合は、attributionへ書き換えるのが安全です。
Remote Control・クラウドセッションでのsessionUrl
スマホやブラウザから操作するRemote Controlセッション、あるいはクラウド実行のセッションでClaude Codeがコミットを作ると、通常の署名に加えてClaude-Sessionというgit trailerと、PR本文にセッションURLへのリンクが付きます。これはセッションの実行経緯を後から辿れるようにするための挙動です。
このsessionUrlキーはClaude Code v2.1.182以降でのみ有効です。それより古いバージョンではattribution.sessionUrlを設定ファイルに書いても反映されず、セッションURLが引き続き付与され続けます。意図どおりに動かない場合は、設定の記述ミスを疑う前に、まずclaude --versionで自分のバージョンを確認してください。
このリンク付与だけを個別に止めたい場合は、commitやprを空にせずsessionUrlをfalseにします。
{
"attribution": {
"sessionUrl": false
}
}commitやprの署名文言はそのまま残しつつ、セッションURLの記載だけを省く使い分けです。社内リポジトリでセッションURLを外部に見せたくない場合や、PR本文を短く保ちたい場合に向きます。Remote Controlの導入自体でつまずいている場合はRemote Controlが使えない「requires the Anthropic API」の意味も参考にしてください。
組織全体で統一する場合はmanaged settingsへ
個人やプロジェクト単位の署名カスタマイズではなく、組織のリポジトリ全体で署名表記を統一したい場合は、.claude/settings.jsonに書くのではなくmanaged settingsで配布する方法があります。managed settingsは他のスコープより優先度が高く、個々のメンバーが上書きできません。署名ポリシーを組織全体で固定する運用はClaude Code組織管理ガイド — managed settingsで統制するにまとめています。
設定が反映されているか確認する
attributionを書き換えたあと、実際にどのスコープの設定が読み込まれているか不安な場合は、Claude Code内で/statusを実行します。Setting sourcesの行に、User settings・Project settings・Local settingsのうちどれが読み込まれているかが一覧表示されます。
ただし/statusが示すのは「どのファイルが読み込まれたか」までで、attribution個別のキーがどのファイル由来かまでは表示されません。複数のスコープにattributionを書いていて値が想定と違う場合は、優先順位の低いスコープから順にコメントアウトしていき、そのつどgit logで実際のtrailerを確認するのが確実な切り分け方法です。
設定ファイルにJSONの構文エラーがある場合はセッション開始時にエラーダイアログが出るため、attributionを追加した直後にこのダイアログが出たら、まずカンマや引用符の書き忘れを疑います。
場面別にどう設定するか
どこまで署名を残すべきかは、リポジトリの性質によって最適解が変わります。迷ったときは「このコミット履歴を誰が読むか」を基準に選ぶと判断しやすくなります。
| 場面 | commit | pr | sessionUrl |
|---|---|---|---|
| OSSの公開リポジトリ | commit既定のまま | pr既定のまま | sessionUrl既定のまま(貢献者・メンテナーに透明性を保てる) |
| 顧客案件・受託開発(納品物にAI利用の痕跡を残せない) | commit"" | pr"" | sessionUrl— |
| 社内の個人開発(署名文言は気にしないがURLは社外に見せたくない) | commit既定のまま | pr既定のまま | sessionUrlfalse |
| AI利用の明記が組織ポリシーで義務付けられている | commit組織指定の文言に差し替え | pr必要に応じて | sessionUrl— |
あえて署名を消す理由が無いなら、既定値のままにしておくのが自然です。逆に、契約やポリシーで表記が決まっている場合は、その文言をattributionの値としてそのまま設定に落とし込めば、手作業での書き換えやコミット後の修正が不要になります。
よくある質問
attributionを設定しても既存のコミットは変わりますか
変わりません。attributionが効くのはこれから作成するコミット・PRだけです。過去のコミットメッセージを書き換えるにはgit commit --amendやgit rebaseなど、Claude Codeとは別のgit操作が必要です。
commitだけ空にしてprは既定のままにできますか
できます。commitとprは独立したキーなので、どちらか一方だけを空文字列にし、もう一方は既定値のまま残すという設定が可能です。
sessionUrlはRemote Control以外でも関係しますか
sessionUrlが付与されるのは、クラウド実行またはRemote Controlセッションでコミット・PRを作成した場合です。ローカルのターミナルで通常どおりセッションを実行している場合は、そもそもClaude-Session trailerは付きません。なおsessionUrlキー自体はv2.1.182以降のClaude Codeでしか機能しない点にも注意してください。
managed settingsでattributionを固定された場合、個人のsettings.jsonで上書きできますか
できません。managed settingsは他のどのスコープよりも優先度が高く、コマンドライン引数を含めて上書きできない仕組みです。組織のmanaged settingsでattributionが固定されている場合、個人の~/.claude/settings.jsonやプロジェクトの.claude/settings.jsonに書いた値は無視され、managedの値が適用されます。
まとめ
attributionはcommit・pr・sessionUrlの3キーで、Claude Codeが自動で付けるgit署名を個別に制御する設定です。両方を空文字列にすれば署名を完全に消せますし、文言だけを組織のポリシーに合わせて差し替えることもできます。非推奨のincludeCoAuthoredByが残っている場合はattributionが優先されるため、書き換えておくと意図の混乱を避けられます。settings.json全体の構成はClaude Code settings.json完全ガイド、権限やhooksを含めた実戦的な設定例はClaude Code設定ガイドを参照してください。