メインコンテンツまでスキップ

設定

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'];
}