DanLevy.net

NodeJSで環境変数を使う

dotenvの使用

Hero image for NodeJSで環境変数を使う

シークレットとAPIトークンの安全な取り扱い

関連記事: トークンの保護

「シークレット」と「ノンシークレット」の違いをすばやく振り返ります。



🔒 シークレットキー環境変数で安全に扱う方法に焦点を当てます。

コード例は以下に含まれます。

概要

NodeJSコードでシークレットに安全にアクセスするには:

  1. ハードコードされたキーを環境変数に置き換える。例: process.env.API_SECRET
  2. dotenvのようなライブラリと.envファイルを使用する。以前ハードコードされていたシークレットを.envファイルに追加する。
  3. .gitignoreファイルに.env行が含まれていることを確認!

絶対にデプロイされたサーバーで.envファイルを作成しないでください。ホスティングサービス(例: Heroku、Netlify、AWS EC2)が提供する環境変数管理ツール(例: ダッシュボードまたはコマンドライン)を使用してください。

コード例

いくつかのファイルを定義していきます。

  1. .env
  2. ./db/connection.js
  3. ./api/users.js

まず、dotenv パッケージをインストールします。

Terminal window
npm install dotenv

次に、プロジェクトのルートに .env ファイルを作成します。

.env
PGDATABASE="postgres"
PGHOST="localhost"
PGPORT=5234
PGUSER="postgres"
PGPASSWORD="password"

決して .env ファイルをコミットしないでください。

❌ サーバー上で .env ファイルを作成しないでください。

ホスティングプロバイダーのドキュメントを確認し、_環境変数_を設定してください。

.gitignore.env 行が含まれていることを簡単に確認するには:

Terminal window
# .gitignore を自動更新
# ターミナルで実行:
[ "$(grep '^.env' .gitignore)" == "" ] && echo '.env' >> .gitignore
# 注: 何も出力されません

./db/connection.js は共有された pg.Pool インスタンスを提供します。データベースクエリに使用されます。

./db/connection.js
require('dotenv').config(); // ✅ .env ファイルをロード
const pg = require('pg');
const {PGUSER, PGHOST, PGPORT} = process.env;
if (process.env.NODE_ENV === 'development')
console.log(`Connecting to ${PGUSER} @ ${PGHOST}:${PGHOST}`);
// ^^ デバッグ用接続変数の表示のみ
// pg は自動的に PG* 環境変数を使用
module.exports = new pg.Pool();

./api フォルダにはテーブル/ビューのインターフェースが含まれます。

users テーブル用の例として ./api/users.js があります。

./api/users.js
const db = require('../db/connection.js');
module.exports = {
findUsername: function(username) {
return db.query('SELECT * FROM users WHERE username=$1', username);
}
};

* 新しい開発用ノートPCやデスクトップでは必ず新しいアクセストークンとキーを生成してください。 不可能な場合は、サービスが古いキーを無効化する可能性や有料APIの制限付きトークンがある場合を除き、.env の共有には十分注意してください。

⚠️ 必要な場合は常にセキュアメッセージングサービス(好ましくはメッセージの有効期限付きサービス)を使用してください。

成功をお祈りします。質問があればいつでもお知らせください!🎉