設定
はじめに
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
ファイルを引き続き含めて更新することをお勧めします。例の構成ファイルにプレースホルダー値を配置することで、チームの他の開発者は、アプリケーションを実行するために必要な環境変数を明確に確認できます。
.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 |
スペースを含む値を持つ環境変数を定義する必要がある場合は、値を二重引用符で囲むことで定義できます
APP_NAME="My Application"
環境設定の取得
.env
ファイルにリストされているすべての変数は、アプリケーションがリクエストを受信すると、$_ENV
PHPスーパーグローバルにロードされます。ただし、構成ファイルでこれらの変数から値を取得するには、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...}
現在のアプリケーション環境検出は、サーバーレベルのAPP_ENV
環境変数を定義することでオーバーライドできます。
環境ファイルの暗号化
暗号化されていない環境ファイルは、ソース管理に保存しないでください。ただし、Laravelでは、環境ファイルを暗号化して、アプリケーションの残りの部分とともに安全にソース管理に追加できるようにすることができます。
暗号化
環境ファイルを暗号化するには、env:encrypt
コマンドを使用できます
php artisan env:encrypt
env:encrypt
コマンドを実行すると、.env
ファイルが暗号化され、暗号化されたコンテンツが.env.encrypted
ファイルに配置されます。復号化キーはコマンドの出力に表示され、安全なパスワードマネージャーに保存する必要があります。独自の暗号化キーを提供したい場合は、コマンドを呼び出すときに--key
オプションを使用できます
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
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
デプロイプロセス中にconfig:cache
コマンドを実行する場合は、設定ファイル内でのみenv
関数を呼び出していることを確認してください。設定がキャッシュされると、.env
ファイルは読み込まれなくなります。したがって、env
関数は外部のシステムレベルの環境変数のみを返します。
設定の公開
Laravelのほとんどの設定ファイルは、アプリケーションのconfig
ディレクトリに既に公開されています。ただし、cors.php
やview.php
のような特定の設定ファイルは、ほとんどのアプリケーションでは変更する必要がないため、デフォルトでは公開されていません。
ただし、デフォルトで公開されていない設定ファイルを公開するには、config:publish
Artisanコマンドを使用できます。
php artisan config:publish php artisan config:publish --all
デバッグモード
config/app.php
設定ファイルにあるdebug
オプションは、エラーに関する情報を実際にユーザーにどれだけ表示するかを決定します。デフォルトでは、このオプションは.env
ファイルに保存されているAPP_DEBUG
環境変数の値を尊重するように設定されています。
ローカル開発では、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がブラウザに発行されると、メンテナンスモードではない場合と同様に、通常どおりにアプリケーションを閲覧できるようになります。
メンテナンスモードの秘密トークンは、通常、英数字と、必要に応じてダッシュで構成する必要があります。?
や&
のような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
resources/views/errors/503.blade.php
に独自のテンプレートを定義することで、デフォルトのメンテナンスモードテンプレートをカスタマイズできます。
メンテナンスモードとキュー
アプリケーションがメンテナンスモードの場合、キューに入ったジョブは処理されません。ジョブは、アプリケーションがメンテナンスモードから解除されると、通常どおり処理され続けます。
メンテナンスモードの代替手段
メンテナンスモードではアプリケーションが数秒間停止する必要があるため、Laravel VaporやEnvoyerのような代替手段を検討して、Laravelでダウンタイムゼロのデプロイを実現してください。