目次
Claude Codeから gh コマンドでIssueやPRを操作していると、自分が手動で行った操作と区別がつかなくなります。Bot用のGitHubアカウントを作って解決したので備忘録です。
解決方法の選択肢
AIエージェントの操作を区別する方法はいくつかあります。
| 方法 | 特徴 | 個人開発での使いやすさ |
|---|---|---|
| Bot用アカウント | 設定が簡単、操作が明確に区別される | 使いやすい |
| GitHub App | 権限を細かく制御できる、Organization向け | 設定が面倒 |
| コミットメッセージで区別 | アカウント不要、手軽 | 区別しにくい |
今回はBot用アカウント(Machine User)を採用しました。個人開発なら一番シンプルです。
Bot用アカウントの作成手順
GitHubアカウントを新規作成
まず、Bot専用のGitHubアカウントを作成します。
メールアドレスにはGmailのエイリアス機能が便利です。本来のアドレスの @ の前に +bot を付けるだけで、同じ受信トレイに届きます。
詳しくは以下の記事で解説しています。
ユーザー名は yourname-bot や yourname-agent など、分かりやすいものにします。
リポジトリにCollaboratorとして招待
メインアカウント(自分)でリポジトリにアクセスし、BotアカウントをCollaboratorとして招待します。
対象リポジトリ → Settings → Collaborators → Add people の順に進み、Botアカウントを招待します。権限はWriteで十分です。
Botアカウント側で招待メールを確認し、承認します。
Classic PATを発行
Botアカウントでログインした状態で、Personal Access Tokenを発行します。
右上のプロフィールアイコンから Settings を開きます。

左メニューの一番下にある Developer settings をクリックします。

Personal access tokens → Tokens (classic) を選択します。
「Generate new token」→「Generate new token (classic)」をクリックして、以下を設定します。
- Note: local-ai-agent など
- Expiration: 90日〜1年(期限切れに注意)
- Select scopes:
repoにチェック
「Generate token」をクリックすると、トークンが発行されます。ghp_ で始まるトークンが表示されるので、安全な場所にコピーしておきます。一度しか表示されません。
Fine-grained PATではなくClassic PATを使う理由
Fine-grained PATは権限を細かく制御できますが、コラボレーターとして招待されたリポジトリにはアクセスできない制限があります[1]。Botアカウントをコラボレーターとして招待しても、Fine-grained PATの「Repository access」設定で対象リポジトリを選択できません。
Classic PATは repo スコープがあれば、コラボレーターとして招待されたプライベートリポジトリにもアクセスできます。
Claude Codeでの設定
GH_TOKEN 環境変数を設定すると gh コマンドがBotアカウントとして認証されます[2]。ただし、Claude Codeが内部で gh コマンドを実行する際に環境変数が引き継がれないケースがあります。
確実に動作させるには、GH_CONFIG_DIR を使ってBot専用の設定ディレクトリを作成します。
Bot用の設定ディレクトリを作成
まず、Bot用の gh 設定ファイルを作成します。
mkdir -p ~/.config/gh-bot
github.com:
oauth_token: ghp_xxxxxxxxxxxx
user: your-bot-username
git_protocol: https
oauth_token には発行したClassic PATを、user にはBotアカウントのユーザー名を設定します。
プロジェクト設定ファイルを使う(おすすめ)
.claude/settings.local.json に GH_CONFIG_DIR を設定すると、そのプロジェクトでClaude Codeを起動するたびに自動でBot用設定が適用されます。
{
"env": {
"GH_CONFIG_DIR": "~/.config/gh-bot"
}
}
.claude/settings.local.json は自動で .gitignore に追加されるため、設定がリポジトリにコミットされる心配がありません。
全プロジェクトで同じBotアカウントを使いたい場合は、グローバル設定 ~/.claude/settings.json に追加します。
{
"env": {
"GH_CONFIG_DIR": "~/.config/gh-bot"
}
}
起動時に環境変数を渡す
設定ファイルを使わない場合は、起動時に環境変数を渡します。
GH_CONFIG_DIR=~/.config/gh-bot claude
エイリアスを作成しておくと便利です。
alias claude-bot='GH_CONFIG_DIR=~/.config/gh-bot claude'
これで claude-bot コマンドでBotアカウントとしてClaude Codeを起動できます。通常の claude と gh コマンドは自分のアカウントのままです。
認証状態の確認
Claude Code内で以下のコマンドを実行すると、どのアカウントで認証されているか確認できます。
gh auth status
留意点
GitHubの利用規約では、自動化やBot用途の「Machine User」アカウントは明示的に許可されています[3]。ただし、無料のMachine Userアカウントは1人につき1個までです。個人アカウントと合わせて、最大2アカウント(個人1つ + Machine User 1つ)を保有できます。
トークンには有効期限があるため、期限切れ前に再発行が必要です。GitHub Appを使えばトークンの自動更新ができますが、個人開発ではオーバーキルです。
コミットにはCo-authored-by署名を併用すると、さらに追跡しやすくなります。Claude Codeはデフォルトでこの署名を付けてくれます。
Co-authored-by: Claude <[email protected]>
Managing your personal access tokens - Feature gaps https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#fine-grained-personal-access-tokens ↩︎
gh CLI Environment Variables https://cli.github.com/manual/gh_help_environment ↩︎
GitHub Terms of Service - Machine Users https://docs.github.com/en/site-policy/github-terms/github-terms-of-service#3-account-requirements ↩︎
