コンテンツへスキップ

設定

はじめに

Laravelフレームワークのすべての設定ファイルは、configディレクトリに保存されています。各オプションはドキュメント化されているので、自由にファイルを見て、利用可能なオプションを理解してください。

これらの設定ファイルを使用すると、データベース接続情報、メールサーバー情報、アプリケーションのタイムゾーンや暗号化キーなどのさまざまなコア設定値を構成できます。

aboutコマンド

Laravelは、aboutArtisanコマンドを使用して、アプリケーションの設定、ドライバー、および環境の概要を表示できます。

php artisan about

アプリケーションの概要出力の特定のセクションのみに関心がある場合は、--onlyオプションを使用してそのセクションをフィルタリングできます

php artisan about --only=environment

または、特定の構成ファイルの値の詳細を調べたい場合は、config:showArtisanコマンドを使用できます

php artisan config:show database

環境設定

アプリケーションが実行されている環境に基づいて異なる構成値を持つことが役立つ場合があります。たとえば、本番サーバーで使用するキャッシュドライバーとは異なるキャッシュドライバーをローカルで使用したい場合があります。

これを簡単にするために、LaravelはDotEnv PHPライブラリを利用しています。新しいLaravelインストールでは、アプリケーションのルートディレクトリに、多くの一般的な環境変数を定義する.env.exampleファイルが含まれています。Laravelインストールプロセス中に、このファイルは自動的に.envにコピーされます。

Laravelのデフォルトの.envファイルには、アプリケーションがローカルで実行されているか、本番Webサーバーで実行されているかによって異なる可能性のある一般的な構成値が含まれています。これらの値は、Laravelのenv関数を使用して、configディレクトリ内の構成ファイルによって読み取られます。

チームで開発している場合は、アプリケーションの.env.exampleファイルを引き続き含めて更新することをお勧めします。例の構成ファイルにプレースホルダー値を配置することで、チームの他の開発者は、アプリケーションを実行するために必要な環境変数を明確に確認できます。

lightbulb

.envファイルのすべての変数は、サーバーレベルまたはシステムレベルの環境変数などの外部環境変数によってオーバーライドできます。

環境ファイルのセキュリティ

アプリケーションを使用する開発者/サーバーごとに異なる環境設定が必要になる可能性があるため、.envファイルをアプリケーションのソース管理にコミットしないでください。さらに、侵入者がソース管理リポジトリにアクセスした場合、機密性の高い認証情報が公開されるため、これはセキュリティ上のリスクになります。

ただし、Laravelの組み込み環境暗号化を使用して、環境ファイルを暗号化することは可能です。暗号化された環境ファイルは、ソース管理に安全に配置できます。

追加の環境ファイル

Laravelは、アプリケーションの環境変数をロードする前に、APP_ENV環境変数が外部で提供されているか、--envCLI引数が指定されているかを確認します。その場合、Laravelは.env.[APP_ENV]ファイルが存在する場合は、それをロードしようとします。存在しない場合は、デフォルトの.envファイルがロードされます。

環境変数の型

.envファイルのすべての変数は通常、文字列として解析されるため、env()関数からより広範な型を返すことができるように、いくつかの予約値が作成されています

.env env()
true (bool) true
(true) (bool) true
false (bool) false
(false) (bool) false
empty (string) ''
(empty) (string) ''
null (null) null
(null) (null) null

スペースを含む値を持つ環境変数を定義する必要がある場合は、値を二重引用符で囲むことで定義できます

APP_NAME="My Application"

環境設定の取得

.envファイルにリストされているすべての変数は、アプリケーションがリクエストを受信すると、$_ENVPHPスーパーグローバルにロードされます。ただし、構成ファイルでこれらの変数から値を取得するには、env関数を使用できます。実際、Laravel構成ファイルを確認すると、多くのオプションがすでにこの関数を使用していることがわかります

'debug' => env('APP_DEBUG', false),

env関数に渡される2番目の値は「デフォルト値」です。指定されたキーの環境変数が存在しない場合、この値が返されます。

現在の環境の特定

現在のアプリケーション環境は、.envファイルのAPP_ENV変数によって決定されます。Appファサードenvironmentメソッドを使用して、この値にアクセスできます

use Illuminate\Support\Facades\App;
 
$environment = App::environment();

environmentメソッドに引数を渡して、環境が特定の値と一致するかどうかを判断することもできます。環境が指定された値のいずれかと一致する場合、メソッドはtrueを返します

if (App::environment('local')) {
// The environment is local
}
 
if (App::environment(['local', 'staging'])) {
// The environment is either local OR staging...
}
lightbulb

現在のアプリケーション環境検出は、サーバーレベルのAPP_ENV環境変数を定義することでオーバーライドできます。

環境ファイルの暗号化

暗号化されていない環境ファイルは、ソース管理に保存しないでください。ただし、Laravelでは、環境ファイルを暗号化して、アプリケーションの残りの部分とともに安全にソース管理に追加できるようにすることができます。

暗号化

環境ファイルを暗号化するには、env:encryptコマンドを使用できます

php artisan env:encrypt

env:encryptコマンドを実行すると、.envファイルが暗号化され、暗号化されたコンテンツが.env.encryptedファイルに配置されます。復号化キーはコマンドの出力に表示され、安全なパスワードマネージャーに保存する必要があります。独自の暗号化キーを提供したい場合は、コマンドを呼び出すときに--keyオプションを使用できます

php artisan env:encrypt --key=3UVsEgGVK36XN82KKeyLFMhvosbZN1aF
lightbulb

指定するキーの長さは、使用する暗号化アルゴリズムで必要なキーの長さに一致している必要があります。デフォルトでは、LaravelはAES-256-CBC暗号を使用し、これには32文字のキーが必要です。コマンド実行時に--cipherオプションを渡すことで、Laravelの暗号化機能でサポートされている任意の暗号を使用できます。

アプリケーションに.env.env.stagingのような複数の環境ファイルがある場合は、--envオプションで環境名を指定することで、暗号化する環境ファイルを指定できます。

php artisan env:encrypt --env=staging

復号化

環境ファイルを復号化するには、env:decryptコマンドを使用します。このコマンドには復号化キーが必要で、LaravelはLARAVEL_ENV_ENCRYPTION_KEY環境変数から取得します。

php artisan env:decrypt

または、--keyオプションを介して、キーをコマンドに直接指定することもできます。

php artisan env:decrypt --key=3UVsEgGVK36XN82KKeyLFMhvosbZN1aF

env:decryptコマンドが実行されると、Laravelは.env.encryptedファイルの内容を復号化し、復号化された内容を.envファイルに配置します。

env:decryptコマンドに--cipherオプションを指定することで、カスタムの暗号化アルゴリズムを使用できます。

php artisan env:decrypt --key=qUWuNRdfuImXcKxZ --cipher=AES-128-CBC

アプリケーションに.env.env.stagingのような複数の環境ファイルがある場合は、--envオプションで環境名を指定することで、復号化する環境ファイルを指定できます。

php artisan env:decrypt --env=staging

既存の環境ファイルを上書きする場合は、env:decryptコマンドに--forceオプションを指定できます。

php artisan env:decrypt --force

設定値へのアクセス

アプリケーション内のどこからでも、Configファサードまたはグローバルconfig関数を使用して、設定値に簡単にアクセスできます。設定値には、「ドット」構文を使用してアクセスできます。これには、アクセスしたいファイルの名前とオプションが含まれます。設定オプションが存在しない場合は、デフォルト値を指定して返すこともできます。

use Illuminate\Support\Facades\Config;
 
$value = Config::get('app.timezone');
 
$value = config('app.timezone');
 
// Retrieve a default value if the configuration value does not exist...
$value = config('app.timezone', 'Asia/Seoul');

実行時に設定値を設定するには、Configファサードのsetメソッドを呼び出すか、config関数に配列を渡します。

Config::set('app.timezone', 'America/Chicago');
 
config(['app.timezone' => 'America/Chicago']);

静的分析を支援するために、Configファサードは型付きの設定値取得メソッドも提供します。取得した設定値が予期された型と一致しない場合は、例外がスローされます。

Config::string('config-key');
Config::integer('config-key');
Config::float('config-key');
Config::boolean('config-key');
Config::array('config-key');

設定のキャッシュ

アプリケーションを高速化するために、config:cache Artisanコマンドを使用して、すべての設定ファイルを単一のファイルにキャッシュする必要があります。これにより、アプリケーションのすべての設定オプションが単一のファイルに結合され、フレームワークで迅速に読み込めるようになります。

通常、php artisan config:cacheコマンドは本番環境へのデプロイプロセスの一部として実行する必要があります。ローカル開発中は、アプリケーションの開発中に設定オプションを頻繁に変更する必要があるため、コマンドを実行しないでください。

設定がキャッシュされると、アプリケーションの.envファイルはリクエストまたはArtisanコマンド中にフレームワークによって読み込まれなくなります。したがって、env関数は外部のシステムレベルの環境変数のみを返します。

このため、アプリケーションの設定(config)ファイル内でのみenv関数を呼び出すようにしてください。Laravelのデフォルト設定ファイルを確認することで、多くの例を見ることができます。設定値には、アプリケーション内のどこからでも、上記の説明にあるconfig関数を使用してアクセスできます。

キャッシュされた設定を削除するには、config:clearコマンドを使用できます。

php artisan config:clear
exclamation

デプロイプロセス中にconfig:cacheコマンドを実行する場合は、設定ファイル内でのみenv関数を呼び出していることを確認してください。設定がキャッシュされると、.envファイルは読み込まれなくなります。したがって、env関数は外部のシステムレベルの環境変数のみを返します。

設定の公開

Laravelのほとんどの設定ファイルは、アプリケーションのconfigディレクトリに既に公開されています。ただし、cors.phpview.phpのような特定の設定ファイルは、ほとんどのアプリケーションでは変更する必要がないため、デフォルトでは公開されていません。

ただし、デフォルトで公開されていない設定ファイルを公開するには、config:publish Artisanコマンドを使用できます。

php artisan config:publish
 
php artisan config:publish --all

デバッグモード

config/app.php設定ファイルにあるdebugオプションは、エラーに関する情報を実際にユーザーにどれだけ表示するかを決定します。デフォルトでは、このオプションは.envファイルに保存されているAPP_DEBUG環境変数の値を尊重するように設定されています。

exclamation

ローカル開発では、APP_DEBUG環境変数をtrueに設定する必要があります。本番環境では、この値は常にfalseにする必要があります。本番環境で変数がtrueに設定されていると、アプリケーションのエンドユーザーに機密性の高い設定値を公開するリスクがあります。

メンテナンスモード

アプリケーションがメンテナンスモードの場合、アプリケーションへのすべてのリクエストに対してカスタムビューが表示されます。これにより、アプリケーションの更新中やメンテナンスを実行中に、アプリケーションを簡単に「無効」にできます。メンテナンスモードのチェックは、アプリケーションのデフォルトのミドルウェアスタックに含まれています。アプリケーションがメンテナンスモードの場合、ステータスコード503のSymfony\Component\HttpKernel\Exception\HttpExceptionインスタンスがスローされます。

メンテナンスモードを有効にするには、down Artisanコマンドを実行します。

php artisan down

すべてのメンテナンスモードの応答とともにRefresh HTTPヘッダーを送信したい場合は、downコマンドを呼び出すときにrefreshオプションを指定できます。Refreshヘッダーは、指定された秒数後にページを自動的に更新するようにブラウザに指示します。

php artisan down --refresh=15

Retry-After HTTPヘッダーの値として設定されるretryオプションをdownコマンドに指定することもできますが、ブラウザは通常このヘッダーを無視します。

php artisan down --retry=60

メンテナンスモードのバイパス

秘密トークンを使用してメンテナンスモードをバイパスできるようにするには、secretオプションを使用してメンテナンスモードのバイパス トークンを指定できます。

php artisan down --secret="1630542a-246b-4b66-afa1-dd72a4c43515"

アプリケーションをメンテナンスモードにした後、このトークンに一致するアプリケーションURLに移動すると、Laravelはメンテナンスモードのバイパス Cookieをブラウザに発行します。

https://example.com/1630542a-246b-4b66-afa1-dd72a4c43515

Laravelに秘密トークンを生成させたい場合は、with-secretオプションを使用できます。アプリケーションがメンテナンスモードになると、秘密トークンが表示されます。

php artisan down --with-secret

この隠しルートにアクセスすると、アプリケーションの/ルートにリダイレクトされます。Cookieがブラウザに発行されると、メンテナンスモードではない場合と同様に、通常どおりにアプリケーションを閲覧できるようになります。

lightbulb

メンテナンスモードの秘密トークンは、通常、英数字と、必要に応じてダッシュで構成する必要があります。?&のようなURLで特別な意味を持つ文字の使用は避ける必要があります。

複数サーバーでのメンテナンスモード

デフォルトでは、Laravelはファイルベースのシステムを使用して、アプリケーションがメンテナンスモードになっているかどうかを判断します。つまり、メンテナンスモードを有効にするには、アプリケーションをホストしている各サーバーでphp artisan downコマンドを実行する必要があります。

または、Laravelはメンテナンスモードを処理するためのキャッシュベースの方法を提供しています。この方法では、1つのサーバーでphp artisan downコマンドを実行するだけで済みます。このアプローチを使用するには、アプリケーションのconfig/app.phpファイルの「driver」設定をcacheに変更します。次に、すべてのサーバーからアクセスできるキャッシュstoreを選択します。これにより、すべてのサーバーでメンテナンスモードの状態が常に維持されます。

'maintenance' => [
'driver' => 'cache',
'store' => 'database',
],

メンテナンスモードビューの事前レンダリング

デプロイ中にphp artisan downコマンドを使用する場合、Composerの依存関係やその他のインフラストラクチャコンポーネントが更新されている間にユーザーがアプリケーションにアクセスすると、エラーが発生することがあります。これは、アプリケーションがメンテナンスモードであることを判断し、テンプレートエンジンを使用してメンテナンスモードビューをレンダリングするために、Laravelフレームワークの大部分を起動する必要があるために発生します。

このため、Laravelでは、リクエストサイクルの開始時に返されるメンテナンスモードビューを事前レンダリングできます。このビューは、アプリケーションの依存関係が読み込まれる前にレンダリングされます。downコマンドのrenderオプションを使用して、選択したテンプレートを事前にレンダリングできます。

php artisan down --render="errors::503"

メンテナンスモードのリクエストのリダイレクト

メンテナンスモード中、LaravelはユーザーがアクセスしようとするすべてのアプリケーションURLに対してメンテナンスモードビューを表示します。必要に応じて、すべてのリクエストを特定のURLにリダイレクトするようにLaravelに指示できます。これは、redirectオプションを使用して実行できます。たとえば、すべてのリクエストを/ URIにリダイレクトすることができます。

php artisan down --redirect=/

メンテナンスモードの無効化

メンテナンスモードを無効にするには、upコマンドを使用します。

php artisan up
lightbulb

resources/views/errors/503.blade.phpに独自のテンプレートを定義することで、デフォルトのメンテナンスモードテンプレートをカスタマイズできます。

メンテナンスモードとキュー

アプリケーションがメンテナンスモードの場合、キューに入ったジョブは処理されません。ジョブは、アプリケーションがメンテナンスモードから解除されると、通常どおり処理され続けます。

メンテナンスモードの代替手段

メンテナンスモードではアプリケーションが数秒間停止する必要があるため、Laravel VaporEnvoyerのような代替手段を検討して、Laravelでダウンタイムゼロのデプロイを実現してください。