Table of Contents
チームLIGHTの紹介
チームLIGHTは現在エンジニア5名、デザイナー2名、インターン1名の合計8人のチームです。 チームLIGHTの雑記ブログもありますので、よかったらそちらもそうぞ! こちらは技術的な内容ではなく、メンバーの日常のことをつらつらと書いています。
  
また、不定期でLIGHT@NOONという配信イベントも開催しています。
Laravel輪読会の紹介
チームLIGHTでは、週に1回1時間、Laravel輪読会を実施しています。
輪読会で読む本はこちらの本です!

2021/6/1に発売されたばかりの本で、Laravel8にも対応しています。
ボリュームもたっぷりな上に、Laravelの設計やテストコードに関する内容も充実しているので、オススメです!
本題
今回読んだページはP.56 ~ P.63 の「2-1 ライフサイクル」についてです。
ライフサイクルについて
Laravelアプリケーションの実行の流れは
- 
サーバー
 - 
エントリポイント
 - 
HTTPカーネル
 - 
ルータ
 - 
ミドルウェア
 - 
コントローラ
 
という順番で実行されます。
それぞれの動作に関して、書籍を読みながら、実際にLaravelのコードを読み進めました。
チームで話したこと
public/index.phpからLaravelの世界ははじまる
- public/index.phpからLaravelが起動し、レスポンスを送り、終了するまでの処理が発生する。
 
P.60に関して、Routeのコントローラーだけ書くと、__invokeは発火する。それしかやらない書き方もある。
- 
routesの書き方として、「TaskController」のように、メソッドを指定しない場合、__invokeが発火する。
 - 
Controller内にメソッドを書かずに__invokeだけで実装する事例もある(Fusicではあまり聞かない)
 
P.62 コントローラでメソッドインジェクションは微妙かも?__construct()でnewしよう!
use App\Services\TaskService;
class TaskController extends Controller
{
    public function getTask(Request $request, TaskService $service)
    {
        $tasks = $service->findTasks($request->get('is_done));
    }
}
上記のように、「TaskService」をメソッドインジェクションでもってくるよりは
use App\Services\TaskService;
class TaskController extends Controller
{
    private TaskService $service;
    public function __construct(TaskService $service = null)
    {
        $this->service = $service ?? new TaskService();
    }
    public function getTask(Request $request)
    {
        $tasks = $this->service->findTasks($request->get('is_done));
    }
}
の書き方の方が、各メソッドがごちゃごちゃしなくてよさそう。
routesの書き方、配列か@か問題
- Fusic内では@で書く人が圧倒的に多いイメージ。
 
routesの書き方、Appから書くと、変なとこから持ってきてる感。Controller名だけでよくない?
Route::post('/tasks', 'App\Http\Controllers\AddTaskAction');
に関して、「App\Http\Controllers」は余計な記述かも。
特殊なPATHの際に明示するだけでもよさそう。
routesでクロージャーを使うと、routeのキャッシュが効かなくなる
Routeの以下のような書き方。
Route::get('/hello', function (Request $request) {
  return view('hello');
})
- この書き方をすると、routeのキャッシュが効かなくなってしまう。
 - php artisan route:cacheを実行すると、以下のエラーが発生する。
 
Unable to prepare route \[...] for serialization. Uses Closure.
- 大規模アプリだとデプロイの度にroute:cacheした方がいいので、基本はクロージャーは使わない。
 
P.59に関して、RequestHandledをListenしたい時ってどういう時だろう?
- RequestHandled自体は何もしてなさそう
 - 何かしらイベントが必要な時に使うのかも?
 
今日はこんな感じの輪読会でした!
次回はサービスコンテナをやります!
お楽しみに!