Next.js × dotenv-expandを使って環境変数を入れ子で柔軟に管理する方法
環境変数同士を参照したい場面、意外と多くありませんか?
Next.jsを用いた開発では、.envファイルで環境変数を管理することが一般的です。しかし、環境変数内で他の環境変数を使おうとすると、標準の.envファイル読み込み機能だけでは対応できません。
そんなときに便利なのが dotenv-expand です。本記事では、このパッケージの導入方法から、具体的なユースケースまでを、丁寧に解説いたします。
環境変数のネスト定義を可能にするdotenv-expand
dotenv-expandを利用することで、以下のように他の変数を参照した構文が使えるようになります。
envBASE_URL=https://example.com
API_ENDPOINT=${BASE_URL}/api
このような書き方を可能にする仕組みが dotenv-expand の主な役割です。
Next.jsにdotenv-expandを導入する手順
まずは必要なパッケージのインストールです。Next.jsでは標準で dotenv を利用していますが、それに加えて以下のように dotenv-expand を追加します。
bashyarn add dotenv dotenv-expand
次に、環境変数を読み込むコードを、Next.jsの起動前に挿入します。
scripts/setup-env.js というファイルを作成し、以下のように記述します。
jsconst dotenv = require('dotenv');
const dotenvExpand = require('dotenv-expand');
const fs = require('fs');
const path = require('path');
const envPath = path.resolve(__dirname, '../.env');
if (fs.existsSync(envPath)) {
const myEnv = dotenv.config({ path: envPath });
dotenvExpand.expand(myEnv);
}
そして、package.jsonの dev や build スクリプトを以下のように修正します。
json{
"scripts": {
"predev": "node scripts/setup-env.js",
"dev": "next dev",
"prebuild": "node scripts/setup-env.js",
"build": "next build"
}
}
こうすることで、開発時もビルド時も dotenv-expand によって変数展開された .env の内容が利用されるようになります。
ユースケース紹介:現場で役立つパターン集
開発現場ではどのように活用できるのでしょうか?代表的なパターンをいくつか紹介します。
| ユースケース名 | 内容 | 例 |
|---|---|---|
| APIエンドポイント統合 | BASE_URL を使って共通URLの管理 | API_URL=${BASE_URL}/api/v1 |
| CDNのルート設定 | アセットURLをベースに画像パスなどを定義 | IMAGE_CDN=${CDN_BASE_URL}/images |
| ログ出力設定 | 複数ログ設定をひとつのプレフィックスで統一管理 | LOG_PATH=${LOG_BASE}/system.log |
| S3パス構成 | バケット名とリージョンからURLを構築 | S3_URL=https://${S3_BUCKET}.s3.${REGION}.amazonaws.com |
それぞれの構成において、重複を避け、環境依存の構造を柔軟に切り替えることができるのが大きな利点です。
Next.jsのpublicRuntimeConfigやserverRuntimeConfigとの併用
next.config.jsで publicRuntimeConfig や serverRuntimeConfig を用いて環境変数をアプリ内で参照する場合も、dotenv-expand で展開された内容が活用可能です。
jsmodule.exports = {
publicRuntimeConfig: {
apiUrl: process.env.API_URL,
},
};
このように、setup-env.js により .env ファイルの変数が先に展開されているため、Next.jsの設定ファイルでも展開済みの値が利用できます。
まとめ:dotenv-expandで環境変数の管理をもっと便利に
dotenv-expandを導入することで、環境変数内での他の変数参照が可能になります。- セットアップは簡単で、Next.jsの起動前に処理を加えるだけで利用可能です。
- 実際のユースケースとして、APIのURL管理、ログのパス設定、CDN構成などに役立ちます。
next.config.jsとも連携可能で、プロジェクト全体での一貫した変数管理が実現します。
環境変数が複雑になってきたときこそ、dotenv-expandを活用することで保守性と可読性が向上します。ぜひ、今後のNext.jsプロジェクトで試してみてはいかがでしょうか。
articleNext.js でドキュメントポータル:MDX/全文検索/バージョン切替の設計例
articleNext.js でインフィニットスクロールを実装:Route Handlers +`use` で滑らかデータ読込
articleRedis 使い方:Next.js で Cache-Tag と再検証を実装(Edge/Node 両対応)
articleNext.js の RSC 境界設計:Client Components を最小化する責務分離戦略
articleNext.js ルーティング早見表:セグメント・グループ・オプションの一枚まとめ
articleNext.js × pnpm/Turborepo 初期構築:ワークスペース・共有パッケージ・CI 最適化
articleSvelte のコンパイル出力を読み解く:仮想 DOM なしで速い理由
articleTauri で Markdown エディタを作る:ライブプレビュー・拡張プラグイン対応
articleStorybook で“仕様が生きる”開発:ドキュメント駆動 UI の実践ロードマップ
articleshadcn/ui で B2B SaaS ダッシュボードを組む:権限別 UI と監査ログの見せ方
articleSolidJS の Control Flow コンポーネント大全:Show/For/Switch/ErrorBoundary を使い分け
articleRemix で管理画面テンプレ:表・フィルタ・CSV エクスポートの鉄板構成
blogiPhone 17シリーズの発表!全モデルiPhone 16から進化したポイントを見やすく整理
blogGoogleストアから訂正案内!Pixel 10ポイント有効期限「1年」表示は誤りだった
blog【2025年8月】Googleストア「ストアポイント」は1年表記はミス?2年ルールとの整合性を検証
blogGoogleストアの注文キャンセルはなぜ起きる?Pixel 10購入前に知るべき注意点
blogPixcel 10シリーズの発表!全モデル Pixcel 9 から進化したポイントを見やすく整理
blogフロントエンドエンジニアの成長戦略:コーチングで最速スキルアップする方法
review今の自分に満足していますか?『持たざる者の逆襲 まだ何者でもない君へ』溝口勇児
reviewついに語られた業界の裏側!『フジテレビの正体』堀江貴文が描くテレビ局の本当の姿
review愛する勇気を持てば人生が変わる!『幸せになる勇気』岸見一郎・古賀史健のアドラー実践編で真の幸福を手に入れる
review週末を変えれば年収も変わる!『世界の一流は「休日」に何をしているのか』越川慎司の一流週末メソッド
review新しい自分に会いに行こう!『自分の変え方』村岡大樹の認知科学コーチングで人生リセット
review科学革命から AI 時代へ!『サピエンス全史 下巻』ユヴァル・ノア・ハラリが予見する人類の未来