はじめに

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

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

aboutコマンド

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

  1. php artisan about

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

  1. php artisan about --only=environment

また、特定の設定ファイルの値を詳細に調べるには、config:show Artisanコマンドを使用できます:

  1. php artisan config:show database

環境設定

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

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

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

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

  1. <a name="environment-file-security"></a>
  2. #### 環境ファイルのセキュリティ
  3. あなたの`````.env`````ファイルは、各開発者/サーバーが異なる環境設定を必要とする可能性があるため、アプリケーションのソース管理にコミットされるべきではありません。さらに、侵入者がソース管理リポジトリにアクセスした場合、機密情報が露出するため、これはセキュリティリスクとなります。
  4. ただし、Laravelの組み込み[環境暗号化](#encrypting-environment-files)を使用して環境ファイルを暗号化することは可能です。暗号化された環境ファイルは、安全にソース管理に配置できます。
  5. <a name="additional-environment-files"></a>
  6. #### 追加の環境ファイル
  7. アプリケーションの環境変数を読み込む前に、Laravelは`````APP_ENV`````環境変数が外部から提供されているか、`````--env````` CLI引数が指定されているかを判断します。そうであれば、Laravelは`````.env.[APP_ENV]`````ファイルが存在する場合にそれを読み込もうとします。存在しない場合は、デフォルトの`````.env`````ファイルが読み込まれます。
  8. <a name="environment-variable-types"></a>
  9. ### 環境変数の種類
  10. あなたの`````.env`````ファイル内のすべての変数は通常文字列として解析されるため、`````env()`````関数からより広範な型を返すことを可能にするためにいくつかの予約値が作成されています:
  11. | `````.env````` 値 | `````env()````` 値 |
  12. | --- | --- |
  13. | true | (bool) true |
  14. | (true) | (bool) true |
  15. | false | (bool) false |
  16. | (false) | (bool) false |
  17. | empty | (string) '' |
  18. | (empty) | (string) '' |
  19. | null | (null) null |
  20. | (null) | (null) null |
  21. 値にスペースが含まれる環境変数を定義する必要がある場合は、値を二重引用符で囲むことで可能です:
  22. ``````ini
  23. APP_NAME="My Application"
  24. `

環境設定の取得

.envファイルにリストされているすべての変数は、アプリケーションがリクエストを受け取るときに$_ENV PHPスーパーグローバルに読み込まれます。ただし、env関数を使用して、これらの変数から設定ファイルの値を取得できます。実際、Laravelの設定ファイルを確認すると、多くのオプションがすでにこの関数を使用していることに気付くでしょう:

  1. 'debug' => env('APP_DEBUG', false),
  1. <a name="determining-the-current-environment"></a>
  2. ### 現在の環境の特定
  3. 現在のアプリケーション環境は、`````APP_ENV`````変数を介して`````.env`````ファイルから決定されます。この値には、`````App````` [ファサード](/read/laravel-11-x/26d423d01da275e8.md)の`````environment`````メソッドを介してアクセスできます:
  4. ``````php
  5. use Illuminate\Support\Facades\App;
  6. $environment = App::environment();
  7. `
  1. ``````php
  2. if (App::environment('local')) {
  3. // The environment is local
  4. }
  5. if (App::environment(['local', 'staging'])) {
  6. // The environment is either local OR staging...
  7. }
  8. `

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

環境ファイルの暗号化

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

暗号化

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

  1. php artisan env:encrypt
  1. ``````shell
  2. php artisan env:encrypt --key=3UVsEgGVK36XN82KKeyLFMhvosbZN1aF
  3. `

提供されたキーの長さは、使用される暗号化シファーによって要求されるキーの長さと一致する必要があります。デフォルトでは、LaravelはAES-256-CBCシファーを使用し、32文字のキーを必要とします。コマンドを呼び出すときに--cipherオプションを渡すことで、Laravelの暗号化器がサポートする任意のシファーを使用できます。

アプリケーションに.env.env.stagingなどの複数の環境ファイルがある場合は、--envオプションを使用して暗号化する環境ファイルを指定できます:

  1. php artisan env:encrypt --env=staging

復号化

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

  1. php artisan env:decrypt

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

  1. php artisan env:decrypt --key=3UVsEgGVK36XN82KKeyLFMhvosbZN1aF
  1. `````--cipher`````オプションは、`````env:decrypt`````コマンドに提供され、カスタム暗号化シファーを使用することができます:
  2. ``````shell
  3. php artisan env:decrypt --key=qUWuNRdfuImXcKxZ --cipher=AES-128-CBC
  4. `

アプリケーションに.env.env.stagingなどの複数の環境ファイルがある場合は、--envオプションを使用して復号化する環境ファイルを指定できます:

  1. php artisan env:decrypt --env=staging

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

  1. php artisan env:decrypt --force

設定値へのアクセス

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

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

ランタイムで設定値を設定するには、Configファサードのsetメソッドを呼び出すか、config関数に配列を渡すことができます:

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

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

  1. Config::string('config-key');
  2. Config::integer('config-key');
  3. Config::float('config-key');
  4. Config::boolean('config-key');
  5. Config::array('config-key');

設定キャッシュ

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

通常、php artisan config:cacheコマンドはプロダクションデプロイメントプロセスの一部として実行する必要があります。このコマンドは、ローカル開発中に実行すべきではありません。なぜなら、アプリケーションの開発中に設定オプションを頻繁に変更する必要があるからです。

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

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

  1. ``````shell
  2. php artisan config:clear
  3. `

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

設定の公開

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

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

  1. php artisan config:publish
  2. php artisan config:publish --all

デバッグモード

  1. ローカル開発では、`````APP_DEBUG`````環境変数を`````true`````に設定する必要があります。**プロダクション環境では、この値は常に`````false`````であるべきです。変数がプロダクションで`````true`````に設定されている場合、アプリケーションのエンドユーザーに機密設定値が露出するリスクがあります。**
  2. <a name="maintenance-mode"></a>
  3. ## メンテナンスモード
  4. アプリケーションがメンテナンスモードのとき、すべてのリクエストに対してカスタムビューが表示されます。これにより、アプリケーションの更新中やメンテナンスを行っているときに「無効にする」ことが簡単になります。メンテナンスモードのチェックは、アプリケーションのデフォルトミドルウェアスタックに含まれています。アプリケーションがメンテナンスモードの場合、`````Symfony\Component\HttpKernel\Exception\HttpException`````インスタンスが503のステータスコードでスローされます。
  5. メンテナンスモードを有効にするには、`````down````` Artisanコマンドを実行します:
  6. ``````shell
  7. php artisan down
  8. `

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

  1. php artisan down --refresh=15

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

  1. php artisan down --retry=60

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

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

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

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

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

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

  1. php artisan down --with-secret

この隠しルートにアクセスすると、アプリケーションの/ルートにリダイレクトされます。クッキーがブラウザに発行されると、メンテナンスモードでないかのようにアプリケーションを通常通りブラウズできます。

メンテナンスモードの秘密は、通常、英数字とオプションでダッシュで構成されるべきです。?&のように、URLに特別な意味を持つ文字を使用することは避けるべきです。

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

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

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

  1. 'maintenance' => [
  2. 'driver' => 'cache',
  3. 'store' => 'database',
  4. ],

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

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

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

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

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

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

  1. php artisan down --redirect=/

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

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

  1. php artisan up

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

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

アプリケーションがメンテナンスモードのとき、キューされたジョブは処理されません。アプリケーションがメンテナンスモードから出ると、ジョブは通常通り処理され続けます。

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

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