はじめに
Laravelフレームワークのすべての設定ファイルは、config
ディレクトリに保存されています。各オプションは文書化されているので、ファイルを見て利用可能なオプションに慣れてください。
これらの設定ファイルを使用すると、データベース接続情報、メールサーバー情報、アプリケーションのタイムゾーンや暗号化キーなど、さまざまなコア設定値を構成できます。
aboutコマンド
Laravelは、about
Artisanコマンドを介して、アプリケーションの設定、ドライバー、および環境の概要を表示できます。
php artisan about
アプリケーションの概要出力の特定のセクションにのみ興味がある場合は、--only
オプションを使用してそのセクションをフィルタリングできます:
php artisan about --only=environment
また、特定の設定ファイルの値を詳細に調べるには、config:show
Artisanコマンドを使用できます:
php artisan config:show database
環境設定
アプリケーションが実行されている環境に基づいて異なる設定値を持つことはしばしば役立ちます。たとえば、プロダクションサーバーで使用するのとは異なるキャッシュドライバーをローカルで使用したい場合があります。
これを簡単にするために、LaravelはDotEnv PHPライブラリを利用しています。新しいLaravelインストールでは、アプリケーションのルートディレクトリに多くの一般的な環境変数を定義する.env.example
ファイルが含まれます。Laravelのインストールプロセス中に、このファイルは自動的に.env
にコピーされます。
Laravelのデフォルトの.env
ファイルには、アプリケーションがローカルで実行されているか、プロダクションWebサーバーで実行されているかに応じて異なる可能性のある一般的な設定値が含まれています。これらの値は、Laravelのenv
関数を使用してconfig
ディレクトリ内の設定ファイルによって読み取られます。
チームで開発している場合は、アプリケーションとともに.env.example
ファイルを引き続き含めて更新することをお勧めします。例の設定ファイルにプレースホルダー値を入れることで、チームの他の開発者はアプリケーションを実行するために必要な環境変数を明確に確認できます。
<a name="environment-file-security"></a>
#### 環境ファイルのセキュリティ
あなたの`````.env`````ファイルは、各開発者/サーバーが異なる環境設定を必要とする可能性があるため、アプリケーションのソース管理にコミットされるべきではありません。さらに、侵入者がソース管理リポジトリにアクセスした場合、機密情報が露出するため、これはセキュリティリスクとなります。
ただし、Laravelの組み込み[環境暗号化](#encrypting-environment-files)を使用して環境ファイルを暗号化することは可能です。暗号化された環境ファイルは、安全にソース管理に配置できます。
<a name="additional-environment-files"></a>
#### 追加の環境ファイル
アプリケーションの環境変数を読み込む前に、Laravelは`````APP_ENV`````環境変数が外部から提供されているか、`````--env````` CLI引数が指定されているかを判断します。そうであれば、Laravelは`````.env.[APP_ENV]`````ファイルが存在する場合にそれを読み込もうとします。存在しない場合は、デフォルトの`````.env`````ファイルが読み込まれます。
<a name="environment-variable-types"></a>
### 環境変数の種類
あなたの`````.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 |
値にスペースが含まれる環境変数を定義する必要がある場合は、値を二重引用符で囲むことで可能です:
``````ini
APP_NAME="My Application"
`
環境設定の取得
.env
ファイルにリストされているすべての変数は、アプリケーションがリクエストを受け取るときに$_ENV
PHPスーパーグローバルに読み込まれます。ただし、env
関数を使用して、これらの変数から設定ファイルの値を取得できます。実際、Laravelの設定ファイルを確認すると、多くのオプションがすでにこの関数を使用していることに気付くでしょう:
'debug' => env('APP_DEBUG', false),
<a name="determining-the-current-environment"></a>
### 現在の環境の特定
現在のアプリケーション環境は、`````APP_ENV`````変数を介して`````.env`````ファイルから決定されます。この値には、`````App````` [ファサード](/read/laravel-11-x/26d423d01da275e8.md)の`````environment`````メソッドを介してアクセスできます:
``````php
use Illuminate\Support\Facades\App;
$environment = App::environment();
`
``````php
if (App::environment('local')) {
// The environment is local
}
if (App::environment(['local', 'staging'])) {
// The environment is either local OR staging...
}
`
現在のアプリケーション環境の検出は、サーバーレベルのAPP_ENV
環境変数を定義することで上書きできます。
環境ファイルの暗号化
暗号化されていない環境ファイルは、ソース管理に保存されるべきではありません。ただし、Laravelは環境ファイルを暗号化して、アプリケーションの他の部分と一緒に安全にソース管理に追加できるようにします。
暗号化
環境ファイルを暗号化するには、env:encrypt
コマンドを使用できます:
php artisan env:encrypt
``````shell
php artisan env:encrypt --key=3UVsEgGVK36XN82KKeyLFMhvosbZN1aF
`
提供されたキーの長さは、使用される暗号化シファーによって要求されるキーの長さと一致する必要があります。デフォルトでは、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
`````--cipher`````オプションは、`````env:decrypt`````コマンドに提供され、カスタム暗号化シファーを使用することができます:
``````shell
php artisan env:decrypt --key=qUWuNRdfuImXcKxZ --cipher=AES-128-CBC
`
アプリケーションに.env
や.env.staging
などの複数の環境ファイルがある場合は、--env
オプションを使用して復号化する環境ファイルを指定できます:
php artisan env:decrypt --env=staging
既存の環境ファイルを上書きするには、--force
オプションをenv:decrypt
コマンドに提供できます:
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コマンドを使用してすべての設定ファイルを1つのファイルにキャッシュする必要があります。これにより、アプリケーションのすべての設定オプションが1つのファイルに結合され、フレームワークによって迅速に読み込まれます。
通常、php artisan config:cache
コマンドはプロダクションデプロイメントプロセスの一部として実行する必要があります。このコマンドは、ローカル開発中に実行すべきではありません。なぜなら、アプリケーションの開発中に設定オプションを頻繁に変更する必要があるからです。
設定がキャッシュされると、アプリケーションの.env
ファイルはリクエストやArtisanコマンド中にフレームワークによって読み込まれなくなります。したがって、env
関数は外部のシステムレベルの環境変数のみを返します。
このため、アプリケーションの設定(config
)ファイル内からのみenv
関数を呼び出すことを確認する必要があります。Laravelのデフォルト設定ファイルを調べることで、これに関する多くの例を見ることができます。設定値は、config
関数を使用してアプリケーションのどこからでもアクセスできます上記の説明。
``````shell
php artisan config:clear
`
デプロイメントプロセス中にconfig:cache
コマンドを実行する場合は、設定ファイル内からのみenv
関数を呼び出していることを確認してください。設定がキャッシュされると、.env
ファイルは読み込まれなくなります。したがって、env
関数は外部のシステムレベルの環境変数のみを返します。
設定の公開
Laravelの設定ファイルのほとんどは、アプリケーションのconfig
ディレクトリにすでに公開されています。ただし、cors.php
やview.php
のような特定の設定ファイルはデフォルトでは公開されていません。ほとんどのアプリケーションはそれらを変更する必要がないからです。
ただし、config:publish
Artisanコマンドを使用して、デフォルトで公開されていない設定ファイルを公開できます:
php artisan config:publish
php artisan config:publish --all
デバッグモード
ローカル開発では、`````APP_DEBUG`````環境変数を`````true`````に設定する必要があります。**プロダクション環境では、この値は常に`````false`````であるべきです。変数がプロダクションで`````true`````に設定されている場合、アプリケーションのエンドユーザーに機密設定値が露出するリスクがあります。**
<a name="maintenance-mode"></a>
## メンテナンスモード
アプリケーションがメンテナンスモードのとき、すべてのリクエストに対してカスタムビューが表示されます。これにより、アプリケーションの更新中やメンテナンスを行っているときに「無効にする」ことが簡単になります。メンテナンスモードのチェックは、アプリケーションのデフォルトミドルウェアスタックに含まれています。アプリケーションがメンテナンスモードの場合、`````Symfony\Component\HttpKernel\Exception\HttpException`````インスタンスが503のステータスコードでスローされます。
メンテナンスモードを有効にするには、`````down````` Artisanコマンドを実行します:
``````shell
php artisan down
`
すべてのメンテナンスモードレスポンスにRefresh
HTTPヘッダーを送信したい場合は、refresh
オプションを提供してdown
コマンドを呼び出すことができます。Refresh
ヘッダーは、指定された秒数後にブラウザにページを自動的に更新するよう指示します:
php artisan down --refresh=15
retry
オプションをdown
コマンドに提供することもでき、これはRetry-After
HTTPヘッダーの値として設定されますが、ブラウザは一般的にこのヘッダーを無視します:
php artisan down --retry=60
メンテナンスモードのバイパス
秘密のトークンを使用してメンテナンスモードをバイパスできるようにするには、secret
オプションを使用してメンテナンスモードバイパストークンを指定します:
php artisan down --secret="1630542a-246b-4b66-afa1-dd72a4c43515"
アプリケーションをメンテナンスモードにした後、このトークンに一致するアプリケーションURLに移動すると、Laravelはブラウザにメンテナンスモードバイパスクッキーを発行します:
https://example.com/1630542a-246b-4b66-afa1-dd72a4c43515
Laravelに秘密のトークンを生成させたい場合は、with-secret
オプションを使用できます。アプリケーションがメンテナンスモードに入ると、秘密が表示されます:
php artisan down --with-secret
この隠しルートにアクセスすると、アプリケーションの/
ルートにリダイレクトされます。クッキーがブラウザに発行されると、メンテナンスモードでないかのようにアプリケーションを通常通りブラウズできます。
メンテナンスモードの秘密は、通常、英数字とオプションでダッシュで構成されるべきです。?
や&
のように、URLに特別な意味を持つ文字を使用することは避けるべきです。
複数サーバーでのメンテナンスモード
デフォルトでは、Laravelはファイルベースのシステムを使用してアプリケーションがメンテナンスモードにあるかどうかを判断します。これは、メンテナンスモードを有効にするには、アプリケーションをホストしている各サーバーでphp artisan down
コマンドを実行する必要があることを意味します。
代わりに、Laravelはメンテナンスモードを処理するためのキャッシュベースの方法を提供します。この方法では、1つのサーバーでphp artisan down
コマンドを実行するだけで済みます。このアプローチを使用するには、アプリケーションのconfig/app.php
ファイル内の「ドライバー」設定をcache
に変更します。次に、すべてのサーバーからアクセス可能なキャッシュstore
を選択します。これにより、メンテナンスモードの状態がすべてのサーバーで一貫して維持されます:
'maintenance' => [
'driver' => 'cache',
'store' => 'database',
],
メンテナンスモードビューの事前レンダリング
デプロイメント中にphp artisan down
コマンドを使用すると、Composerの依存関係や他のインフラストラクチャコンポーネントが更新されている間に、ユーザーがアプリケーションにアクセスするとエラーが発生することがあります。これは、Laravelフレームワークの重要な部分が起動し、アプリケーションがメンテナンスモードであることを判断し、テンプレートエンジンを使用してメンテナンスモードビューをレンダリングする必要があるためです。
このため、Laravelはリクエストサイクルの最初に返されるメンテナンスモードビューを事前レンダリングすることを許可します。このビューは、アプリケーションの依存関係が読み込まれる前にレンダリングされます。down
コマンドのrender
オプションを使用して、任意のテンプレートを事前レンダリングできます:
php artisan down --render="errors::503"
メンテナンスモードリクエストのリダイレクト
メンテナンスモード中、LaravelはユーザーがアクセスしようとするすべてのアプリケーションURLに対してメンテナンスモードビューを表示します。必要に応じて、Laravelにすべてのリクエストを特定のURLにリダイレクトするよう指示できます。これは、redirect
オプションを使用して実現できます。たとえば、すべてのリクエストを/
URIにリダイレクトしたい場合があります:
php artisan down --redirect=/
メンテナンスモードの無効化
メンテナンスモードを無効にするには、up
コマンドを使用します:
php artisan up
resources/views/errors/503.blade.php
で独自のテンプレートを定義することで、デフォルトのメンテナンスモードテンプレートをカスタマイズできます。
メンテナンスモードとキュー
アプリケーションがメンテナンスモードのとき、キューされたジョブは処理されません。アプリケーションがメンテナンスモードから出ると、ジョブは通常通り処理され続けます。
メンテナンスモードの代替手段
メンテナンスモードはアプリケーションに数秒のダウンタイムを必要とするため、Laravel VaporやEnvoyerのような代替手段を検討して、Laravelでゼロダウンタイムデプロイを実現してください。