Procedure
1. リモートURLを確認する
git remote -v
出力例:
origin git@github.com:YOUR_USERNAME/YOUR_REPO.git (fetch)
origin git@github.com:YOUR_USERNAME/YOUR_REPO.git (push)
自分のアカウント名が含まれていることを確認。サードパーティのfork元URLになっていれば即修正:
git remote set-url origin git@github.com:YOUR_USERNAME/YOUR_REPO.git
2. ステージ済みファイルに秘密情報がないかスキャン
git diff --cached | grep -iE \
"(api_?key|secret|token|password|passwd|auth|credential|access_?key|private_?key)\s*[=:]\s*\S+"
何も出力されなければOK。ヒットしたら即 git reset HEAD <file> でアンステージし、.env 化してから .gitignore に追加。
3. コミット済み履歴を含むスキャン(念のため)
git log --oneline -10
git show HEAD | grep -iE "(api_?key|secret|token|password)\s*[=:]\s*\S+"
4. .env 系ファイルが追跡されていないか確認
git ls-files | grep -E "^\.env"
出力があればトラッキングから除外:
git rm --cached .env
echo ".env" >> .gitignore
git add .gitignore
5. 個人情報(PII)の簡易チェック
git diff --cached | grep -iE \
"(\b[0-9]{3}-[0-9]{4}-[0-9]{4}\b|@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})"
電話番号・メールアドレスパターンにヒットしたらコード内のハードコーディングを確認。
Pitfalls
- fork元リモートのままpush:テンプレートをforkしたまま
originを変えずにpushすると、サードパーティリポジトリに自分のコードが公開される。手順1を必ず行う。 .envファイルの誤コミット:create-next-appやviteはデフォルトで.env.localを.gitignoreに入れるが、自前設定のプロジェクトでは漏れる。手順4で確認。grepのパターンは完璧ではない:難読化・Base64化された秘密情報は検出できない。gitleaksやtruffleHogなどの専用ツールが使える環境ならそちらを優先。- force-pushで履歴書き換えても残る:一度でも公開リポジトリにpushしたシークレットはGitHub側にキャッシュされる可能性がある。露出したら即ローテーション。
Verification
# リモートが自分のリポジトリを指していること
git remote -v | grep "YOUR_USERNAME"
# シークレットスキャンで何もヒットしないこと
git diff --cached | grep -iE "(api_?key|secret|token|password)\s*[=:]\s*\S+" | wc -l
# → 0 であればOK
# .env系が追跡されていないこと
git ls-files | grep -E "^\.env" | wc -l
# → 0 であればOK