設定
はじめに
Laravelフレームワークのすべての設定ファイルはconfig
ディレクトリに保存されています。各オプションにはドキュメントが付属しているため、ファイル を閲覧して利用可能なオプションに慣れてください。
これらの設定ファイルを使用すると、データベース接続情報やメールサーバー情報などの設定を行うことができます。また、アプリケーションのタイムゾーンや暗号化キーなどのさまざまなコア設定値も設定できます。
about
コマンド
Laravelはabout
アーティザンコマンドを使用して、アプリケーションの構成、ドライバー、環境の概要を表示することができます。
php artisan about
アプリケーション概要出力の特定のセクションに興味がある場合は、--only
オプションを使用してそのセクションにフィルタリングできます。
php artisan about --only=environment
また、特定の設定ファイルの値を詳細に確認するには、config:show
アーティザンコマンドを使用できます。
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
暗号を使用しますが、--cipher
オプションを使用してコマンドを呼び出す際にLaravelのencrypterでサポートされている任意の暗号を使用できます。
.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
ファイルに保存します。
--cipher
オプションをenv:decrypt
コマンドに提供することで、カスタム暗号化暗号を使用できます:
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 コマンドを使用してすべての設定ファイルを単一のファイルにキャッシュすることをお勧めします。これにより、アプリケーションのすべての設定オプションが1つのファイルに結合され、フレームワークによって迅速に読み込まれます。
通常、php artisan config:cache
コマンドを本番展開プロセスの一部として実行する必要があります。開発中には実行しないでください。なぜなら、アプリケーションの開発中に設定オプションを頻繁に変更する必要があるからです。
設定がキャッシュされると、アプリケーションの .env
ファイルはリクエストや Artisan コマンド中にフレームワークによって読み込まれなくなります。そのため、env
関数は外部のシステムレベルの環境変数のみを返すようになります。
そのため、env
関数をアプリケーションの設定(config
)ファイル内からのみ呼び出すようにしてください。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
オプションは、エラーに関する情報がユーザーに実際に表示される量を決定します。デフォルトでは、このオプションはAPP_DEBUG
環境変数の値を尊重するように設定されており、この値は.env
ファイルに保存されています。
ローカル開発では、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
down
コマンドにretry
オプションを指定することもできます。これは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
ファイルの "driver" 設定を 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 でゼロダウンタイムのデプロイを実現してください。