設定¶
はじめに¶
Laravelフレームワークのすべての設定ファイルは、configディレクトリに保存されています。各オプションには説明があるので、ファイルを見て、利用可能なオプションに慣れてください。
これらの設定ファイルを使用すると、データベース接続情報、メールサーバー情報などのようなものを設定できます。また、アプリケーションのタイムゾーンや暗号化キーなど、さまざまなコア設定値も設定できます。
aboutコマンド¶
Laravelは、about Artisanコマンドを介して、アプリケーションの設定、ドライバ、環境の概要を表示できます。
アプリケーション概要の出力の特定のセクションにのみ興味がある場合は、--onlyオプションを使用してそのセクションをフィルタリングできます:
また、特定の設定ファイルの値を詳細に調べるには、config:show Artisanコマンドを使用できます:
環境設定¶
アプリケーションが実行されている環境に基づいて異なる設定値を持つと便利です。たとえば、ローカルでは本番サーバーとは異なるキャッシュドライバを使用したい場合があります。
これを簡単にするために、LaravelはDotEnv PHPライブラリを利用しています。新しいLaravelインストールでは、アプリケーションのルートディレクトリには、多くの一般的な環境変数を定義する.env.exampleファイルが含まれています。Laravelのインストールプロセス中に、このファイルは自動的に.envにコピーされます。
Laravelのデフォルトの.envファイルには、アプリケーションがローカルで実行されているか本番Webサーバーで実行されているかに基づいて異なる可能性のある一般的な設定値が含まれています。これらの値は、Laravelのenv関数を使用してconfigディレクトリ内の設定ファイルから読み取られます。
チームで開発している場合、アプリケーションに.env.exampleファイルを含めて更新し続けることができます。例の設定ファイルにプレースホルダー値を入れることで、チームの他の開発者は、アプリケーションを実行するために必要な環境変数を明確に確認できます。
Note
.envファイル内のすべての変数は、サーバーレベルまたはシステムレベルの環境変数などの外部環境変数によってオーバーライドできます。
環境ファイルのセキュリティ¶
.envファイルをアプリケーションのソース管理にコミットしてはいけません。アプリケーションを使用する各開発者/サーバーには、異なる環境設定が必要になる可能性があるためです。さらに、これはセキュリティリスクになります。侵入者がソース管理リポジトリにアクセスした場合、すべての機密資格情報が公開されるためです。
ただし、Laravelの組み込みの環境暗号化を使用して環境ファイルを暗号化することは可能です。暗号化された環境ファイルは、アプリケーションの残りの部分とともにソース管理に安全に追加できます。
追加の環境ファイル¶
アプリケーションの環境変数をロードする前に、LaravelはAPP_ENV環境変数が外部から提供されているか、--env CLI引数が指定されているかを判断します。もしそうなら、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 |
スペースを含む値を持つ環境変数を定義する必要がある場合は、値を二重引用符で囲むことでそれを行うことができます:
環境設定の取得¶
.envファイルにリストされているすべての変数は、アプリケーションがリクエストを受け取るときに$_ENV PHPスーパーグローバルにロードされます。ただし、設定ファイル内のこれらの変数の値を取得するには、env関数を使用できます。実際、Laravelの設定ファイルを確認すると、多くのオプションがすでにこの関数を使用していることがわかります:
'debug' => env('APP_DEBUG', false),
env関数に渡される2番目の値は「デフォルト値」です。この値は、指定されたキーに対して環境変数が存在しない場合に返されます。
現在の環境の決定¶
現在のアプリケーション環境は、.envファイルのAPP_ENV変数によって決定されます。この値には、App facadeのenvironmentメソッドを介してアクセスできます:
use Illuminate\Support\Facades\App;
$environment = App::environment();
environmentメソッドに引数を渡して、環境が指定された値と一致するかどうかを判断することもできます。メソッドは、環境が指定された値のいずれかと一致する場合にtrueを返します:
if (App::environment('local')) {
// 環境はローカルです
}
if (App::environment(['local', 'staging'])) {
// 環境はローカルまたはステージングです...
}
Note
現在のアプリケーション環境の検出は、サーバーレベルのAPP_ENV環境変数を定義することで上書きできます。
環境ファイルの暗号化¶
暗号化されていない環境ファイルをソース管理に保存してはいけません。ただし、Laravelを使用すると、環境ファイルを暗号化して、アプリケーションの残りの部分とともにソース管理に安全に追加できます。
暗号化¶
環境ファイルを暗号化するには、env:encryptコマンドを使用できます:
env:encryptコマンドを実行すると、.envファイルが暗号化され、暗号化された内容が.env.encryptedファイルに配置されます。復号化キーはコマンドの出力に表示され、安全なパスワードマネージャに保存する必要があります。独自の暗号化キーを提供する場合は、コマンドを呼び出すときに--keyオプションを使用できます:
Note
提供されるキーの長さは、使用される暗号化暗号に必要なキーの長さと一致する必要があります。デフォルトでは、LaravelはAES-256-CBC暗号を使用します。これには32文字のキーが必要です。コマンドを呼び出すときに--cipherオプションを渡すことで、Laravelの暗号化でサポートされている任意の暗号を自由に使用できます。
アプリケーションに.envや.env.stagingなどの複数の環境ファイルがある場合、--envオプションを介して暗号化する必要がある環境ファイルを指定できます:
復号化¶
環境ファイルを復号化するには、env:decryptコマンドを使用できます。このコマンドには復号化キーが必要で、LaravelはLARAVEL_ENV_ENCRYPTION_KEY環境変数から取得します:
または、キーを--keyオプションを介してコマンドに直接提供できます:
env:decryptコマンドが呼び出されると、Laravelは.env.encryptedファイルの内容を復号化し、復号化された内容を.envファイルに配置します。
--cipherオプションをenv:decryptコマンドに提供して、カスタム暗号化暗号を使用することができます:
アプリケーションに.envや.env.stagingなどの複数の環境ファイルがある場合、--envオプションを介して復号化する必要がある環境ファイルを指定できます:
既存の環境ファイルを上書きするには、env:decryptコマンドに--forceオプションを提供できます:
設定値へのアクセス¶
アプリケーション内のどこからでもConfig facadeまたはグローバルconfig関数を使用して設定値に簡単にアクセスできます。設定値には「ドット」構文を使用してアクセスできます。これには、アクセスしたいファイルとオプションの名前が含まれます。デフォルト値を指定することもでき、設定オプションが存在しない場合に返されます:
use Illuminate\Support\Facades\Config;
$value = Config::get('app.timezone');
$value = config('app.timezone');
// 設定値が存在しない場合にデフォルト値を取得...
$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コマンドを使用して、すべての設定ファイルを単一のファイルにキャッシュする必要があります。これにより、アプリケーションのすべての設定オプションが1つのファイルに結合され、フレームワークによって迅速に読み込まれるようになります。
通常、php artisan config:cacheコマンドは本番環境のデプロイプロセスの一部として実行してください。このコマンドは、アプリケーションの開発中に設定オプションを頻繁に変更する必要があるため、ローカル開発中に実行しないでください。
設定がキャッシュされると、アプリケーションの.envファイルはリクエストやArtisanコマンド中にフレームワークによって読み込まれません。したがって、env関数はシステムレベルの環境変数のみを返します。
このため、アプリケーションの設定(config)ファイル内からのみenv関数を呼び出すようにしてください。Laravelのデフォルト設定ファイルを調べることで、この例を多く見ることができます。設定値は、前述のconfig関数を使用して、アプリケーション内のどこからでもアクセスできます。
キャッシュされた設定をクリアするにはconfig:clearコマンドを使用できます。
Warning
デプロイプロセス中にconfig:cacheコマンドを実行する場合、設定ファイル内からのみenv関数を呼び出していることを確認してください。設定がキャッシュされると、.envファイルは読み込まれません。したがって、env関数はシステムレベルの環境変数のみを返します。
設定の公開¶
Laravelのほとんどの設定ファイルは、既にアプリケーションのconfigディレクトリに公開されています。ただし、cors.phpやview.phpなどの特定の設定ファイルは、デフォルトでは公開されていません。ほとんどのアプリケーションはこれらを変更する必要がないためです。
ただし、config:publish Artisanコマンドを使用して、デフォルトで公開されていない設定ファイルを公開することができます。
デバッグモード¶
config/app.php設定ファイルのdebugオプションは、エラーに関するどの程度の情報がユーザーに実際に表示されるかを決定します。デフォルトでは、このオプションは.envファイルに保存されているAPP_DEBUG環境変数の値を尊重するように設定されています。
Warning
ローカル開発では、APP_DEBUG環境変数をtrueに設定する必要があります。本番環境では、この値は常にfalseである必要があります。本番環境でこの変数がtrueに設定されていると、アプリケーションのエンドユーザーに機密性の高い設定値が公開されるリスクがあります。
メンテナンスモード¶
アプリケーションがメンテナンスモードの場合、アプリケーションへのすべてのリクエストに対してカスタムビューが表示されます。これにより、更新中やメンテナンス中にアプリケーションを「無効化」しやすくなります。メンテナンスモードのチェックは、アプリケーションのデフォルトのミドルウェアスタックに含まれています。アプリケーションがメンテナンスモードの場合、ステータスコード503でSymfony\Component\HttpKernel\Exception\HttpExceptionインスタンスがスローされます。
メンテナンスモードを有効にするには、down Artisanコマンドを実行します。
すべてのメンテナンスモードのレスポンスでRefresh HTTPヘッダーを送信したい場合は、downコマンドを呼び出す際にrefreshオプションを指定できます。Refreshヘッダーは、指定された秒数後にブラウザに自動的にページを更新するよう指示します。
また、downコマンドにretryオプションを指定することもできます。これはRetry-After HTTPヘッダーの値として設定されますが、通常ブラウザはこのヘッダーを無視します。
メンテナンスモードのバイパス¶
シークレットトークンを使用してメンテナンスモードをバイパスできるようにするには、secretオプションを使用してメンテナンスモードバイパストークンを指定できます。
アプリケーションをメンテナンスモードにした後、このトークンに一致するアプリケーションURLに移動すると、Laravelはメンテナンスモードバイパスクッキーをブラウザに発行します。
Laravelにシークレットトークンを生成させたい場合は、with-secretオプションを使用できます。シークレットは、アプリケーションがメンテナンスモードになった後に表示されます。
この隠しルートにアクセスすると、アプリケーションの/ルートにリダイレクトされます。クッキーがブラウザに発行されると、メンテナンスモードでないかのようにアプリケーションを通常通り閲覧できます。
Note
メンテナンスモードのシークレットは、通常、英数字とオプションでダッシュで構成されるべきです。URLで特別な意味を持つ文字(例:?や&)は避けるべきです。
複数サーバーでのメンテナンスモード¶
デフォルトでは、Laravelはファイルベースのシステムを使用してアプリケーションがメンテナンスモードかどうかを判断します。これは、メンテナンスモードを有効にするために、php artisan downコマンドをアプリケーションをホストしている各サーバーで実行する必要があることを意味します。
あるいは、Laravelはメンテナンスモードを処理するためのキャッシュベースの方法も提供しています。この方法では、php artisan downコマンドを1つのサーバーで実行するだけで済みます。このアプローチを使用するには、アプリケーションのconfig/app.phpファイルの「driver」設定をcacheに変更します。次に、すべてのサーバーからアクセス可能なキャッシュstoreを選択します。これにより、メンテナンスモードのステータスがすべてのサーバーで一貫して維持されます。
メンテナンスモードビューのプリレンダリング¶
デプロイ中にphp artisan downコマンドを使用する場合、Composerの依存関係やその他のインフラストラクチャコンポーネントが更新されている間に、ユーザーがアプリケーションにアクセスすると、エラーが発生することがあります。これは、Laravelフレームワークの大部分が起動してアプリケーションがメンテナンスモードであることを判断し、テンプレートエンジンを使用してメンテナンスモードビューをレンダリングする必要があるためです。
このため、Laravelでは、リクエストサイクルの非常に早い段階で返されるメンテナンスモードビューをプリレンダリングできます。このビューは、アプリケーションの依存関係がいずれもロードされる前にレンダリングされます。downコマンドのrenderオプションを使用して、選択したテンプレートをプリレンダリングできます。
メンテナンスモードリクエストのリダイレクト¶
メンテナンスモード中に、ユーザーがアクセスしようとするすべてのアプリケーションURLに対してメンテナンスモードビューが表示されます。必要に応じて、Laravelにすべてのリクエストを特定のURLにリダイレクトするよう指示できます。これは、redirectオプションを使用して行うことができます。たとえば、すべてのリクエストを/ URIにリダイレクトすることができます。
メンテナンスモードの無効化¶
メンテナンスモードを無効にするには、upコマンドを使用します。
Note
デフォルトのメンテナンスモードテンプレートは、resources/views/errors/503.blade.phpに独自のテンプレートを定義することでカスタマイズできます。
メンテナンスモードとキュー¶
アプリケーションがメンテナンスモードの間、キュージョブは処理されません。アプリケーションがメンテナンスモードから抜けると、ジョブは通常通り処理されます。
メンテナンスモードの代替手段¶
メンテナンスモードでは、アプリケーションに数秒のダウンタイムが必要になるため、Laravel VaporやEnvoyerなどの代替手段を検討して、Laravelでゼロダウンタイムデプロイを実現してください。