設定

設定

AdonisJSアプリケーションの設定ファイルはconfigディレクトリ内に保存されます。新しいAdonisJSアプリケーションには、フレームワークのコアとインストールされたパッケージによって使用されるいくつかの事前存在するファイルが付属しています。

configディレクトリ内にアプリケーションが必要とする追加のファイルを自由に作成してください。

シークレットや環境固有の設定を保存するために、環境変数の使用をオススメします。

設定ファイルのインポート

標準のJavaScriptのimportステートメントを使用して、アプリケーションのコードベース内で設定ファイルをインポートできます。

例:

import { appKey } from '#config/app'
import databaseConfig from '#config/database'

設定サービスの使用

設定サービスは、設定値を読み取るための代替APIを提供しています。次の例では、設定サービスを使用して、config/app.tsファイル内に保存されているappKeyの値を読み取っています。

import config from '@adonisjs/core/services/config'
config.get('app.appKey')
config.get('app.http.cookie') // ネストされた値を読み取る

config.getメソッドは、ドットで区切られたキーを受け入れ、次のように解析します。

  • 最初の部分は、値を読み取りたいファイルのファイル名です。たとえばapp.tsファイルです。
  • 文字列の残りの部分は、エクスポートされた値からアクセスしたいキーです。この場合はappKeyです。

設定サービスと設定ファイルの直接インポート

設定サービスを直接設定ファイルをインポートするよりも利点はありません。ただし、設定サービスは外部パッケージやエッジテンプレートで設定を読み取るための唯一の選択肢です。

外部パッケージ内での設定の読み取り

サードパーティのパッケージを作成している場合、ユーザーアプリケーションから設定ファイルを直接インポートするべきではありません。なぜなら、それによってパッケージがホストアプリケーションのフォルダ構造と密接に結びつくことになるからです。

代わりに、サービスプロバイダ内で設定値にアクセスするために設定サービスを使用するべきです。

例:

import { ApplicationService } from '@adonisjs/core/types'
export default class DriveServiceProvider {
constructor(protected app: ApplicationService) {}
register() {
this.app.container.singleton('drive', () => {
// ハイライト開始
const driveConfig = this.app.config.get('drive')
return new DriveManager(driveConfig)
// ハイライト終了
})
}
}

Edgeテンプレート内での設定の読み取り

configグローバルメソッドを使用して、エッジテンプレート内で設定値にアクセスできます。

<a href="{{ config('app.appUrl') }}"> ホーム </a>

config.hasメソッドを使用して、指定されたキーに対して設定値が存在するかどうかを確認できます。メソッドは値がundefinedの場合にfalseを返します。

@if(config.has('app.appUrl'))
<a href="{{ config('app.appUrl') }}"> ホーム </a>
@else
<a href="/"> ホーム </a>
@end

設定ディレクトリの変更

adonisrc.tsファイルを変更することで、設定ディレクトリの場所を更新できます。変更後、設定ファイルは新しい場所からインポートされます。

directories: {
config: './configurations'
}

package.jsonファイル内のインポートエイリアスも更新する必要があります。

{
"imports": {
"#config/*": "./configurations/*.js"
}
}

設定ファイルの制限

configディレクトリ内に保存されている設定ファイルは、アプリケーションの起動フェーズでインポートされます。そのため、設定ファイルはアプリケーションコードに依存することはできません。

たとえばconfig/app.tsファイル内でルーターサービスをインポートして使用しようとすると、アプリケーションの起動に失敗します。これは、ルーターサービスがbooted状態になるまで設定されないためです。

基本的に、この制限はコードベースにプラスの影響を与えます。なぜなら、アプリケーションコードは設定に依存すべきであり、逆ではないからです。

実行時に設定を更新する

設定サービスを使用して実行時に設定値を変更できます。config.setはメモリ内の値を更新し、ディスク上のファイルには変更が加えられません。

設定値は単一のHTTPリクエストだけでなく、アプリケーション全体に対して変更されます。これは、Node.jsがスレッド化されていないランタイムであり、Node.jsのメモリが複数のHTTPリクエスト間で共有されるためです。

import env from '#start/env'
import config from '@adonisjs/core/services/config'
const HOST = env.get('HOST')
const PORT = env.get('PORT')
config.set('app.appUrl', `http://${HOST}:${PORT}`)