用語辞典
「.env」とは — 環境変数ファイルが漏れると何が起きるか
.env(ドットエンブ)は、DB認証・APIキー・暗号鍵などの秘密値をアプリ本体から切り離して保存する設定ファイルです。便利な一方、公開ディレクトリに置くと『鍵束を玄関に貼り出す』のと同じになります。意味、なぜ最も危険なファイルなのか、漏れると各シークレットで何が起きるか、正しい置き場所、gitやローテーションの守り方、そして自己点検の方法を、図と表でやさしく解説します。
.env はとても便利で、ほぼ全てのモダンなフレームワークが使います。でも置き場所を一つ間違えると、サイトの鍵束を玄関に貼り出すのと同じになります。意味と守り方をゼロから解説します。
もう少し詳しく
アプリには「環境ごとに変わる値」や「人に見せたくない値」があります。DBのパスワード、外部サービスのAPIキー、セッションを暗号化する鍵など。これらをソースコードに直書きすると、コードを共有した瞬間に秘密も一緒に漏れます。
そこで、これらを .env という1つのファイルに集め、コードからは「環境変数」として読み込みます。Next.js・Laravel・Rails など多くのフレームワークがこの方式です。
なぜ「最も危険なファイル」なのか
.env は1ファイルに複数の鍵がまとまっているため、ここが漏れると被害が一気に広がります。鍵ごとに「漏れると何が起きるか」を並べると、深刻さが分かります。
| 漏れた値 | 何が起きるか |
|---|---|
| DB認証情報 | データの読み出し・改ざん・全削除 |
| 外部APIキー | なりすまし利用・不正課金 |
暗号鍵(例 Laravel APP_KEY・署名鍵) | セッション偽造・なりすましログイン |
| OAuthシークレット | 連携アプリの乗っ取り |
実際、.env の公開は事故の定番です。→ .env が全世界に公開されていた話
漏れる典型パターン=置き場所のミス
最大の原因は「アプリ本体を公開ディレクトリ(docroot)に丸ごと置く」ことです。public/ だけを見せるべきところで、その親を公開すると .env まで取れてしまいます。
✗ 危険(本体を公開ルート直下)
public_html/ ├─ .env ← 読める! ├─ app/ └─ public/
✓ 安全(本体は外、public だけ公開)
app-root/ ├─ .env ← 到達不能 ├─ app/ └─ public_html/ → public/
守り方
公開ディレクトリに置かない
アプリ本体は docroot の外、公開するのは public/ 等だけ。レンタルサーバーでの具体手順は この記事。
gitにコミットしない
.gitignore に .env* を入れ、値を空にした .env.example だけ共有する。
漏れたら全部ローテーション
確認できた1個でなく、.env にあった鍵を全部入れ替える。見られた前提で動く。
定期的に自己点検
自分のサイトで /.env が開けないか確認する習慣を。
自己点検(自分の所有ドメインにだけ)
# 200 で本文が返ったら公開されている。403/404 なら一旦OK
curl -sI https://あなたのドメイン/.env | head -1
curl -sI https://あなたのドメイン/.git/config | head -1公開のたびにこれを確認する癖をつけると、配置ミスを早期に発見できます。
次に読む
よくある質問
Q.env はgitにコミットしていい?
いけません。.gitignore に必ず .env を加えます。代わりに、値を空にした .env.example だけをコミットして『どんなキーが必要か』を共有します。
Q.env が1個でも漏れたら、何を入れ替える?
確認できた1個だけでなく、.env に入っていた鍵を全部ローテーションします。優先順は『外部API・OAuthシークレット → 暗号鍵 → メール → DB』。見られた前提で動くのが安全です。
Q.env が漏れたか、どう確認する?
自分のサイトで https://あなたのドメイン/.env をブラウザで開いてみて、中身が表示されたら公開されています(200で本文が見えたらアウト)。表示されず 403/404 ならひとまずOKです。