Claude Code を使っていて .env に API キーを書いていませんか?
本記事では Claude Code 環境で平文認証情報を持つリスクと、summon + gopass による解決策を紹介します。
Claude Code と .env の問題
Claude Code はプロジェクト内の .env ファイルを自動的に読み込みます。 .gitignore に含まれていても関係ありません。
settings.json による対策
Claude Code では settings.json で .env の読み取りを禁止できます。
{
"permissions": {
"deny": [
"Read(./.env)",
"Read(./.env.*)"
]
}
}
settings.json の限界
しかし、平文ファイルがディスク上に存在する限り以下のリスクは残ります。
| リスク | settings.json で防げる? |
|---|---|
| Claude Code が読む | Yes |
| MCP サーバーが読む | No |
| バックアップに含まれる | No |
| Git に誤コミット | No |
根本的な解決策は「平文ファイルを存在させないこと」です。
summon + gopass という解決策
summon は暗号化されたストアから値を取得し、環境変数としてプロセスに渡すツールです。
gopass (暗号化ストア)
↓
summon (シークレット取得)
↓
環境変数として注入
↓
Claude Code 起動
gopass はクロスプラットフォームで動作する暗号化パスワードストアです。summon は他にも AWS Secrets Manager などに対応していますが、個人利用には gopass がもっとも手軽です。
セットアップ
summon と summon-gopass のインストール
# Homebrew
brew install summon
# または eget
eget cyberark/summon
eget gopasspw/summon-gopass
eget は GitHub Release からバイナリを取得する軽量ツールです。詳しくは拙著で紹介しています。
gopass 自体のセットアップは本記事のスコープ外です。公式ドキュメントを参照してください。
Claude Code を summon 経由で起動する
secrets.yml の作成
# ~/.config/summon/claude.yml
ANTHROPIC_API_KEY: !var secrets/anthropic-api-key
!var の後ろは gopass のパスです。事前に gopass insert secrets/anthropic-api-key で API キーを登録しておきます。
起動コマンド
summon -p gopass -f ~/.config/summon/claude.yml -- claude
これで .env なしに Claude Code を起動できます。エイリアスを設定しておくと便利です。
alias claude='summon -p gopass -f ~/.config/summon/claude.yml -- claude'
注意点
summon は環境変数にシークレットを注入します。Claude Code が環境変数を読み取ると値が漏洩するリスクがあり、これは .env と同様の問題です。
summon の利点は「平文ファイルがディスク上に存在しない」ことにあります。ファイルベースの漏洩(MCP、バックアップ、Git事故)を防ぐのが目的です。
まとめ
- settings.json - Claude Code からの読み取りを防げるが、平文ファイルは残る
- summon + gopass - 平文ファイルが存在しないため漏洩対象がない
- 環境変数経由の漏洩リスク - .env と同様に残る
Claude Code ユーザーこそ、 .env 卒業を検討してみてください。