見出し画像

Claude Code のセキュリティ設定完全ガイド。.env と API キーを守るsettings.json の書き方

正直に書きます。

僕、Claude Code を導入した最初の1か月、CLAUDE.md の冒頭に「.env ファイルは絶対に読まないでください」って書いてました。書いてあれば守ってくれると思っていたんですよね。

ある日、デバッグの会話を遡って読んでいて、震えたんです。

会話ログのなかに、僕の Stripe のシークレットキーと、freee の API トークンと、本番データベースのパスワードが、テキストとして全部残っていた。Claude が .env を開いて中身を読み上げて、それが Anthropic のサーバーに送られた会話ログとして、僕のアカウントに紐づいて保存されていたわけです。

冷静に考えるとぞっとしました。Stripe のキーが第三者に渡れば、僕のアカウント経由で1日数百万円分の不正決済が走り得る。freee のトークンが漏れれば、AI 顧問先の全仕訳が外部から覗かれていた。本番 DB のパスワードはもう言うまでもないですよね。会話ログがそのまま流出していなかっただけで、構造的にはほぼ事故と同じ状態でした。

CLAUDE.md には、はっきり「読むな」と書いてあったのに。

この記事は、海外で171万view を超えていた darkzodchi(@zodchiii)さんのロングポストを参考に書いています。



そもそも .env と API キーって何?という人へ(30秒で前提だけ揃える)

ここまで読んで「.env って何の話?」「API キーって聞いたことはあるけど、自分が何を持ってるか分からない」と思った人のために、最低限の前提だけ先にまとめます。すでに分かってる人は次の章まで飛ばしてください。

API キーは「サービスごとのあなた専用パスワード」

ChatGPT に課金していれば OpenAI の「API キー」が発行できます。freee で会計を回していれば freee のキーが、Notion なら Notion のキーが、Slack ボットを使っていれば Slack のキーが発行できます。ほぼすべての業務 SaaS(インターネット経由で使うソフト)に、この「API キー」と呼ばれる長い文字列が用意されています。

これは「外部のプログラムから、そのサービスにアクセスするための、あなた専用のパスワード」です。普通のログイン画面を通さずにプログラムが直接サービスを叩けるので、便利な反面、第三者の手に渡った瞬間その人もあなたとして使えてしまいます。

具体例:

  • OpenAI のキーが漏れる → 知らない誰かが GPT を回し続け、月末に数十万円の請求があなたに届く

  • freee のキーが漏れる → 取引先・金額・利益が全部見られる。改ざんすら可能

  • Stripe のキーが漏れる → 不正な決済処理が走る

  • Slack のキーが漏れる → 社内チャットが丸ごと読まれる

「ID とパスワード」よりだいぶ重いものを扱っている、と思って構いません。

.env ファイルは「API キーをまとめておく秘密のメモ帳」

プログラムを書くとき、API キーをコードに直書きするのはご法度です。GitHub(コードの共有・公開サービス)にコードを上げた瞬間、世界中から見える状態になるからです。実例として、GitHub にうっかり Stripe キーを含めて公開した人が、数時間で十数万円の不正決済を食らった話はゴロゴロあります。

そこで使われるのが .env という名前のテキストファイルです。プロジェクトのフォルダにこっそり置いておいて、中身はこんな感じになります。

OPENAI_API_KEY=sk-proj-AbCd1234EfGh5678...
FREEE_ACCESS_TOKEN=freee_xxxxxxxxxxxxxxxx
SLACK_BOT_TOKEN=xoxb-1234-5678-...
DATABASE_URL=postgres://user:password@localhost:5432/mydb

1行に1個、「変数の名前 = 値」の形で API キーや本番データベースのパスワードを並べる。アプリやスクリプトは起動時にここから値を読み込んで動きます。

そして、必ず .gitignore(GitHub に上げないファイルのリスト)に .env を入れて、絶対にコミット(リポジトリへの記録)されないようにする。これがエンジニア界隈の暗黙の業界ルールです。

じゃあ「API キーの正解の扱い」はなに?

迷ったらこの4つを思い出してください。

  1. コードに直書きしない:必ず .env などの外部ファイルに分ける

  2. .gitignore に .env を入れる:GitHub には絶対に上げない

  3. 本番運用は専用ツールで管理:1Password、AWS Secrets Manager、HashiCorp Vault といった「シークレット管理ツール」(API キー専用の金庫アプリのようなもの)に保管する

  4. AI ツールに読ませない:Claude Code、Cursor、ChatGPT のファイル添付などに流れないように物理ブロックする

この記事は4番目の「Claude Code に読ませない」を、いちばん丁寧に解説したものです。1〜3 は既存の常識として広く知られていますが、4 だけは盲点になりやすく、ここを塞いでいない人がほとんどです。最後の砦として settings.json での物理ロックを入れていきます。

自分が持ってる API キーを把握する3分ワーク

「自分も API キー持ってたっけ?」となった人は、いまの自分の .env を一度確認してみてください。プロジェクトのルートフォルダで以下を試すだけです。

  • macOS / Linux:ターミナル(黒い画面のアプリ)を開いて cat .env

  • Windows:エクスプローラーで .env を右クリック → メモ帳で開く

  • VS Code / Cursor を使っている人:エディタで .env を開く

中身に並んでいる XXX_KEY XXX_TOKEN XXX_SECRET DATABASE_URL のようなものが全部「漏れたらヤバいやつ」です。種類と本数を把握したうえで、続きを読んでください。


まず先に、最終的にできあがる設定の全体像

ちまちま読むのが面倒な人のために、最初に完成形を見せます。~/.claude/settings.json(ユーザーのホーム配下に置くグローバル設定。~ は自分のホームディレクトリのことです)に、こんなブロックが入っている状態がゴールです。

ここから先は

11,827字
この記事のみ ¥ 2,980
Amazon Payで支払うと最大2%還元のチャンス! 9/30まで

AIとClaude Codeを使って、個人・スモールビジネスの発信と仕事を仕組み化する実践メンバーシ…

ベーシックプラン

¥1,980 / 月
あと89人募集中

ここでサポートしていただいたお金は、すべてコーヒーの研究費に使わせていただきます。新しい生豆を購入して焙煎や抽出の研究をしたり、新しいコーヒー器具を購入してレビューしたりします。あとたまに美味しいもの食べます。笑