Error: Classic Personal Access Tokens (ghp_) are not supported by Copilot.
`ghp_` で始まる旧来のトークンは受け付けられない。値が正しくても、種類が理由で拒否される。
エラー文字列
Error: Classic Personal Access Tokens (ghp_) are not supported by Copilot.
⚠️ 標準エラーに出て、終了コードは 1 です。
Error: Classic Personal Access Tokens (ghp_) are not supported by Copilot.
The GITHUB_TOKEN environment variable contains a classic PAT.
Please use a Fine-Grained Personal Access Token or another authentication method.
To fix this, you can:
• Replace the token in GITHUB_TOKEN with a fine-grained PAT
• Unset GITHUB_TOKEN and run 'gh auth login' to authenticate
• Unset GITHUB_TOKEN and start 'copilot', then use the '/login' command
何が起きているか
トークンの値ではなく種類が理由で拒否されています。
GitHub の個人アクセストークンには2種類あります。Copilot CLI が受け付けるのは後者だけです。
| 種類 | 接頭辞 | Copilot CLI |
|---|---|---|
| クラシック | ghp_ |
🔴 受け付けない |
| ファイングレインド | github_pat_ |
⭐ 使える |
gh auth login の資格情報 |
gho_ / ghu_ |
⭐ 使える |
⚠️ そのトークンが有効かどうかは関係ありません。 権限を足しても、作り直しても、ghp_ である限り同じメッセージが出ます。
なぜ気づきにくいか
- 他のツールでは動く。
ghもgit pushも GitHub API もクラシックトークンを受け付けます。「このトークンで他は全部動いているのに」となりがちです - メッセージが出るまで、どの変数が読まれたか分からない。 上の例では
GITHUB_TOKENですが、実際に読まれた変数名がそのまま入ります - CI の共通設定に古い
ghp_が置きっぱなしのことがあります
⭐ どの変数が原因かは、メッセージが名指ししてくれます。 3つとも消す必要はありません。
直し方
1. どの変数に入っているか確認する
⚠️ 値そのものを画面に出さないこと。 接頭辞だけで種類は判別できます。
Windows(PowerShell)
foreach ($n in 'COPILOT_GITHUB_TOKEN','GH_TOKEN','GITHUB_TOKEN') {
$v = [Environment]::GetEnvironmentVariable($n)
if ($v) { "{0,-22} {1}..." -f $n, $v.Substring(0, [Math]::Min(4, $v.Length)) }
else { "{0,-22} なし" -f $n }
}
macOS / Linux
for n in COPILOT_GITHUB_TOKEN GH_TOKEN GITHUB_TOKEN; do
v=$(printenv "$n")
printf '%-22s %s\n' "$n" "${v:+${v:0:4}...}${v:-なし}"
done
ghp_ で始まっていたら、それが原因です。
2A. ファイングレインドのトークンに置き換える
GitHub の Settings → Developer settings → Personal access tokens → Fine-grained tokens で新しく作ります。
⚠️ クラシックの権限をそのまま移せません。 ファイングレインドはリポジトリと権限を個別に選ぶ方式です。対象リポジトリと、必要な権限を明示的に指定してください。
export GITHUB_TOKEN=github_pat_xxxxxxxx
$env:GITHUB_TOKEN = "github_pat_xxxxxxxx"
2B. トークンをやめて gh の認証を使う(手元の端末ならこちらが簡単)
環境変数を消してからログインします。
unset GITHUB_TOKEN
gh auth login
Remove-Item Env:GITHUB_TOKEN -ErrorAction SilentlyContinue
gh auth login
⚠️ 環境変数が残っていると gh でログインし直しても効きません。 環境変数のほうが優先されます。
2C. 対話セッションからログインする
unset GITHUB_TOKEN
copilot
起動したら次を打ちます。
/login
3. 恒久的に消す
シェルの設定ファイルやユーザー環境変数に書いてあると、新しい端末を開くたびに復活します。
[Environment]::SetEnvironmentVariable("GITHUB_TOKEN", $null, "User")
macOS / Linux — ~/.bashrc / ~/.zshrc / ~/.profile の該当行を消してください。
grep -n 'GITHUB_TOKEN\|GH_TOKEN\|COPILOT_GITHUB_TOKEN' ~/.bashrc ~/.zshrc ~/.profile 2>/dev/null
4. CI の場合
ワークフローに直接書かれているか、リポジトリまたは組織のシークレットに入っています。
⭐ GitHub Actions が自動で渡す GITHUB_TOKEN は ghp_ ではありません。 自動のものをそのまま使っているなら、このエラーは出ません。自分で上書きしている箇所を探してください。
似ているが別のエラー
| メッセージ | 違い |
|---|---|
Error: Authentication token found but could not be validated. |
種類は正しいが、値が無効(詳細) |
Error: No authentication information found. |
トークンも gh の資格情報もどこにも無い |
再発防止
- 🔴
ghp_は Copilot CLI では使えない。 権限を足しても直らない - トークンは環境変数と
ghの両方に散らばりやすい。片方に決める - CI では、自動で渡される
GITHUB_TOKENをわざわざ上書きしていないかを確認する