Fusic Tech Blog

Fusion of Society, IT and Culture

Laravelのアプリケーションアーキテクチャ #Laravel輪読会 Vol.4
2021/09/16

Laravelのアプリケーションアーキテクチャ #Laravel輪読会 Vol.4

こんにちは、チーム LIGHT の坂井です。生育適温が 32~35℃ な人間なので、このところ日中でも寒いな〜しんどいな〜と泣いています。泣いていたら大家さんが畑のアスパラガスをくれました。うれしいです。でも日がな一日自宅にこもってキーボードを叩いているらしいのを見て「今日もお勉強?」と訊くのはどうかやめていただきたく。いっとき「お仕事?」になったんだけどなあ……。

さて、LIGHT の Laravel 輪読会記事も 4 本目になりました。過去の記事は以下からどうぞ。

今回のお題はアプリケーションアーキテクチャです。

チーム LIGHT の紹介

チーム LIGHT は現在エンジニア 5 名、デザイナー 2 名、インターン 1 名の合計8人のチームです。 雑記ブログもありますので、よかったらそちらもそうぞ! こちらは技術的な内容ではなく、メンバーの日常のことをつらつらと書いています。

LIGHTブログ

また、不定期で LIGHT@NOON という配信イベントも開催しています。

LIGHT Youtubeチャンネル

Laravel輪読会の紹介

チーム LIGHT では、週に 1 回 1 時間、Laravel 輪読会を実施しています。

輪読会で読む本はこちらの本です!

PHPフレームワークLaravel Webアプリケーション開発 バージョン8.x対応

PHPフレームワークLaravel Webアプリケーション開発 バージョン8.x対応

2021/6/1 に発売されたばかりの本で、Laravel8 にも対応しています。

ボリュームもたっぷりな上に、Laravel の設計やテストコードに関する内容も充実しているので、オススメです!

本題

今回読んだページは P.96 ~ P.118 の「Chapter.3 アプリケーションアーキテクチャ」についてです。各節のあらまし、そして読み合わせの際に話題に挙がったことを以下に並べます。

MVC と ADR について

3-1-1 MVC (Model View Controller)

いわゆる MVC とはなにか、という話。Laravel の各機能と MVC の対応の解説。モデルの解説がやや手厚く、「Eloquent モデルに DB 操作とビジネスロジックを詰め込むとファットモデルになってしまう」「それをコントローラでやるとファットコントローラ」と軽く念押しがあります。トランザクションスクリプトパターンとドメインモデルパターンにも言及がありますが、用語と概要の紹介程度に留めてあります。

3-1-2 ADR (Action Domain Responder)

MVC を踏まえて、ADR とはなんぞやという話。MVC パターンで実装して依存が増えすぎたコントローラを ADR で書き直す例などを用いて具体的に説明されています。

  • 1 コントローラ 1 アクション。アクションクラスは Controller クラスを継承して __invoke() で実装する
  • ドメインはだいたいモデルと同じ
  • MVC のコントローラにはプレゼンテーションロジックが混ざってしまうが、それを排してレスポンスを返すことに集中するものがレスポンダ

実装クラス数は増えるが、分割により各クラスの責務が明確になることがうれしいパターンである、とされています。この項のまとめとしては「様々な設計パターンを知って、そのとき最適なものを選べるようになりましょう」というところでした。

チームで話したこと

  • Responder について

    • ビジネスロジックが入る余地が生まれてしまうかも? 挙げられているコード例にも、返すレスポンスの出し分け if 文がある。
    • view は Controller で返してもいいのでは?
  • ADR、Eloquent を活用してない件について

    • 将来的なデータアクセス方法の変更等を見据え、データアクセス層で取得したデータを array 等の PHP における一般的な型で返却すること自体は理解できる。実際にこれを選択できるチームは少なそう。
    • こうなると Eloquent をどこに置くか難しい。
  • 初学者がこの章を読むとどう感じるのか?

    • ビジネスロジックの混入による Fat Controller, Fat Model は避けるべき──ということが少しでも伝われば、初学者のレベルアップに繋がりそう。

アーキテクチャへの入口

3-2-1 フレームワークとアーキテクチャ設計

フレームワークを使うからといって設計をしなくていいということはないよ、適切な設計パターンを導入しましょうという話。

3-2-2 アーキテクチャ設計のポイント

  • 規模に応じた設計をしましょう
  • 機能要件と非機能要件について、その実装コードの分割の必要性

3-2-3 レイヤードアーキテクチャ

レイヤードアーキテクチャの さわり を解説。ビジネスロジックのサービスクラスへの分離、リポジトリ層の導入などがコード例とともに解説されています。コード例込みで 5 ページと、本当に概要だけです。

3-2-4 レイヤードアーキテクチャの一歩先の世界

ここまでの内容をもとにドメイン駆動設計について学びを深めることが推奨されています。参考文献の紹介がみっちり豊富。

チームで話したこと

  • 短く簡潔にまとめてあってわかりやすい!(ベテラン勢の意見)
  • 規模の大きいアプリケーションに触れた経験がまだないので、全体的に理解するのが難しかった(新卒の意見)
  • 本当にアーキテクチャの入り口って感じで、ページ数はかなり少ない。入り口から更に入っていきたい人は(Laravel 関係ないけど)参考文献読んでね〜というスタンスみたい。

    • これだけを読んで「じゃあ実践してみよう」となったら絶対に火傷する。あくまで前項と合わせて 20 ページなりの内容しかなく、目次程度に扱うべき。
    • そもそもここでレイヤ化を持ち出したのは「以降でレイヤ化を用いたパターンを紹介するから」とあるので、読み進めていけばいろいろわかるかもしれない。

具体的に思想がどうこうというより、今後 Laravel の話をしていく上で念頭に置いておいてほしいことをざらっと流して準備工事をする章、という印象でした。これ単体で読むものではありません(当たり前ですが)。

というわけで、チーム LIGHT の Laravel 勉強会はまだまだ続きます。次回はリクエストハンドリングなどの予定です。

sakai

sakai

しがない PHPer です。