なつねこメモ

主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ 書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。

.env を 1Password で運用したい

.env みたいなのをいっぱい作りたくなかったり、良い感じにしたいので、 1Password に管理を任せてしまおう、という記事。
1Password には、開発者向けのツールとして、 1Password CLI が提供されています。
その CLI の機能に、環境変数を定義した .env を読み込み、指定された形式で記述された値を、 1Password に保存された値で置き換える、という機能があります。
それを使うことで、良い感じに環境変数を設定できます。

ということで、やっていきましょう。


まず、インストールしていなければ 1Password CLI を入れましょう。
Windows なら Scoop から入ります。

$ scoop install 1password-cli

入れたら、 1Password の設定画面から、 1Password CLI を有効にします。
以下のコマンドが実行できれば OK です。

$ op vault ls

次に、環境変数に設定していたアイテムを 1Password に保存します。
名前はなんでも良いですが、後で使うのでわかりやすい名前を付けておきます。

保存後、次のような形式で環境変数の値部分を置き換えます。

APP_ENV=Vault-$NODE_ENV

DATABASE_URL=op://$APP_ENV/DB/connection_string

フォーマットとしては、 op://[Vault 名]/[アイテム名]/[フィールド名] の形式で指定します。
例えば、 Vault SomeProduct-development、アイテム名を MySQL、フィールド名を connection_string にしたら、以下のようになります。

op://SomeProduct-development/MySQL/connection_string`

ここでは、 $NODE_ENV で環境を切り替えています。
最後に、以下のようなコマンドを実行します。
Next.js ならこうなる。

cross-env NODE_ENV=development FORCE_COLOR=true op run --env-file='./.env' -- next dev

FORCE_COLOR を指定しているのは、 op run を経由すると、色を含まない状態になってしまって、ちょっと見づらくなるので指定しています。
ということで、メモでした。