はじめに
GitHub CLI(gh)を使おうと思い、ログインを試したところ、認証は成功したはずなのにログイン状態にならず困ったので、原因と解決方法を記録しておきます。
同じような状況で困っている方の参考になれば幸いです。
環境
- MacBook Air
- macOS
- Homebrew
- GitHub CLI(gh)
やりたかったこと
GitHub CLIでログインし、コミットする
gh auth login
発生した問題
ログイン操作を行い、ブラウザで認証も完了しました。
途中でTouch ID(パスキー認証)も行い、
Authentication complete.
と表示されたため、正常にログインできたと思っていました。
しかし、その後確認すると
gh auth status
で次のようなメッセージが表示されました。
You are not logged into any GitHub hosts.
To log in, run: gh auth login
なんと、認証したはずなのに、ログイン状態になっていませんでした。
調査
認証時のメッセージをよく確認すると、次のエラーが表示されていました。
mkdir /Users/xxxxx/.config/gh: permission denied
GitHub CLIは認証情報を保存するために
~/.config/gh
というディレクトリを使用します。
どうやらこのディレクトリの作成または書き込みに失敗していたようです。
ディレクトリの権限確認
以下のコマンドで確認しました。
ls -ld ~/.config
原因
GitHub CLIは認証自体は成功していましたが、
~/.config/gh
に認証情報を保存できなかったため、ログイン状態が保持されていませんでした。
その結果、
Authentication complete.
と表示されても、
gh auth status
では未ログイン扱いになっていました。
解決方法
設定ディレクトリの権限を確認し、GitHub CLIが認証情報を保存できる状態にしました。
その後、再度
gh auth login
を実行しました。
ログイン後に
gh auth status
を実行すると、正常にログイン状態が確認できました。
学んだこと
今回の件で、
「認証が成功した」と「認証情報が保存できた」は別である
ことを学びました。
CLIツールでログインできない場合は、
- エラーメッセージを最後まで確認する
- 設定ディレクトリの権限を確認する
- 認証後に
gh auth statusで状態を確認する
ことが重要だと感じました。
おわりに
GitHub CLIの認証エラーというよりは、設定ディレクトリへの書き込み権限が原因でした。
今後同じような問題に遭遇した際は、
gh auth status
と
ls -ld ~/.config
を最初に確認しようと思います。