「環境変数」「.env ファイル」「シークレット」「APIキーをコードに書くな」… 開発の話を覗くと、ちょこちょこ出てくる言葉。

APIキーの記事 で「鍵」の正体を見ました。今回はその鍵をどこに保管するか——環境変数 の話です。
環境変数ってなに?
ざっくり言うと、環境変数は アプリの「外側」に置いておく「設定情報」 です。

「環境」=アプリが動く場所(PC・サーバー)、「変数」=中身が変わる値。 名前のとおり、もともとは「動かす場所(環境)ごとに、中身を変えられる値」という意味です。今はそこに、APIキーやパスワードなどの大事な情報も置くようになりました。
大事なのは、コードの中に直接書かず、コードの外に出しておくこと。家でいうと:
- コードに直接鍵を書く = 鍵を玄関に置きっぱなし(誰でも見つかる)
- 環境変数にする = 鍵をコードの外(金庫)にしまう(必要な時だけ取り出す)
なんで必要?コードに鍵を書くと…
APIキーやパスワードをコードに直接書くと、いろんな経路で漏れます。

- GitHub にアップしたら世界中に公開(Public リポジトリの場合)
- スクリーンショットや動画に映り込む
- 画面共有で人に見られる
- 後でコードを引き継ぐ人にもバレる
- AIにコードを貼り付けるときも一緒に渡しちゃう
→ 鍵を漏らすと 他人があなたの請求書で使い放題。ChatGPT API なら一晩で数十万円の請求もあり得ます。
だから「コードと鍵は分けて管理する」のが鉄則。これを実現する仕組みが環境変数です。
.env ファイルに書く(ローカルの金庫)
まず「鍵をどこに書くか」から。ローカル開発では .env という名前のファイルを使います。

.env は「environment(=環境)」の略で、環境変数を書いておくための専用ファイル。プロジェクトのフォルダに置いて、中に「名前=値」を並べるだけです:
OPENAI_API_KEY=sk-proj-xxxxxxxxxxxxxxxxxxxx
DATABASE_URL=postgres://user:pass@localhost/mydb
NODE_ENV=development
ルールはシンプル:
- 名前=値 の形で1行ずつ
- 名前は 大文字+アンダースコア が慣例(
OPENAI_API_KEY)
これが「自分のPCに置く金庫」。アプリは「OPENAI_API_KEY の中身ちょうだい」と名前で呼ぶだけで、鍵の実物はこの .env から入ります。
コードと鍵は、別の場所にしまう
ここが一番大事。コードの置き場所と鍵の置き場所を分けます。

| 置き場所 | 中身 | |
|---|---|---|
| コード | GitHub(世界に公開されうる) | 鍵は書かない(名前で呼ぶだけ) |
| 鍵(.env) | 自分のPCだけ | 鍵の実物 |
💡 GitHub について知りたい方は → GitHub ってなに?
だから .env は GitHub にアップ(コミット)してはいけません。.env は自分のPCの中だけに置くもの。うっかり GitHub(公開の場)に上げると、せっかくコードと分けた鍵まで一緒に公開されてしまいます。.gitignore というファイルで除外します:
# .gitignore に書く(=Gitに上げないファイル一覧)
.env
.env.*
*.key
*.pem
代わりに、空のテンプレ .env.example を Git に置いておくと、他の人(や未来の自分)に「鍵の場所だけ教える、実物は渡さない」ことができます:
# OPENAI_API_KEY … ここに自分の鍵を入れる
OPENAI_API_KEY=
# DATABASE_URL … DBのURL
DATABASE_URL=
💡 ちなみに:「金庫」といっても .env は鍵のかかった頑丈な箱ではなく、中身が読めるただのファイルです。環境変数が安全なのは箱の頑丈さではなく、「コードと分ける」「公開の場に出さない」——この2つを守るから。
本番ではどこに置く?
公開サーバー(本番)にも金庫は必要。でも .env は本番に持っていきません。代わりに、サービスごとの専用の保管機能に登録します。登録すれば、本番でもコードからは同じ「環境変数」として読み出せます。
💡 サーバーについて知りたい方は → サーバーってなに?

主な置き場所:
- Cloudflare Workers:
wrangler secret put OPENAI_API_KEY - Vercel / Netlify:管理画面の「Environment Variables」
- GitHub Actions:Repository Settings → Secrets
ポイントは、同じコードでも動く場所によって、取ってくる金庫が変わること:
【同じコード】
process.env.OPENAI_API_KEY
↓
ローカルで動く → .env の値
本番で動く → Cloudflare の値
コードは「名前で呼ぶ」だけ。中身は、動いている場所が用意した金庫から自動で入ります。だから git push でコードを送っても鍵は送られず(.env は除外済み)、本番では本番用の鍵が使われる——という流れです。
実際このサイト(ふんわりIT図解)も同じ仕組みで動いています。サイトの鍵はサービス側の金庫に預けて、コードには書きません。コードはコード置き場、鍵は鍵専用の場所——役割を分けるのが安全運用の基本です。
ここだけは守る
- APIキー・パスワードはコードに書かない。環境変数に置いて、外から呼び出す
- ローカルは .env ファイル、本番はサービスのSecrets機能で管理
- .env は .gitignore に必ず書く。代わりに .env.example でテンプレを共有
- うっかりコミットしたら、鍵を即無効化&再発行。履歴から消すより速い
まとめ

ふんわり理解チェック
- 環境変数=アプリの「外側」に置く名前付きの箱(金庫)
- APIキーやパスワードはコードに書かず、環境変数に入れる
- ローカルは .env、本番はサービスの Secrets 機能
- .env は .gitignore で必ず除外。漏らしたら即・鍵を再発行
「コードと鍵は分けて管理する」——たった1行のルールですが、これを守るだけで請求事故・情報漏洩のほとんどを防げます。ふんわりIT図解の鉄則のひとつでもあります 🌱