1. 背景と仕組み
なぜ認証情報の管理が必要か
GitでHTTPS経由のリモートリポジトリ(GitLab等)にアクセスする際、毎回ユーザー名とパスワード(またはアクセストークン)の入力が求められる。これを省略するため、認証情報を安全に保存・自動入力する仕組みが必要になる。
Git Credential Manager(GCM)とは
Gitには認証情報を管理するための「credential helper」という拡張機構がある。GCMはMicrosoftが開発したcredential helperの実装で、Git for Windowsに標準同梱されている。
GCMの役割は以下の通り。
- 初回認証時にユーザーから認証情報を取得
- Windows資格情報マネージャーに暗号化して保存
- 次回以降、Gitからの認証要求に対して保存済み情報を自動返却
Windows資格情報マネージャーとの関係
Windows資格情報マネージャーはOS標準の認証情報保管庫で、Webブラウザやアプリケーションの認証情報を暗号化して管理する。GCMはこの保管庫をバックエンドとして利用することで、平文ファイルへの保存を避け、セキュアな認証情報管理を実現している。
認証フローの全体像
1. git push/pull 実行
↓
2. Gitがcredential helperに認証情報を問い合わせ
↓
3. GCMがWindows資格情報マネージャーを検索
↓
4a. 保存済み → 認証情報を返却 → 認証成功
or
4b. 未保存 → ユーザーに入力要求 → 保存して認証
2. GCM固有のGit configオプション解説
GCMを使う上で理解すべき設定オプションは3つある。
credential.helper
どのcredential helperを使用するかを指定する。Windowsでの選択肢は以下の通り。
manager - GCMを使用。Windows資格情報マネージャーに暗号化保存される。Windows環境での推奨値。
store - ホームディレクトリの.git-credentialsファイルに平文保存。セキュリティ上非推奨。
cache - メモリ上に一時保存。タイムアウトで消失する。Linux向けの設計でWindowsでは非推奨。
wincred - GCM登場前の旧実装。現在はmanagerに置き換えられており非推奨。
credential.credentialStore
GCMが認証情報を保存する場所を指定する。credential.helperがmanagerの場合に有効。
wincredman - Windows資格情報マネージャー。Windows環境での推奨値。
dpapi - DPAPIで暗号化したファイル。資格情報マネージャーが使えない環境向け。
plaintext - 平文ファイル。セキュリティ上非推奨。
gpg - GPGで暗号化したファイル。Linux/macOS向け。
credential..provider
特定URLに対して、どの認証プロバイダー(OAuth等の認証方式)を使うかを指定する。GitHubやAzure DevOpsはGCMが自動認識するが、GitLabのセルフホスト版は認識されないため明示的にgenericを指定する必要がある。
genericを指定すると、GCMは単純なユーザー名・パスワード認証として処理する。
3. インストールと設定手順
前提環境
- OS: Windows 10/11
- 開発環境: WSL2 + Windows併用
- 対象リポジトリ: GitLab(HTTPSアクセス)
Git for Windowsのインストール
公式サイトからインストーラーをダウンロードし、デフォルト設定で実行する。GCMは自動的に含まれる。
インストール確認はPowerShellまたはコマンドプロンプトで行う。
git --version
git credential-manager --version
推奨設定の適用
以下の設定を順に実行する。各設定の意味は第2章を参照。
git config --global credential.helper manager
git config --global credential.credentialStore wincredman
git config --global credential.https://github.com/(通信先).provider generic
git config --global credential.username nishijima.yasutaka(Your Name)
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
設定確認
全設定を表示する場合。
git config --global --list
認証関連のみ抽出する場合(PowerShell専用)。
git config --global --list | Select-String credential
コマンドプロンプトの場合はfindstrを使用する。
git config --global --list | findstr credential
4. 運用と管理
Windows資格情報マネージャーでの確認
Windowsスタートメニューから「資格情報マネージャー」を検索し、「Windows資格情報」→「汎用資格情報」を開く。git:https://github.com形式の項目が保存された認証情報。
認証情報の削除
GCMコマンドで削除する場合。
git credential-manager erase
実行後、以下を入力してEnterを2回押す。
protocol=https
host=https://github.com
GUIから削除する場合は、資格情報マネージャーで該当項目を選択し「削除」をクリック。
トラブルシューティング
Failed to write item to store. [0x8]エラー
Windows資格情報マネージャーへの書き込み失敗。資格情報マネージャーに保存されている項目が多すぎる場合に発生することがある。不要な項目をGUIから削除するか、以下のコマンドで一括削除する(PowerShell専用)。
cmdkey /list | Select-String "vscode" | ForEach-Object {
$target = ($_ -split " ")[-1]
cmdkey /delete:$target
}
認証が通らない場合
確認すべき項目は以下の通り。
-
git config --global --listで設定内容を確認 - GitLabアクセストークンの有効期限とスコープ(api, read_repository等)
- 認証情報を削除して再入力(
git credential-manager erase実行後、次回git操作で再認証)
作成日: 2024年11月
対象バージョン: Git 2.43.0, Git Credential Manager 2.6.1