「PHPフレームワーク Laravel Webアプリケーション開発」のご紹介

こんにちは、 id:nunulk です。

いま話題の「PHPフレームワーク Laravel Webアプリケーション開発」が SCOUTER 社に置いてあったので、ざっと読ませていただきました。

f:id:nunulk:20181014111718j:plain

主に「Chapter 3 アプリケーションアーキテクチャ」や「Chapter 7 処理の分離」の章について読んだ感想を書こうと思います。

全体の感想

まず、全体の感想ですが、 Laravel 自体の解説については、公式ドキュメントが充実しているのと、日本語訳も追従が早いので、個人的には書籍の必要性はあまり感じてはいませんでした。

ただ、本書は、JWT を使った認証だったり、Elasticsearch を使った全文検索の例だったりが載っていて、Laravel だけにとどまらず、Laravel を使ってウェブアプリケーションをつくる上で参考になる情報がたくさん掲載されているので、公式ドキュメントだけでは得られないものが得られるんじゃないかと思います。

アプリケーションアーキテクチャについて

ウェブサービスや業務システムでは、チュートリアルや公式ドキュメントに載っているような単純なサンプルコードでは単純すぎて参考にならなくなってきますが、本書ではアプリケーションアーキテクチャについての記述が多くあり、実際に業務で書くような複雑なアプリケーションにも適用可能なアイデアが手に入るんじゃないかと思います。

本書に載っているアーキテクチャ関連のセクションについて、いくつか紹介します。

ADR

ADR がなにか、というのは本書を読んでいただくとして、以下の文を引用しておきます。

ADRパターンを適用すると、実際にはMVCパターンと大きな相違はなく、MVCパターンよりも、より処理の内容が具体化したように感じられる。 (略) ここで重要なことはパターン名ではなく、どのような考え方でクラスや処理グループを分割し、責務を与えることであり、「どうしたらよりよいアプリケーション設計が行えるか」です。

アプリケーションが複雑になり、依存関係が増えてくると、どんどんクラスが大きくなってきて、見通しが悪くなってきますので、こうした分割手法は知っておいて損はないと思います。

レイヤードアーキテクチャ

Laravel は素晴らしいフレームワークですが、アプリケーション独自のクラスや処理(ドメインモデル、ドメインロジック)を書く際の指針は、自分で、あるいはチームで決めないといけないので、試行錯誤が必要かと思います。

それでも、先人たちの知恵を参考に、そうした複雑さを分解して、あるいは特定のクラスに閉じ込めることで、コントロールしやすくなるので、ドメイン駆動設計を理解している著者による、本書のサンプルコードは参考になるはずです。

この章以外にも、「5-5 リポジトリパターン」のところに詳しく載っているリファクタリングのところとか、既存のアプリケーションにリポジトリパターンを適用するようなケースで参考になるんじゃないでしょうか。

実用的な非同期処理の例

Laravel には、キューを使った非同期処理を行う仕組みがありますが、実用的な例、というのはインターネットではなかなか見かけないので、実際の使い方に不安を持っている方も多いんじゃないかと思っているんですが、本書では、supervisor の設定や、ElasticsearchClient の使い方も載っていて、実用的と思います。

本書でアプリケーションアーキテクチャについておおまかに理解したら、Chapter 3 の章末に載っている参考文献を片っ端から読んでみるのもいいかもしれません。

おわりに

全体で 500 ページを超える本ですが、Chapter 2 以降は一度目を通すのをおすすめします。どの章にも、公式ドキュメントを読んだだけでは得られない、へーこんな使い方もできるのかーという発見があるんじゃないかと思います。

SCOUTER では、不定期に「ワイワイLaravel語る会」というのを開催していますので、本書を読んだ感想とか、本書の記載を元にした議論とか、Laraveller のみなさんと語り合えたらうれしいです。

詳しくは Connpass のグループを見てみてください。

techscouter.connpass.com