設定
Zeltは @Config デコレータと injectConfig() ヘルパーを使用した型安全な設定システムを提供します。
設定の定義
@Config デコレータを使用して設定クラスを定義します。各設定クラスには静的な Token プロパティが必要です:
import { Config } from '@zeltjs/core';
@Config
export class DatabaseConfig {
static readonly Token = DatabaseConfig;
get host() {
return process.env.DATABASE_HOST ?? 'localhost';
}
get port() {
return Number(process.env.DATABASE_PORT ?? 5432);
}
get connectionString() {
return `postgres://${this.host}:${this.port}/mydb`;
}
}
設定の使用
injectConfig() を使用してサービスやコントローラーに設定を注入します:
import { Injectable, injectConfig } from '@zeltjs/core';
import { DatabaseConfig } from './database.config';
@Injectable()
export class DatabaseService {
constructor(private config = injectConfig(DatabaseConfig)) {}
connect() {
return this.config.connectionString;
}
}
設定の登録
HTTPアプリ作成時に設定クラスを登録します:
import { createHttpApp } from '@zeltjs/core';
import { DatabaseConfig } from './database.config';
import { AppController } from './app.controller';
const app = createHttpApp({
controllers: [AppController],
configs: [DatabaseConfig],
});
設定のオーバーライド
テスト用に設定クラスを継承して値をオーバーライドできます:
import { Config } from '@zeltjs/core';
import { DatabaseConfig } from './database.config';
@Config
export class TestDatabaseConfig extends DatabaseConfig {
override get host() {
return 'test-db';
}
override get port() {
return 5433;
}
}
// テストのセットアップ
const app = createHttpApp({
controllers: [AppController],
configs: [TestDatabaseConfig],
});
Token プロパティは親クラスから継承されるため、injectConfig(DatabaseConfig) はオーバーライドされた TestDatabaseConfig インスタンスを受け取ります。
環境ベースの設定
Zeltは環境変数用の組み込み設定クラスを提供します:
ProcessEnvConfig
process.envから直接読み取ります:
import { Config, ProcessEnvConfig, injectConfig } from '@zeltjs/core';
@Config
export class DatabaseConfig {
static readonly Token = DatabaseConfig;
constructor(private env = injectConfig(ProcessEnvConfig)) {}
get host() {
return this.env.get('DATABASE_HOST') ?? 'localhost';
}
get port() {
return Number(this.env.get('DATABASE_PORT') ?? 5432);
}
get connectionString() {
return `postgres://${this.host}:${this.port}/mydb`;
}
}
// 両方の設定を登録
const app = createHttpApp({
controllers: [AppController],
configs: [ProcessEnvConfig, DatabaseConfig],
});
DotEnvConfig
dotenvを使用して.envファイルを読み込み、process.envから読み取ります:
import { Config, DotEnvConfig, injectConfig } from '@zeltjs/core';
@Config
export class DatabaseConfig {
static readonly Token = DatabaseConfig;
constructor(private env = injectConfig(DotEnvConfig)) {}
get host() {
return this.env.get('DATABASE_HOST') ?? 'localhost';
}
}
// DotEnvConfigはコンストラクタで.envを読み込む
const app = createHttpApp({
controllers: [AppController],
configs: [DotEnvConfig, DatabaseConfig],
});
カスタム環境ファイルパス
DotEnvConfigを継承してカスタムパスから読み込みます:
import { Config, DotEnvConfig } from '@zeltjs/core';
@Config
export class MyEnvConfig extends DotEnvConfig {
protected override readonly paths = ['.env', '.env.local'];
}