いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

dotenvx (dotenvの作者が作った better dotenv)

関連記事

GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ

概要

以下、自分用のメモです。忘れないうちにメモメモ。。。

dotenvの作者が作った次の dotenv という意味で dotenvx というのがリリースされていたのですね。

dotenvx.com

github.com

dotenvx.com

「どこでも動く」、「対応言語がすごく多い」、「.envファイルを暗号化できる」という点が良いですね。

ちょっと試してみたのでメモ。

試してみた

WSL上で利用しました。

インストールは、brewで一発でした。

$ brew install dotenvx/brew/dotenvx

予め以下のソースコードを用意

$ mkdir app; cd $_
$ go mod init app

$ cat main.go
package main

import (
        "fmt"
        "os"
)

func main() {
        fmt.Println(os.Getenv("hello"))
}

$ go run .

$ 

.env ファイルを用意

$ echo "hello=world" > .env
$ cat .env
hello=world

dotenvx を使って暗号化してみます。

$ dotenvx encrypt
✔ encrypted (.env)
✔ key added to .env.keys (DOTENV_PRIVATE_KEY)
ℹ add .env.keys to .gitignore: [echo ".env.keys" >> .gitignore]
ℹ run [DOTENV_PRIVATE_KEY='xxxxxxxxxxxxxxxxxxxxxxx' dotenvx run -- yourcommand] to test decryption locally

.envが暗号化され、.env.keys というファイルが追加されます。

.env.keysファイルに秘密鍵が書かれているので、このファイルをコミットしてはいけません。(上の出力にも .gitignore に追加しろって出てますね)

暗号化された .env は以下のようになりました。

#/-------------------[DOTENV_PUBLIC_KEY]--------------------/
#/            public-key encryption for .env files          /
#/       [how it works](https://dotenvx.com/encryption)     /
#/----------------------------------------------------------/
DOTENV_PUBLIC_KEY="025b7c933746af69b8c14a249b0ceb4f379b83f0639523ea682dc7b61ca038ea61"

# .env
hello="encrypted:BM97GGw4a4EOxCUT8K0syQHQ+tcyMavpjpRq30mqpUOUtwT0uHEaU4zzt5gD+5OzwSqpTW887lbIc0m3FxdU6ydrxRhuRS1ETUmYoK4EMfW4Rc0v1XohxLUJ0Yp8AmhnNZUbCmUV"

てことで、暗号化された .env を使ってプログラムを起動します。

$ dotenvx run -- go run .
[dotenvx@1.5.0] injecting env (2) from .env
world

おー、ちゃんと復号化された上でアプリケーションからは取得できていますね。

[dotenvx@1.5.0] injecting env (2) from .env の出力がいらない場合は、-q オプションを付与します。

$ dotenvx -q run -- go run .
world

参考情報


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。