九保すこひ@フリーランスエンジニア|累計300万PVのブログ運営中
さてさて、前回の永久保存版!Laravel・Cacheの使い方大全ではキャッシュ方式の設定に.env
を使って切り替えをしてみました。
ただ、この.env
ファイル。よく使うとは言っても「じゃあ、全項目の意味を知ってる??」と聞かれると結構知らない項目もあったりするのではないでしょうか。
そこで!
今回は、Laravelの設定の基本となる.env
が一体どんな意味をもっているのかをまとめることにしました。今回も保存版的な位置づけで記事を書いていますので、ぜひ備忘録として使ってください。
※実行環境はLaravel 5.7です。
目次
- 1 APP_NAME: サイト名
- 2 APP_ENV: 環境名
- 3 APP_KEY: 暗号化に使われるキー
- 4 APP_DEBUG: デバッグの表示設定
- 5 APP_URL: サイトのURL
- 6 LOG_CHANNEL: ログ情報の設定
- 7 DB_*****: データベースへの接続情報
- 8 BROADCAST_DRIVER: ブロードキャスト設定
- 9 CACHE_DRIVER: キャッシュ方式
- 10 QUEUE_CONNECTION: キュー方式
- 11 SESSION_*****: セッション関連
- 12 REDIS_*****: Redis関連
- 13 MAIL_*****: メール関連
- 14 PUSHER_*****, MIX_PUSHER_*****: PUSHER設定
- 15 .envには初期状態で書かれていない項目
- 15.1 Amazon SQSの設定
- 15.2 Amazon SESの設定
- 15.3 mailgunの設定
- 15.4 SparkPostの設定
- 15.5 stripeの設定
- 15.6 memcachedの設定
- 15.7 キャッシュ名のプリフィックス
- 15.8 Unixドメインソケットの設定
- 15.9 AWSの設定
- 15.10 暗号計算する数値
- 15.11 slackのウェブフック
- 15.12 メール送信元と送信者名
- 15.13 セッションDBの設定
- 15.14 セッション・キャッシュ・ストア
- 15.15 セッション名のプリフィックス
- 15.16 Cookieのドメイン名
- 15.17 Cookieのセキュア設定
- 15.18 アセットURL
- 16 ダウンロード
- 17 おわりに
APP_NAME: サイト名
APP_NAME
は開発しているサイトの名前ですが、この項目は以下のようにconfig()
を使ったサイト名の取得に影響があります。
echo config('app.name'); // APP_NAMEが反映される
また、実はこのAPP_NAME
はキャッシュ・キーやセッション名として利用されています。
これは、例えばキャッシュ・システムにapc
やmemcached
を使う場合、他のサイトでも同じ名前のキーを使ってしまうと、一体どちらで使うべきデータが分からなくなってしまうからです。(つまり、共通のキャッシュ・システムを共有するからです)
そのため、一意なキーを作成するためにサイト名が利用されています。
ちなみにAPP_NAME
が利用されているファイルは、以下の2つです。
- /config/cache.php
- /config/session.php
APP_ENV: 環境名
開発しているサイトの実行環境を指定する項目です。
そのため、指定する項目としては以下のようなものが挙げられるでしょう。
- local ・・・ ローカル(開発)
- stating ・・・ ステージング
- production ・・・ 本番
また、APP_ENV
で指定した環境は以下のようなコードに影響します。
$env = app()->environment(); // localなど
if(app()->isLocal()) { echo 'ローカル環境です。'; }
そのため、開発環境だけで利用するSeeder
などで使うといいかもしれません。
APP_KEY: 暗号化に使われるキー
APP_KEY
の値は、Laravelがインストールされると各自ランダムで作成されるため、このキーは(ほぼ)完全に世界でひとつだけしか存在しないことになります。そして、このキーは暗号化に関連する以下の場面で利用されています。
encrypt()
,decrypt()
など暗号化/復号する- パスワード・リマインダーで使われるトークンをつくる
また、この.env
のキーを変更したい場合は以下のコマンドを実行すると自動的に変更することができます。
php artisan key:generate
※ ただし気をつけないといけないのは、前のキーで暗号化したデータを新しいキーでは復号することはできないということです。つまり、キャッシュされた暗号化データがある場合は特に注意が必要です。
APP_DEBUG: デバッグの表示設定
APP_DEBUG
は、プログラムを実行したときに発生するエラーを表示するかどうかを設定する場所になります。
そのため、設定する値はtrue
かfalse
になります。(デフォルトはtrue
)
実際の例を見てみましょう。まずは、
APP_DEBUG=true
の場合です。
Laravelでサイト開発をしたことがある人なら、お馴染みのページといっていいんじゃないでしょうか。このページでは詳しいエラーの内容、エラーの場所などを教えてくれるので開発には必須といっていいでしょう。
では、逆に
APP_DEBUG=false
の場合はどうなるでしょう??
今度はエラーの内容は全く表示されず、砂漠の画像が表示されました。
ちなみに、ローカル環境では常にAPP_DEBUG
はtrue
で問題ないですが、誰もがアクセスできる本番環境ではfalse
にしておくことを強くおすすめします。
なぜなら、エラー情報には不正アクセスを試みる人たちにとって有益な情報がたくさん含まれているからです。
例えば、エラー情報には以下のような情報が含まれています。
そうです。
データベースのユーザー名や、パスワードが含まれています。
また、Laravelとは関係ない話ですが、HTTPヘッダー情報に含まれる「Server情報(apacheやnginxのバージョン情報)」も消して置いた方がよりセキュリティに強いといえます。バージョンがばれると、すでに広く知られているバグを利用して不正アクセスされやすくなるためです。
APP_URL: サイトのURL
APP_URL
は以下のようにサイトのURLに関連する部分で利用されています。
echo config('app.url'); // トップページのURL
echo config('filesystems.disks.public.url'); // *****/storage
なお、ヘルパー関数のurl()
はAPP_URL
の情報を使っていそうですが、実際には$_SERVER['host']
の情報が使われています。
LOG_CHANNEL: ログ情報の設定
Laravelのログ設定は、stack
となっていて、複数のログが有効になるようになっています。(ただし、stack
の中身を設定する部分では、基本となるsingle
がひとつだけ指定されているので、実際にはデフォルトで利用されるログはひとつとなっています)
また、LOG_CHANNEL
で指定できるのは、以下の8タイプになっています。
- stack ・・・ 複数のログを設定可能にする(デフォルト値)
- single ・・・ ひとつのファイルにログ情報を追加して書き込んでいく形式
- daily ・・・ 日ごとにログファイルを作成する形式。
- slack ・・・ slackにログ出力する形式。Laravel 5.6での解説はこちら
- monolog ・・・ Monologを使ったログ方式
- syslog ・・・ システムのログに出力 ※
- errorlog ・・・ システムのログに出力 ※
- custom ・・・ 独自のログ出力
※ 例えば、nginx
の場合だと/var/log/nginx/access.log
と/var/log/nginx/error.log
DB_*****: データベースへの接続情報
データベースへの接続情報は以下の6つです。
- DB_CONNECTION
- DB_HOST
- DB_PORT
- DB_DATABASE
- DB_USERNAME
- DB_PASSWORD
ひとつずつ見ていきましょう。
DB_CONNECTION
利用するデータベースの種類を指定します。この情報は、config/database.php
のconnections
内から選ぶことになり、デフォルトでは以下の4つが利用可能になっています。
- mysql ・・・ MySQL
- pgsql ・・・ PostgreSQL
- sqlite ・・・ SQLite
- sqlsrv ・・・ SQL Server
※ もしMongoDB
を使いたい場合はlaravel-mongodbというパッケージを利用するといいでしょう。
DB_HOST
データベースのホストです。通常はローカルの127.0.0.1
になることが多いでしょう。またローカルホストの場合は、localhost
としても接続できます。
DB_PORT
データベースが利用するポート番号です。
MySQLの場合は通常3306
が利用されます。
DB_DATABASE
利用するデータベース名です。
例えば、laravel57
などのようにサイト名に関連した名前が多くなるでしょう。
DB_USERNAME
利用するデータベース名にアクセスするユーザー名です。
ローカル環境ではroot
などが多いのかもしれません。
DB_PASSWORD
利用するデータベース名にアクセスするパスワードです。
※ ちなみに、DB_CONNECTION
以外の設定が利用されるのは、MySQL
、PostgreSQL
、SQL Server
の3つです。(SQLiteはデータをファイルで管理するため必要ありません)
BROADCAST_DRIVER: ブロードキャスト設定
ブロードキャスト(Laravelのイベントをブラウザに通知する機能、要はチャットを想像してください)の種類を設定する項目です。
利用できる種類は、以下の4つです。
- pusher ・・・ Pusherを利用する場合
- redis
- log
- null
CACHE_DRIVER: キャッシュ方式
利用するキャッシュの方式を設定する項目です。
詳しくは、永久保存版!Laravel・Cacheの使い方大全の「様々なキャッシュ方式を使いたい」をご覧ください。
QUEUE_CONNECTION: キュー方式
利用するキューの方式を設定する項目です。
設定できるのは、以下の5つです。
- sync
- database
- beanstalkd ・・・ Beanstalkを利用する方式
- sqs ・・・ Amazon SQSを利用する方式
- redis
SESSION_*****: セッション関連
SESSION_DRIVER
利用するセッションの方式を設定する項目です。指定できるのは以下の7つ。
- file
- cookie
- database
- apc
- memcached
- redis
- array
SESSION_LIFETIME
セッションの継続時間(分)です。
デフォルトでは120分(=2時間)になっています。
ただし、php.ini
のsession.gc_maxlifetime
やsession.cookie_lifetime
の値がこれよりも短い場合は、そちらが優先されます注意してください。
REDIS_*****: Redis関連
REDIS_HOST, REDIS_PASSWORD, REDIS_PORT
redis
を利用する場合の接続情報です。
MAIL_*****: メール関連
MAIL_DRIVER
利用するメール送信方式を指定する項目です。
指定できるのは以下の8つです。
- smtp
- sendmail ・・・ Laravel 5.0までは
mail
もOK。 - mailgun ・・・ mailgunを利用する方式
- mandrill ・・・ mandrillを利用する方式 ※1
- ses ・・・ Amazon SESを利用する方式
- sparkpost ・・・ SparkPostを利用する方式
- log ・・・ 実際にはメール送信せずログファイルに出力する方式
- array
※1 mandrill
はLaravel 5.3からは公式ドキュメントから削除されていますが、config/mail.php
では設定が可能になっています。
MAIL_HOST, MAIL_PORT, MAIL_USERNAME, MAIL_PASSWORD
メールサーバーへの接続情報です。
MAIL_ENCRYPTION
tsl
やssl
などのメールを暗号化するプロトコルを指定します。
PUSHER_*****, MIX_PUSHER_*****: PUSHER設定
Pusherの接続情報を設定する項目です。
.envには初期状態で書かれていない項目
Amazon SQSの設定
SQS_KEY=*** SQS_SECRET=*** SQS_PREFIX=*** SQS_QUEUE=*** SQS_REGION=***
Amazon SQSの設定をする項目で、config/queue.php
の中に記述されています。
Amazon SESの設定
SES_KEY=*** SES_SECRET=*** SES_REGION=***
Amazon SESの設定をする項目で、config/services.php
の中に記述されています。
mailgunの設定
MAILGUN_DOMAIN=*** MAILGUN_SECRET=***
mailgunの設定項目で、config/services.php
の中で利用されています。
SparkPostの設定
SPARKPOST_SECRET=***
SparkPostの設定項目で、config/services.php
の中に記述されています。
stripeの設定
STRIPE_KEY=*** STRIPE_SECRET=***
stripe(オンライン決済サービス)の設定項目で、config/services.php
の中に記述されています。
memcachedの設定
MEMCACHED_PERSISTENT_ID=*** MEMCACHED_USERNAME=*** MEMCACHED_PASSWORD=*** MEMCACHED_HOST=*** MEMCACHED_PORT=***
memcached
の設定項目で、config/cache.php
内で利用されています。
キャッシュ名のプリフィックス
CACHE_PREFIX=***
キャッシュ名が重複しないためのプリフィックス。
詳しくは、APP_NAMEを参照してください。
Unixドメインソケットの設定
DB_SOCKET=***
MySQLのUnixドメインソケットを利用する場合に使う設定で、config/database.php
で利用されています。
AWSの設定
AWS_ACCESS_KEY_ID=*** AWS_SECRET_ACCESS_KEY=*** AWS_DEFAULT_REGION=*** AWS_BUCKET=*** AWS_URL=***
ファイルシステムで、s3
を利用する場合に使われる接続情報です。
暗号計算する数値
BCRYPT_ROUNDS=***
PHP標準関数のpassword_hash()
のオプション値cost
を指定する数値です。つまり、この数値が多ければより強力な暗号が作成できますが、その分コンピュータへの負荷が大きくなります。
slackのウェブフック
LOG_SLACK_WEBHOOK_URL=***
slackのウェブフックURLを指定する項目です。
メール送信元と送信者名
MAIL_FROM_ADDRESS=*** MAIL_FROM_NAME=***
この値を指定しておくと、メール送信の際にfrom()
を指定する必要がなくなります。
セッションDBの設定
SESSION_CONNECTION=***
セッション方式にdatabase
かredis
を指定した場合に使えるコネクションのためのパラメータです。
セッション・キャッシュ・ストア
SESSION_STORE=***
セッション方式にapc
かmemcached
を指定した場合に使えるキャッシュ・ストアのためのパラメータです。
セッション名のプリフィックス
SESSION_COOKIE=***
Cookieの名前が重複しないためのプリフィックス。
詳しくは、APP_NAMEを参照してください。
Cookieのドメイン名
SESSION_DOMAIN=***
Cookieが有効になるドメイン名を指定する項目です。
Cookieのセキュア設定
SESSION_SECURE_COOKIE=***
この設定をtrue
にした場合、HTTPS
で接続している場合のみセッションCookieが送信されます。デフォルトはfalse
アセットURL
Laravel 5.7.14から使えるようになりました。
ASSET_URL=https://cdn.example.com
上のように設定しasset()
を使うと、そのアドレスを基本とするURLをつくることができます。
echo asset('xxx.js'); // https://cdn.example.com/xxx.js
ダウンロード
今回紹介した.envの全項目を書き込んだ.env.full
を以下からダウンロードすることができます。ぜひサイト開発に役立ててください。
※ただし、APP_KEY
はセキュアな情報なので省略しています。
おわりに
今回のまとめで特に便利だと感じたのは、メール送信情報をデフォルト指定できるMAIL_FROM_ADDRESS
とMAIL_FROM_NAME
ですね。
個人的にこの指定方法ができることを知らなかったので、いちいちメール送信部分で、
from('test@example.com', '送信者')
と記述していました。
明示的に誰に送信できるかが分かりやすいので、一概にこの方法が悪いわけではないですが、コードをより少なくするためには有効であることは間違いないので、これからはこのテクニックを活用していこうと思います。
みなさんも何かいいテクニックが見つかれば光栄です!
ではでは。