# PHP + Laravel のキャッチアップ Laravel のドキュメントを読む。 PHP + Laravel は 5 年くらい前に仕事で一度だけ使ったことがある程度の経験しかない。 今日は Laravel のドキュメントをざっと読んでキャッチアップし、気になった部分だけ**完全に私的な自分だけが分かれば良い**程度のメモを取る。 ## 進捗 - 有志の日本語ドキュメントページを上から読んでる - 「はじめに」から「構成概念」まで読んだ。 - 「基礎」からは興味のあるセクションだけ読んでる ## メモ - Sail は docker-compose.yml とかを編集してカスタマイズはできる? - ~~[config() で設定値を書き込めるが .env が編集される?](https://readouble.com/laravel/10.x/ja/configuration.html#:~:text=env%3Adecrypt%20%2D%2Dforce-,%E8%A8%AD%E5%AE%9A%E5%80%A4%E3%81%B8%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9,-%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%81%A9%E3%81%93)~~ - そんなわけない。メモリの値が更新されるだけ。 - Event クラスはいつ使う? - イベント駆動の処理を実装したい場合に使う - キューストレージの実体はどこにある? RDB? Redis? まさかメモリ? - [RDB, Redis, SQS などのドライバが用意されていた。便利](https://readouble.com/laravel/10.x/ja/queues.html#:~:text=%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%80%81,%E3%81%BE%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99) - Exceptions ディレクトリは見通しが悪くならない? - **TODO:** feature ではなく機能でディレクトリを分けると規模が大きくなると分かりづらくなりそう - Http のミドルウェアは標準でどれくらい用意されてる? - **TODO:** API 一覧見る - Eloquent モデルは linter や内規で縛らないと無法地帯になりそう - phpstan あたりで縛るのは難しそうな気がする - JS なら eslint の独自拡張を実装するけど phpstan でも簡単にできるんだろうか - Facade を多用すると依存関係がさっぱり分からないことになりかねない気がする - Policies ディレクトリ - **TODO:** 認可ポリシークラスでできることを調べる - Providers ディレクトリ - TODO: ここには DI コンテナに組み立ての実装が入る?(雑に言うと Factory クラス?) - Rules ディレクトリ - TODO: モデルのバリデーションとリクエストのバリデーションと汎用のバリデーションは全部このディレクトリ? - Laravel Breeze のスキャフォールディングは良さそう - TODO: 素振り - イベントのキャッシュってどういうこと? - `php artisan event:cache` - [アプリケーションでイベントディスカバリーを利用している場合は、アプリケーションのイベントとリスナのマッピングをデプロイプロセス中でキャッシュするべきです。](https://readouble.com/laravel/10.x/ja/deployment.html#:~:text=%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A7,%E3%81%B9%E3%81%8D%E3%81%A7%E3%81%99%E3%80%82) - 明示的に EventServiceProvider に登録しなかった Listener ディレクトリのリスナーを登録した状態で_メモリ_にキャッシュする、ということ?ビューのキャッシュのように事前コンパイルしたキャッシュファイルが作られてブートストラップ時に実行されてメモリに載るのかな?実際にコマンドを試す必要がある - DI - コンストラクタインジェクションだけじゃなくメソッドインジェクションもできるようだが、 Request や Form などの Laravel で標準的に利用されるクラスだけでなく、独自のカスタムクラスをインジェクションする機会は多いんだろうか?あんまり有効に機能するようには思えない - DI を使ってコンストラクタをモックするテストのボイラープレートはある? Laravel でプロジェクトをスキャフォールディングしたら生成されるのかな? - タグ付け機能がある。 マッピングにタグ付けすると、一括で DI できる。 - [サービスにタグ付けしたら、コンテナのtaggedメソッドを使用して簡単にすべてを依存解決できます。](https://readouble.com/laravel/10.x/ja/container.html#:~:text=%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AB%E3%82%BF%E3%82%B0%E4%BB%98%E3%81%91%E3%81%97%E3%81%9F%E3%82%89%E3%80%81%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%81%AEtagged%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E7%B0%A1%E5%8D%98%E3%81%AB%E3%81%99%E3%81%B9%E3%81%A6%E3%82%92%E4%BE%9D%E5%AD%98%E8%A7%A3%E6%B1%BA%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82) - オートインジェクション以外の DI を使う機会ってある? - Octane ワーカー - アプリケーションサーバーとして Swoole や RoadRunner を使えるようにするプロセス - もしかして今は nginx + php-fpm よりも使われてるのかな? - キューワーカー - Redis や SQS 用のドライバがある - アセットパイプラインで LaravelMix(webpack) ではなく Vite を使うようになってる…!モダンですね ## あとで調べる、有識者に聞く(上記のメモにも要調査事項を書いてしまったので後でマージする) - Sail って実案件で使われているの? - Laravel のフロントには nginx を建てる? - 今の PHP はビルトインサーバーで本番運用できる? - PHP の開発は実質的に PhpStorm にロックインされているという理解のままであってる?(VSCode や他のエディタだとかつては機能が不足して開発効率が悪かった) - Livewire は本番で使われてる? - Inertia は良さそうだけどこれも本番で使われてる? - ドキュメントには SSR について言及されてるけど SSG が基本? - [アプリケーションでサーバサイドレンダが必要なため、Inertiaに飛び込むことを躊躇している方も、安心してください。Inertiaはサーバサイドレンダリングサポートを提供しています。](https://readouble.com/laravel/10.x/ja/frontend.html#:~:text=%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A7%E3%82%B5%E3%83%BC%E3%83%90%E3%82%B5%E3%82%A4%E3%83%89%E3%83%AC%E3%83%B3%E3%83%80%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%AA%E3%81%9F%E3%82%81%E3%80%81Inertia%E3%81%AB%E9%A3%9B%E3%81%B3%E8%BE%BC%E3%82%80%E3%81%93%E3%81%A8%E3%82%92%E8%BA%8A%E8%BA%87%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E6%96%B9%E3%82%82%E3%80%81%E5%AE%89%E5%BF%83%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82) - PHP(Laravel) のランタイムとして RoadRunner って使われてる? - PHP8 は型が厳密になっているが、型エラーはランタイムに分かるのか? - 結局 phpstan 等で静的解析は必要ということ? - Laravel Pulse めちゃくちゃ良さそうですね