はじめに
この前、AIエージェントが使うgitコマンドをGitHubの特定リポジトリだけに制限する記事を書いた。
個人的に思っているのだが、AIエージェントはGitHub Actionsのworkflowの記述を結構間違える。
これはgitコマンドだけだと、Actionsの結果が見られないので、修正が難しいからだろう。
GitHub CLIを使えば、Actionsの結果をCLIから見ることができる。
普段使いのSSH鍵やgh CLIの認証情報を使わせると、自分が操作できるリポジトリに対して、AIエージェントも操作できてしまう可能性がある。
作業ディレクトリを間違えたり、想定外のコマンドを実行したりしたときに、関係ないリポジトリへpushしたり、IssueやPull Requestを作ったりするかもしれない。
なので、今回はGitHub CLIの権限を特定リポジトリだけにする手順を備忘録として残す。
元々、GitHub CLIをインストールしていなかったので、インストールと初期設定の手順も残しておく。
GitHub CLIのインストール
Windowsの場合、以下コマンドをPowerShellから実行すれば、インストールできる。公式はここ。
winget install --id GitHub.cli
GitHub CLIの初期設定
まず、普段使いの設定を行う。以下コマンドで、GitHubアカウントを認証して、gh cliを使えるようになる。
gh auth login
実行すると、以下質問が来るので、答えていく。
# 「GitHub.com」を選択
? Where do you use GitHub? [Use arrows to move, type to filter]
> GitHub.com
Other
# 「SSH」を選択
? What is your preferred protocol for Git operations on this host? [Use arrows to move, type to filter]
HTTPS
> SSH
# 普段からGitHubを使っていて、公開鍵をもう登録してあるなら、「Skip」を選択
? Upload your SSH public key to your GitHub account? [Use arrows to move, type to filter]
C:\Users\hogehoge\.ssh\id_ed25519.pub
> Skip
# 「Login with a web browser」を選択し、ブラウザからGitHubにワンタイムコードを入力する
? How would you like to authenticate GitHub CLI? [Use arrows to move, type to filter]
> Login with a web browser
Paste an authentication token
これで、ghコマンドが使えるようになる。ただ、この状態だと、自分のアカウントが権限を持つリポジトリに対して、好き勝手ができる状態になる。
gh auth statusコマンドを打てば、ログイン状態を確認できる。
gh auth status
github.com
✓ Logged in to github.com account <ユーザ名> (keyring)
- Active account: true
- Git operations protocol: ssh
- Token: gho_************************************
- Token scopes: 'gist', 'read:org', 'repo'
AIエージェント用の設定
AIエージェント操作用に「fine-grained personal access token」を使う。
fine-grained personal access token
アカウントから、以下の順に進む。
Settings
→ Developer settings
→ Personal access tokens
→ Fine-grained tokens
→ Generate new token
好きな「Token name」にした後、「Repository access」で「Only select repositories」にチェックした後、AIエージェントにタスクをしてほしいリポジトリだけを選択する。
「Permissions」で必要な権限を設定する。
今回は、「Actions」と「Contents」に「Read-only」を付けた。
これで、「Generate token」ボタンをクリックする。
その後、「access token」が表示されるので、コピペしてメモしておく。別の画面に行くと、もう表示されなくなるので、注意。
アクセストークンを使う
環境変数GH_TOKENにさっきメモしたトークンを入力する。
以下はPowerShellでの例。
$env:GH_TOKEN = "<アクセストークン>"
新しいトークンで認証されているか確認する。
gh auth status
github.com
✓ Logged in to github.com account <ユーザ名> (GH_TOKEN)
- Active account: true
- Git operations protocol: ssh
- Token: <アクセストークン>
✓ Logged in to github.com account <ユーザ名> (keyring)
- Active account: false
- Git operations protocol: ssh
- Token: gho_************************************
- Token scopes: 'gist', 'read:org', 'repo'
Active accountがtrueのアカウントが使われるので、環境変数GH_TOKENの設定をした方が使われていることが分かる。
例えば、GitHub Actionsの結果一覧は以下コマンドで確認できる。
cd <権限を与えたリポジトリ>
gh run list
AIエージェントに使わせる
正直、ベストプラクティスは分からないのだが、自分は環境変数GH_TOKENを設定した後に、AIエージェントを起動しなおすことで、権限を渡している。
以下手順で実際にAIエージェントからアクセストークンを使えるか試せる。
gh auth logoutでログアウトする。- AIエージェントに「
gh run listでActionsの結果みることできる?」と聞いて、結果を見られないことを確認。 - 環境変数
GH_TOKENにアクセストークンを設定する。 - AIエージェントを再起動して、環境変数を渡すようにする。
- AIエージェントに「
gh run listでActionsの結果みることできる?」と聞いて、結果を見られることを確認する。
GH_TOKENが優先されるので、普段はgh auth logoutでログアウトしなくていい。
トークンを使い終わったら、環境変数GH_TOKENを削除する。GitHub上でもトークンを消しといた方がいいかもしれない。

