更新日

.env ファイルを Git にコミットせずに共有する方法

著者

.env ファイルを共有する最も安全な方法は、暗号化された自己消滅リンクを使うことだ — Slack の DM やメール、Git コミットではない。Vaulted のようなツールは、何かが送信される前にブラウザ内で AES-256-GCM を使って環境変数を暗号化し、閲覧後にリンクが自動的に削除される。

GitGuardian の「State of Secrets Sprawl 2025」レポートによると、2024 年にはパブリックの GitHub リポジトリで 2,380 万件のシークレットが漏洩した — 前年比 25% の増加だ。そして GitHub 自身のデータによれば、2024 年にプラットフォーム全体で 3,900 万件のシークレットが検出されている。その多くは、誤ってコミットされた .env ファイルの内容に由来する。

.env ファイル共有の問題

環境ファイルが特に危険なのは、アプリが必要とするすべてのシークレットを一か所に集約しているからだ:データベース URLAPI キー、署名シークレット、サードパーティのトークン.env が一度漏洩すれば、アプリケーションが接続するすべての外部サービスが危険にさらされる。

チームが .env ファイルを共有するよくある方法 — そしてなぜそれが失敗するか:

  • Slack/Discord の DM — 検索可能で、バックアップされ、従業員が退職した後も残る
  • メール — メールサーバー上にプレーンテキストで保存され、意図せず転送されることも多い
  • Git コミット — プライベートリポジトリであっても、履歴に残ったシークレットを完全に削除するのはほぼ不可能
  • 共有ドライブ — 有効期限なし、アクセス制御なし、監査証跡なし
  • 1Password/Bitwarden のノート — 双方が同じボールト内にアカウントを持っている必要がある

より良いアプローチ:暗号化された自己消滅リンク

ファイルの内容を直接送る代わりに、まず暗号化して、閲覧後に自己消滅するリンクを共有しよう。

ブラウザから

  1. vaulted.fyi にアクセスする
  2. .env ファイルの内容を貼り付ける
  3. 閲覧回数制限(1 人の受信者なら閲覧 1 回)と有効期限を設定する
  4. 生成されたリンクをチームメンバーに送る

内容は何かが送信される前にブラウザ内で AES-256-GCM で暗号化される。復号鍵は URL フラグメントにのみ存在し、サーバーがプレーンテキストを見ることは決してない。

ターミナルから

コマンドラインが好みなら、Vaulted CLI でも同じことができる:

# Pipe directly from the file
cat .env.production | npx vaulted-cli --views 1

# Or pass the file path
npx vaulted-cli --file .env.local --views 1 --expires 1h

# Add a passphrase for extra security
cat .env | npx vaulted-cli -v 1 -e 24h -p "ask-me-on-call"

CLI はウェブアプリと同じ暗号化を使う — 同じアルゴリズム、同じゼロ知識アーキテクチャ、同じ自己消滅リンクだ。出力は単一の URL で、Slack などに貼り付けられる。受信者が閲覧すると期限切れになる。

シークレットマネージャーはどうなの?

DopplerInfisicalAWS Secrets Manager のようなツールは、アプリケーションがシークレットをプログラムで読み取る本番環境に最適だ。しかし、それらが解決する問題は別のことだ — サービスが自動的に読み取るシークレットを管理するものだ。

.env の共有問題は、人から人への受け渡しに関するものだ:新しい開発者のオンボーディング、ステージング設定を請負業者と共有すること、ローテーション後に更新された認証情報を配布すること。この受け渡しは、迅速で安全で、受信者側にセットアップを一切要求しないものである必要がある。

.env ファイル衛生のベストプラクティス

  1. .env ファイルを Git にコミットしない — 最初から .env*.gitignore に追加する
  2. 共有後に認証情報をローテーションする — 共有のたびに潜在的な漏洩として扱う
  3. 閲覧回数制限付きリンクを使う — 受信者 1 人につき閲覧 1 回、短い有効期限
  4. 本番設定にはパスフレーズを追加する — パスフレーズは別のチャネルで共有する
  5. 必要な変数を文書化する — 空の値を持つ .env.example をリポジトリに置く

環境変数を Slack に貼り付けるのはやめよう。Vaulted で安全に共有しよう — ブラウザからでもターミナルからでも。


関連