Closed6

Laravel9+React+TypeScript+Inertia.jsでのSPA開発

shun57shun57

Github

https://github.com/shun57/collect-rent

システム構成

仮想環境

  • Docker

ミドルウェア

  • PHP8.0
  • Laravel9
  • MySQL8
  • Nginx1.20
  • React17
  • Inertia

Laravel Breezeを利用

https://readouble.com/laravel/9.x/ja/starter-kits.html

  • React
  • Tailwind CSS => MaterialUIと悩んだがBootstrapっぽくて簡単そうだったので選択。
  • Inertia.js

Intertia.js

API構築なしでSPAが作れる。
APIと分ける説と悩んだが、今後フロントとバックを変えることもないと思う、かつ使ってみたいという理由で選択。
https://inertiajs.com/

Laravel開発環境の整備

Mac

Docker上

shun57shun57

フロントエンドの設定

Typescriptの導入

  • js配下のjsファイルを全てtsxに修正し、型エラーを修正する

参考

Storybookの導入

  • そのまま導入すると下記パッケージの脆弱性のエラーが発生するため、resolutionsで解決
  • npm-force-resolutionsを入れる
  "resolutions": {
    "trim": "0.0.3",
    "trim-newlines": "3.4.0",
    "glob-parent": "5.1.2",
    "immer": "9.0.6"
  }

StorybookにTailWindCSSを適用させる

  • tsconfig-paths-webpack-pluginを導入して設定を追加する

参考

shun57shun57

Laravelのアークテクチャをどうするか?

候補

結論

mpyw さんがおすすめしている「なんちゃってクリーンアーキテクチャ」を採用する。
クリーンアーキテクチャはオーバースペック、オニオンアーキテクチャもEloquentを使えないため。
ただのMVCだと経験上もファットモデルorサービスになり、チームでコードがぐちゃぐちゃになる可能性が高いので見送り。
DDDについてもう少し理解を深めたらオニオンアーキテクチャも使ってみたい。

参考

https://www.twilio.com/blog/repository-pattern-in-laravel-application-jp

https://www.youtube.com/watch?v=80NeuPXs2J0&t=1s

このスクラップは2022/11/29にクローズされました