環境変数の管理
2026年8月4日例えば /app-1/.envを /my-project-secrets/app-1/.env のようにして環境変数を管理する場合、環境変数の値を変えるたびに保管用のフォルダ側も環境変数を変えないといけない。シンボリックリンクを設定して同期させる仕組みも後述する SOPS + age パターンよりは管理が複雑になる。
Vercelのようなパターン
vercelにデプロイしている場合、 Vercel Cliコマンドのvercel env pullだけでローカルに値が埋め込まれた.envファイルが生成される。 .envファイルの二重管理の必要性がなく、.evnファイルをGithubにpushする必要もないので理想的なパターンではある。
しかし、Cloudで環境変数を登録してCliコマンドで引っ張れるパターンを実現できる「1Password」のようなsaasは有料である。
SOPS + age
有料でなくCloudにも依存せずに済む方法
sops:
https://github.com/getsops/sops/releases
age:
https://github.com/filosottile/age
インストールが終わったら
# 1. 保存用のディレクトリを作る
mkdir -p ~/.config/sops/age
# 2. 鍵を生成
age-keygen -o ~/.config/sops/age/keys.txtPCを変えた時などはsops/ageをインストールし旧PCから
keys.txtを移行すれば、Gitリポジトリをcloneしたときに環境変数を確認したりできる。個人の場合、公開鍵・秘密鍵のペアは1つだけ用意して複数のアプリで共有する。
使い方
SOPS運用前に.env.developmentと .env.productionがルートにあり、管理したいのは.env.productionの方だとする。
.sops.ymlをプロジェクトルートに作成
creation_rules:
- path_regex: \.env\.production$ # .envファイル、 monorepoの場合 - path_regex: apps/[^/]+/\.env\.production$
age: "keys.txtのpublicキー"暗号化(最初だけ使う):
sops --encrypt --in-place .env.production.env.production自体が暗号化される。*重要:encryptしたファイルを誤って再度encryptしてしまう事がある。回数分だけdecryptで遡れば元に戻せるが、こういった事故を防ぐためにコマンドは初回のみ使用する。
編集:
sops edit .env.production平文が表示された状態でeditorが開くので環境変数を追加したりできる。
平文のファイルに対してコマンドを実行するとエラーになる。
lazyVimではspace ft のターミナルではなくターミナル分割して実行する。ターミナルで開いたqキーがlazyVim側と競合する為
復号化(使わない):
sops --decrypt --in-place .env.production*重要:運用の流れは「平文を復号して環境変数を追加して暗号化」という流れではなく、
sops editで「環境変数を追加して暗号化」を一括でできるため、復号化コマンドを使う場面はない。このコマンドの使用を癖付けると、誤って復号化したファイルをコミットするようなことも考えられる。sops decrypt .env.production > .env.production.plainのように平文のファイルを生成したいような場合のみ使う。
scriptコマンド
暗号化と復号化コマンドは基本的に触れないようにするために、scriptコマンドに登録するのはeditコマンドのみにする。
"env:edit": "sops edit .env.production",git
.gitignore:
.env*のようにしている場合、もっと粒度を細かくしSOPSで管理するファイルを追跡除外から外す。
.env.local
.env.development
.env*.local