dotenvで設定をコードの外へ出し、開発と本番を分け、秘密情報をGitの外に保ちましょう。
このレッスンを Kodokon で開く待ち受けるポート、データベースのURL、APIキー。これらはどれもソースコードに置くべきものではありません。これらの値はあなたのマシンと本番とで変わり、いくつかは秘密情報です。標準的な解決策は、環境変数です。開発中は.envファイルから読み込みます。npm install dotenvでdotenvをインストールし、プロジェクトのルートにこのファイルを作成しましょう。
PORT=3000
DATABASE_URL=postgres://localhost:5432/kodokon
SESSION_SECRET=change-this-valueエントリーポイントの一番最初でdotenv/configをインポートしましょう。ファイルの変数がprocess.envにコピーされます。プロの良い習慣はこうです。読み取りを一つの設定モジュールに集約し、起動時に変数を検証し、一つでも欠けていればすぐに失敗させる、というものです。起動を拒むサーバーは、最初のリクエストでクラッシュするサーバーよりましです。
import "dotenv/config";
const required = ["PORT", "SESSION_SECRET"];
for (const name of required) {
if (!process.env[name]) {
throw new Error("Missing variable: " + name);
}
}
export const config = {
port: Number(process.env.PORT),
secret: process.env.SESSION_SECRET,
isProd: process.env.NODE_ENV === "production"
};本番には.envファイルはありません。ホストが本物の値を提供し、NODE_ENVはproductionになります。config.isProdを使って動作を変えましょう。開発では詳しいログ、本番では控えめなエラーメッセージ、というふうにです。さらに、期待される変数をダミーの値とともに列挙した.env.exampleファイルもコミットしましょう。秘密情報を露出させずに設定を文書化してくれます。
import express from "express";
import { config } from "./config.js";
const app = express();
if (!config.isProd) {
console.log("Development mode");
}
app.listen(config.port, () => {
console.log("Port: " + config.port);
});.envファイルに.env.exampleファイルの目的は何ですか?.gitignoreに追加する