Laravel8のScaffoldはLaravel Jetstreamらしい

Laravel Jetstreamがそうらしい。

  • LivewireかInertiaの選択肢があるが、Inertiaでよさそう。
    • InertiaはVueだそうなので。
    • LivewireはLaravel独自でこちらのほうが楽そうなのだが、Laravel8にロックインされるリスクを考えると手を出しづらい。
    • チーム機能なるものは今回不要ということでオプションもつけず。

install コマンドは下記。

cd /var/www/html/membership
composer require laravel/jetstream 
php artisan jetstream:install inertia
npm install
npm run dev
php artisan migrate

というわけでInertiaを軽く試してみたが、今回のやりたかったことに合わない。没。

  • もともと小さなサンプルプログラムなのでFrontendとBackendは一緒にする気だった。
  • Scaffold程度のために仕様が変わってしまうのはいくらなんでも困る。
  • 超リッチな追加フレームワークという印象。単にスキーマからCRUDのためのコードのたたき台を自動で生成するツールが欲しかっただけなので(C#のScaffoldみたいな)、これはちょっと。
  • そして”既存のプロジェクトに適用してはいけません”の注意書き通り、プロジェクト内のコードが大量に書き換えあるいは新規追加され大変なことに。いやgitで管理してるから戻せたけども。
    • これは本番で採用するならよっぽど注意しないとまずい印象。そして使わないと決めたら最後まで使わなくなることを理解しないといけない。

というわけで前言撤回、Livewireを使うことにした。こちらはこちらでやはり大量のファイルが追加される。

composer create-project laravel/laravel membership
cd membership
composer require laravel/jetstream
php artisan jetstream:install livewire
npm install
npm run dev

あとロックインがやはり怖い。フレームワークをアップグレードすることはそう頻繁ではないとはいえ。

Laravel: トランザクション境界

※ まだ模索中

  • やはりUseCasesの中に置き、ここでDB::beginTransaction();→DB::commit();するしかなさそう。
    • リクエスト単位でのコネクションの維持が保たれているはず。できていなかったらコネクタを引き回す必要がある。
  • UseCasesに置くとDBクラスがUseCasesの中に紛れ込み、さりとてRepositoryの中に置くとロジックがRepositoryの中に入り込む。DBがロジックと保存の両方の仕組みを持つから仕方ないのだが、トランザクションは本当にレイヤアーキテクチャ泣かせ。

Laravel: DI

使い方

  • LaravelのDIコンテナはサービスコンテナという名前。使い方は下記の通り。

    1. サービスプロバイダを作る(例: php artisan make:provider CommentServiceProvider )。作ったファイルはApp/Providers以下に保存される。
    2. サービスプロバイダ内のregister()に$this->app->bind('インターフェイス名', 呼ぶオブジェクト);のように書いて登録。
    3. config/app.php内のプロパティ:providersに作成したサービスプロバイダを追記する。
    4. これでコンストラクタインジェクションが動作する。
  • ユニットテストのときにMockに切り替えたいときは、テストコードの中で指定するらしい。

    • つまり、設定ファイルを複数作って、テストのときはテスト用の設定ファイルを読んで、みたいなつくりではないみたい。

詳細はマニュアル参照

PHPを用いる際のIDE(2021年版)

結論

IDEVisual Studio Code + PHP Intelephenseを利用することにした。

理由

  • 安定して動く上に便利。しかも軽い。
    • ディレクトリを指定するだけで開発を始めることができるのは素敵。
      • しかもF12で参照したりある程度補完もしてくれる。
  • Visual Studioと似た感覚で使えるのも個人的にGood。
  • 使っている人が多く、情報が見つかりやすいのもうれしい点。

Laravelのローカル開発環境構築(windows10)の方針

結論

動作環境はVagrantとVirtual BOXで構築。

Linux(Amazon Linux2)を仮想環境として立ち上げる。開発はWindows側で行い、rsyncwinscpなどでWindowsLinuxの一方通行でファイル同期をかける。これが結局安定した。

理由

  • Frontではphpだけでなくnode.jsも使う。
    • npm installで猛烈な量のライブラリをインストールすることになる。
      • windows側とVagrantのsynced_folder機能で同期させるのが厳しい。
  • 本番環境はAmazonLinux2想定。Windows10だけで環境を作ると、環境の差が理由のバグを見逃す恐れがあって困る。
  • Windows10 ProのDockerでも動くはずなのだが、実際に自分の環境で動かしてみると不安定で断念。
  • シェルでログインして細々した作業を行える仮想環境がなにかと楽。