NodeJSで環境変数を使う
dotenvの使用
シークレットとAPIトークンの安全な取り扱い
関連記事: トークンの保護
「シークレット」と「ノンシークレット」の違いをすばやく振り返ります。
- 🔒
シークレットキーは、3rdパーティAPIサービスへのリクエストを隠す(プロキシ)ために、カスタムサーバー(例: Node/Express/Heroku)の使用が必須です。 - 🌍
ノンシークレットキーは、ブラウザに送信しても構わないキーを指します。
🔒
シークレットキーを環境変数で安全に扱う方法に焦点を当てます。
概要
NodeJSコードでシークレットに安全にアクセスするには:
- ハードコードされたキーを環境変数に置き換える。例:
process.env.API_SECRET dotenvのようなライブラリと.envファイルを使用する。以前ハードコードされていたシークレットを.envファイルに追加する。.gitignoreファイルに.env行が含まれていることを確認!
絶対にデプロイされたサーバーで
.envファイルを作成しないでください。ホスティングサービス(例: Heroku、Netlify、AWS EC2)が提供する環境変数管理ツール(例: ダッシュボードまたはコマンドライン)を使用してください。
コード例
いくつかのファイルを定義していきます。
.env./db/connection.js./api/users.js
まず、dotenv パッケージをインストールします。
npm install dotenv次に、プロジェクトのルートに .env ファイルを作成します。
PGDATABASE="postgres"PGHOST="localhost"PGPORT=5234PGUSER="postgres"PGPASSWORD="password"❌ 決して .env ファイルをコミットしないでください。
❌ サーバー上で .env ファイルを作成しないでください。
ホスティングプロバイダーのドキュメントを確認し、_環境変数_を設定してください。
.gitignore に .env 行が含まれていることを簡単に確認するには:
# .gitignore を自動更新# ターミナルで実行:[ "$(grep '^.env' .gitignore)" == "" ] && echo '.env' >> .gitignore# 注: 何も出力されません./db/connection.js は共有された pg.Pool インスタンスを提供します。データベースクエリに使用されます。
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 があります。
const db = require('../db/connection.js');
module.exports = { findUsername: function(username) { return db.query('SELECT * FROM users WHERE username=$1', username); }};.envのシークレットを git にコミットしないでください!- チーム内で
.envファイルを共有しないでください。*
* 新しい開発用ノートPCやデスクトップでは必ず新しいアクセストークンとキーを生成してください。
不可能な場合は、サービスが古いキーを無効化する可能性や有料APIの制限付きトークンがある場合を除き、.env の共有には十分注意してください。
⚠️ 必要な場合は常にセキュアメッセージングサービス(好ましくはメッセージの有効期限付きサービス)を使用してください。
成功をお祈りします。質問があればいつでもお知らせください!🎉