※前回の記事は以下です
概要
- 日本語訳された公式ドキュメントに沿って実践していきます
- 今回は [準備]編
- [インストール] は割愛
準備 > 設定
環境設定
-
ルートディレクトリにある
.env.example
ファイルに環境周りの設定を書きましょう-
ソース管理に含めてもよい
-
.env
ファイルはソース管理ファイルに含めない- こちらは環境により内容を変更しましょう
- サーバ内の環境変数として各変数を定義してもよい。最終的には環境変数で上書きされるとのこと。
- docker で動かす場合には環境変数を注入する仕組みが必要
-
-
.env
ファイル内に定義された変数の値はenv()
関数を通じて取得できるroot@168e958bdfed:/var/www/html/backend# php artisan tinker # REPL コマンド Psy Shell v0.9.12 (PHP 7.4.15 — cli) by Justin Hileman >>> env("APP_ENV", "hogehoge"); => "local" >>> App::environment(); => "local"
-
デバッグの際に値を非表示にしたい変数を指定できる(ブラックリスト方式)
-
config/app.php
ファイルにキー値 "debug_blacklist" で連想配列を定義する
-
-
config/*.php
内に定義された変数はconfig()
関数を通じて値を取得できる- ファイル名とオプション名をドットでつないだキー値を引数に渡す
root@168e958bdfed:/var/www/html/backend# php artisan tinker Psy Shell v0.9.12 (PHP 7.4.15 — cli) by Justin Hileman >>> config('app.timezone'); # config/app.php にある 'timezone' => "UTC" >>> config('auth.providers'); # config/auth.php にある 'providers' => [ "users" => [ "driver" => "eloquent", "model" => "App\User", ], ]
-
本番環境にデプロイする時は
$ php artisan config:cache
を実行してconfig/*.php
ファイル群を一つにまとめましょう- そうすれば、設定内容のロードが早いらしい
-
.env
ファイルはロードされなくなるので、プログラム中にenv()
関数を使用していた場合、null が返るので注意
-
メンテナンスモード
- ステータスコード 503 で MaintenanceModeException 例外が投げられるとのこと
- アプリケーションがメンテナンスモードの間、キューされたジョブは実行されないとのこと
- アプリケーションが通常状態へ戻った時点で、ジョブは続けて処理される。便利!
-
$ php artisan down
-
$ php artisan down --message="メンテナンス中だよぉ" --retry=60
-
$ php artisan down --allow=127.0.0.1 --allow=192.168.0.0/16
- 特定の IP からのアクセスは許可
-
$ php artisan up
- メンテナンスモード解除
-
resources/views/errors/503.blade.php
を編集すればメンテナンスページを変更できる- デフォルトのメンテナンスページがどのファイルにあるのか見つからなかった。。。後で詳しく探してみる。
- [2021/03/18 追記]
- コマンドを実行した際、以下にファイルが生成される
/storage/framework/views/${key}.php
- どのようなルーティングをしてここまで辿り着くのか…
- コマンドを実行した際、以下にファイルが生成される
- [2021/03/18 追記]
- デフォルトのメンテナンスページがどのファイルにあるのか見つからなかった。。。後で詳しく探してみる。
準備 > ディレクトリ構造
イントロダクション
- models ディレクトリは意図的に存在しない
- Eloquent モデルは app ディレクトリ配下にあるけど、ロードできる場所なら好きに置いてよいとのこと
プロジェクトディレクトリ
/
├── app/
│ ...アプリケーションのほとんど全部のクラスは、このディレクトリの中に設定される
│
├── bootstrap/
│ ├── app.php
│ │ ...フレームワークの初期処理を行う
│ └── cache/
│ ...初期処理のパフォーマンスを最適化するため、フレームワークが生成するルートやサービスのキャッシュファイルが保存されるフォルダ
│
├── config/
│ ...アプリケーションの全設定ファイルが設置されている
│
├── database/
│ ...データベースのマイグレーションとモデルファクトリ、初期値設定(シーディング)を配置する
│
├── public/
│ ...アセット(画像、JavaScript、CSSなど)を配置する
│ └── index.php
│ ...アプリケーションへの全リクエストの入り口となり、オートローディングを設定する
│
├── resources/
│ ...ビューやアセットの元ファイル(LESS、SASS、JavaScript)、すべての言語ファイルを配置する
│
├── routes/
│ ...アプリケーションの全ルート定義が設置されている
│ ├── web.php
│ │ ...ステートフルなルーティングを定義する
│ ├── api.php
│ │ ...セッションではなくトークンを用いた認証を行う、ステートレスなルーティングを定義する
│ ├── console.php
│ │ ...よくわからない。。。クロージャベースの全コンソールコマンドを定義する(?)
│ └── channels.php
│ ...全ブロードキャストチャンネルを登録する場所
│
├── storage/
│ ...コンパイルされたBladeテンプレート、ファイルベースのセッション、ファイルキャッシュなど、フレームワークにより生成されるファイルが保存される
│ └── app/public/
│ ...public/storage/ がこのディレクトリを指すように、シンボリックリンクを張る必要がある
│ $ php artisan storage:link
│
├── tests/
│ ...PHPUnit のコード置き場
│
└── vendor/
...Composerによる依存パッケージが配置される
appディレクトリ
- Console、Http、Providers などのサブディレクトリを持つ
- Console
- 全Artisanコマンドで構成される
- Http
- コントローラやフィルター、リクエストにより構成される
- Artisanコマンドを使用することで、様々なサブディレクトリやクラスが生成される
-
$ php artisan list make
で作成できるもの一覧が確認できる
-
- Console
- Broadcastingディレクトリ
-
make:channel
コマンドで生成される - WebSocket で使用するらしい(?)
-
- Consoleディレクトリ
- 全カスタムArtisanコマンドで構成される
-
make:command
コマンドで生成される
- Eventsディレクトリ
- オブザーバを実装する時に使用する
- 後述の[Listenerディレクトリ]へ渡すイベントを定義する
-
make:event
またはevent:generate
コマンドで生成される
- Exceptionsディレクトリ
- アプリケーションの例外ハンドラや例外そのものを配置する
- 例外のログやレンダー方法をカスタマイズしたい場合は、このディレクトリのHandlerクラスを修正する
- Jobsディレクトリ
- キュー投入可能なジョブを置いておく場所
-
make:job
コマンドで生成される
- Listenersディレクトリ
- イベントを処理するクラスを設置する
- 前述の[Eventsディレクトリ]のイベントをオブジェクトとして受け取り、処理する
-
make:listener
またはevent:generate
コマンドで生成される
- Mailディレクトリ
- Mail::sendメソッドを使用して送られるメールを組み立てるロジックをすべて、1つのシンプルなクラスへカプセル化するために使用する
-
make:mail
コマンドで生成される
- Notificationsディレクトリ
- アプリケーションから送られる全「業務上」の通知、たとえばアプリケーションの中でイベントが発生したことを知らせるシンプルな通知などで構成する
- 非同期処理の完了通知とか?
-
make:notification
コマンドで生成される
- アプリケーションから送られる全「業務上」の通知、たとえばアプリケーションの中でイベントが発生したことを知らせるシンプルな通知などで構成する
- Policiesディレクトリ
- リソースに対し指定したアクションをユーザーが実行できるかを決定する認可ポリシークラスを設置する
-
make:policy
コマンドで生成される
- Providersディレクトリ
- サービスをコンテナと結合、イベントの登録、もしくはアプリケーションへやってくるリクエストを処理するために必要な用意をするタスクを実行するなど、アプリケーションの事前準備を行う全サービスプロバイダにより構成される
- Rulesディレクトリ
- アプリケーションで使用するバリデーションルールオブジェクトで構成する
-
make:rule
コマンドで生成される
準備 > Homestead
- vagrant で色々揃った環境を簡単に作れるよ、という話
- 今回は docker で構築したため割愛
準備 > Valet
- ベレット(従者)と読むらしい
- mac では、 brew コマンドを使って直接 Laravel 環境をインストールできるよ、という話
- mac 内を汚してしまいそうなので、これは使わないかな...
- サクッと環境構築したい時には便利だけど、そういう状況が思いつかない
準備 > デプロイ
- プロダクション環境へのデプロイプロセスの中に含めるべき Tips が紹介されてる
最適化
- プロダクション環境では、以下コマンドで Composer のオートローダを最適化した方がよいらしい
$ composer install --optimize-autoloader --no-dev
設定ローディングの最適化
- 全設定ファイルをキャッシュされる一つのファイルへまとめる
$ php artisan config:cache
ルートロードの最適化
- 一つのメソッド呼び出しへ全ルート登録をまとめるため、数百のルートを登録する場合、ルート登録のパフォーマンスを向上する
$ php artisan route:cache