Angularプロジェクトでの環境変数設定(Angular 15以降)
重要な変更点
Angular 15から、新規プロジェクト作成時にenvironments
フォルダが自動生成されなくなりました。これはAngularチームによる意図的な設計変更です。
問題の背景
Angular 14以前では、ng new
コマンドでプロジェクトを作成すると、デフォルトで以下の環境ファイルが生成されていました:
src/
└── environments/
├── environment.ts // 開発環境用
└── environment.prod.ts // 本番環境用
しかしAngular 15以降では、このフォルダは自動的に作成されません。この変更は公式ドキュメントで明記されており、多くの開発者が混乱する原因となりました。
公式の意図
Angularチームは、環境ファイルが必ずしもすべてのプロジェクトで必要ではないと判断しました。必要な場合のみ環境ファイルを追加するよう設計が変更されています。
🛠 推奨解決策: ng generate environments
コマンド
Angular CLI 15.1以降では、専用コマンドが追加されています:
bash
ng generate environments
このコマンドを実行すると:
environments
フォルダが自動生成- 基本の環境ファイルが作成される
angular.json
の設定が自動更新
生成されるファイル構成
typescript
// 開発環境デフォルト設定
export const environment = {
production: false
};
typescript
// 本番環境設定
export const environment = {
production: true
};
コマンドによりangular.json
に自動追加される設定例:
json
"configurations": {
"production": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
]
}
}
手動設定方法
既存のプロジェクトで手動設定が必要な場合:
1. フォルダとファイルの作成
bash
mkdir src/environments
touch src/environments/environment.ts
touch src/environments/environment.prod.ts
2. 環境ファイルの内容設定
environment.ts
(開発用):
typescript
export const environment = {
production: false,
apiUrl: 'http://dev.api.example.com'
};
environment.prod.ts
(本番用):
typescript
export const environment = {
production: true,
apiUrl: 'https://api.example.com'
};
3. angular.json
の手動更新
json
"configurations": {
"production": {
// ...他の設定...
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
]
}
}
🔄 高度な環境設定パターン
カスタム環境の追加(例: ステージング環境)
- 新しい環境ファイル作成
bash
touch src/environments/environment.staging.ts
angular.json
に追加設定
json
"configurations": {
// ...既存の設定...
"staging": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.staging.ts"
}
]
}
}
- ビルドコマンドで環境指定
bash
ng build --configuration=staging
実行時環境変数(動的ロード)
ビルド時ではなく実行時に環境変数を設定する方法:
javascript
const fs = require('fs');
const path = require('path');
// NG_APP_プレフィックスの環境変数をフィルタリング
const ngAppEnvVars = Object.entries(process.env)
.filter(([key]) => key.startsWith('NG_APP_'))
.reduce((obj, [key, value]) => ({ ...obj, [key]: value }), {});
const fileContent = `
(function(window) {
window.__env = ${JSON.stringify(ngAppEnvVars, null, 2)};
})(this);
`;
fs.writeFileSync(
path.resolve(__dirname, '../src/assets/env.js'),
fileContent
);
json
"scripts": [
"src/assets/env.js"
]
使用例:
typescript
const apiUrl = window.__env.NG_APP_API_URL;
Git管理注意点
生成されるenv.js
はGitで管理しないように:
gitignore
# 生成ファイルはGit除外
src/assets/env.js
💡 ベストプラクティス
- 開発と本番で異なる設定が必要な場合のみ環境ファイルを使用する
- 機密情報(APIキーなど)は環境ファイルに直接書かず、バックエンドで管理
- TypeScriptの型安全を活用:typescript
// environment.model.ts export interface Environment { production: boolean; apiUrl: string; analyticsId?: string; }
- テスト環境用に
environment.test.ts
を追加することを検討 - Angularの
APP_INITIALIZER
を利用した設定のプリロード
トラブルシューティング
環境ファイルが反映されない場合のチェックリスト:
angular.json
のfileReplacements
パスが正しいか確認- ビルドコマンドに
--configuration=production
を指定 - ファイル名のスペルミス(例:
environment
vsenvironment
) - サーバー再起動後に設定変更が反映されるか確認
非推奨の回避策
Angular 14以前へのダウングレードは推奨されません:
bash
# 非推奨
npm install -g @angular/cli@14.2.10
代わりに公式のng generate environments
または手動設定を採用してください。
まとめ
Angular 15以降では:
- ✅ 公式推奨の
ng generate environments
を使用 - ⚙️ 必要に応じて手動で環境ファイルを作成可能
- 🚀 高度なユースケースには動的環境変数ロードを検討
環境設定はプロジェクトの重要な基盤です。Angularの最新ベストプラクティスに従い、安全で柔軟な設定を実現してください。