Claude CodeからのGitHub操作を区別するためにBot用アカウントを作る

公開日:
更新日:
目次

Claude Codeから gh コマンドでIssueやPRを操作していると、自分が手動で行った操作と区別がつかなくなります。Bot用のGitHubアカウントを作って解決したので備忘録です。

解決方法の選択肢

AIエージェントの操作を区別する方法はいくつかあります。

方法 特徴 個人開発での使いやすさ
Bot用アカウント 設定が簡単、操作が明確に区別される 使いやすい
GitHub App 権限を細かく制御できる、Organization向け 設定が面倒
コミットメッセージで区別 アカウント不要、手軽 区別しにくい

今回はBot用アカウント(Machine User)を採用しました。個人開発なら一番シンプルです。

Bot用アカウントの作成手順

GitHubアカウントを新規作成

まず、Bot専用のGitHubアカウントを作成します。

メールアドレスにはGmailのエイリアス機能が便利です。本来のアドレスの @ の前に +bot を付けるだけで、同じ受信トレイに届きます。

詳しくは以下の記事で解説しています。

ユーザー名は yourname-botyourname-agent など、分かりやすいものにします。

リポジトリにCollaboratorとして招待

メインアカウント(自分)でリポジトリにアクセスし、BotアカウントをCollaboratorとして招待します。

対象リポジトリ → Settings → Collaborators → Add people の順に進み、Botアカウントを招待します。権限はWriteで十分です。

Botアカウント側で招待メールを確認し、承認します。

Classic PATを発行

Botアカウントでログインした状態で、Personal Access Tokenを発行します。

右上のプロフィールアイコンから Settings を開きます。

Image from Gyazo

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

Image from Gyazo

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
~/.config/gh-bot/hosts.yml
github.com:
    oauth_token: ghp_xxxxxxxxxxxx
    user: your-bot-username
    git_protocol: https

oauth_token には発行したClassic PATを、user にはBotアカウントのユーザー名を設定します。

プロジェクト設定ファイルを使う(おすすめ)

.claude/settings.local.jsonGH_CONFIG_DIR を設定すると、そのプロジェクトでClaude Codeを起動するたびに自動でBot用設定が適用されます。

.claude/settings.local.json
{
  "env": {
    "GH_CONFIG_DIR": "~/.config/gh-bot"
  }
}

.claude/settings.local.json は自動で .gitignore に追加されるため、設定がリポジトリにコミットされる心配がありません。

全プロジェクトで同じBotアカウントを使いたい場合は、グローバル設定 ~/.claude/settings.json に追加します。

~/.claude/settings.json
{
  "env": {
    "GH_CONFIG_DIR": "~/.config/gh-bot"
  }
}

起動時に環境変数を渡す

設定ファイルを使わない場合は、起動時に環境変数を渡します。

GH_CONFIG_DIR=~/.config/gh-bot claude

エイリアスを作成しておくと便利です。

.zshrc
alias claude-bot='GH_CONFIG_DIR=~/.config/gh-bot claude'

これで claude-bot コマンドでBotアカウントとしてClaude Codeを起動できます。通常の claudegh コマンドは自分のアカウントのままです。

認証状態の確認

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はデフォルトでこの署名を付けてくれます。