![dotenvxを使用して.envを暗号化する方法](https://iwb.jp/wp-content/uploads/2024/07/dotenvx-encrypt-env-nextjs.png)
dotenvxとは
dotenvxは.envを暗号化するツールです。
.envファイルにはパスワードなど、第三者に見られては困る内容が書かれていることが多いため、暗号化して、のぞき見されてもわからないようにしたほうがセキュリティが向上します。
また、暗号化すれば.envファイルをGitHubにプッシュできるので、.envファイルが存在することがGitHubのファイル一覧からわかるようになります。
Macの場合はHomebrewでインストールできます。
brew install dotenvx/brew/dotenvx
Curl, Npm, Docker, Windowsなどでインストールする方法も公式ドキュメントに書かれています。
インストールしたらまず.envファイルを用意します。
PASSWORD=ABCD1234
.envをsourceコマンドで読み込めばechoコマンドで表示できます。
source ./.env
echo $PASSWORD
ABCD1234
.envファイルを暗号化する
.envファイルを暗号化するには「dotenvx encrypt」コマンドを実行します。
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='f2eae50a95c71c852847f9e95e7e8cbae785f3821b6e9bbe5cdb9cba170da3c7' dotenvx run -- yourcommand] to test decryption locally
実行後は.envが暗号化され、解読するための.env.keysが生成されます。
※ .env.productionファイルの場合は「dotenvx encrypt -f .env.production」で暗号化します。
![.envが暗号化され、解読するための.env.keysが生成されます](https://iwb.jp/wp-content/uploads/2024/07/dotenvx-encrypt-env-nextjs-keys-file.png)
暗号化は現在の技術で解読するには数十億年かかるSecp256k1が使用されているので、.env.keysなしで解読されることはないです。
#/-------------------[DOTENV_PUBLIC_KEY]--------------------/
#/ public-key encryption for .env files /
#/ [how it works](https://dotenvx.com/encryption) /
#/----------------------------------------------------------/
DOTENV_PUBLIC_KEY="0293a6db45e326311c7bb3017091de3ac3b6cd04341e900591eef04f36908963d6"
# .env
PASSWORD="encrypted:BDMNMG3OGZO6l2Di49jDoTGs2NYBUIs7v2bcyKq+emcufAWD9iwhrSAwJB7LNjulCmTPe92n86gbMtdJ0+z037AYPn5iQE52DNqJqzGfVYGR1dGPmlXhalqwJfg/5lWvjCmwlt7ayd+h"
.env.keysを生成したら「echo ".env.keys" >> .gitignore」コマンドで.gitignoreを追加してGitHubに反映させないようにします。
暗号化後は.envを読み込んで、echoで実行すると「encrypted:BDMN〜」が表示されます。
source ./.env
echo $PASSWORD
encrypted:BDMNMG3OGZO6l2Di49jDoTGs2NYBUIs7v2bcyKq+emcufAWD9iwhrSAwJB7LNjulCmTPe92n86gbMtdJ0+z037AYPn5iQE52DNqJqzGfVYGR1dGPmlXhalqwJfg/5lWvjCmwlt7ayd+h
dotenvx runで実行すると解読して表示できます。
dotenvx run -f .env -- sh -c 'echo $PASSWORD'
ABCD1234
Next.jsなどで使用する場合
package.jsonの「next dev」などを「dotenvx run -- next dev」に変えて実行するだけで暗号化した.envを解読して表示できます。
export default function Home() {
return (
// ABCD1234 が表示されます。
<h1>{process.env.PASSWORD}</h1>
);
}