Rのつく財団入り口

ITエンジニア関連の様々な話題を書いているはずのブログです。

【感想】Laravelエキスパート養成読本

Laravelエキスパート養成読本

 2015年とちょっと古めの本ですが前回記事で別の本を読んだこともあり、再読したので感想をまとめてみます。PHPの海外産フレームワークで今熱いララベルの本です。

 大きい本屋でよく見るムックの養成読本シリーズで270ぺージ。サイズが大きいのでサンプルコードと文章が混ざっていても読みやすいです。出たのが2015年4月というタイミングがやや悪かったのか、Laravel4とLaravel5(2015年2月リリース)が両方混ざっています。

Chapter 1 Laravelをはじめよう

 おそらくLaravel経験非経験を問わずある程度経験のある開発者には、一番ここが読みたかったのではないでしょうか。Laravelの生い立ち、狙いと特徴、その後流行ってくるまでの流れ、コミュニティ、日本での状況……などが一通り、一番最初に載っています。言語やフレームワークの解説本で、こういう文化や背景まで押さえとくのは大事ですからね。書いた方の溢れるLaravelへの情熱を感じます。(笑)
 その後が約束のインストールからHello Worldまで。ディレクトリ構造はLaravel4/5両方が載っています。最後には情報源も豊富に載っています。

Chapter 2 MVCモデルが基礎からわかる

 コード例がLaravel4.2ですが、URLルーティング設定にコントローラクラス指定でなく簡単なクロージャで処理を書く、ログを出す、artisanコマンドの例、JSONを返す……までと入門編。どうしてこのstaticメソッドの書き方で動くのか、ファサード機能の説明が入っているのがよいですね。
 その後2.2でフレームワークとはなんぞや、MVC、DB準備のスキーマビルダとマイグレーション、クエリビルダーやEloquent ORM、HTMLテンプレートのBlade、コントローラ、サービスコンテナ……とMVCモデルの基本とLaravelの機能が一通り解説されます。PHPフレームワークがなぜ沢山あるのかのコラムなんかも地味に役立ちますね。
 そしてMVC構造に基づいてTodoアプリを作っていくチュートリアル一式、拡張機能のまとめなど。

Chapter 3 IoCコンテナファサード、サービスプロバイダ、Eloquent

 この辺から中の仕組みの本格的な話になってきます。

IoCコンテナ、サービスプロバイダ

 JavaのSpringなどでもお馴染みDIの話。Laravelはそれ自体に仕組みとしてIoC(Inversion of Control: 制御の反転)コンテナを持っており、Laravel側の関数を使って自前でnewしなくてもインスタンスを出し入れできるという話。アプリケーション起動時に設定したクラスを読み込めるサービスプロバイダもこの機能を使っています。

ファサード

 Laravelの流儀に従ってコードを書くと

<?php
  $password = Hash::make('password');

のようなスタイルになりますが、このHashクラスはフレームワーク側だと名前空間がついてるしメソッドもない、一体どうやってるの?→答えはファサードという機能ですよ……という話。どうやってこれを実現しているのか、コードを追いながら解説してくれます。ここはPHPの初心者の方なんかにはちょっときついですが、なるほどと理解できます。
 ファサードの長所として、エレガントなプログラムになるというのはuse文の名前空間で1行、newするので1行で2行減っても正直大して変わらないじゃんという気もしますが、テストがしやすくなる、仕様と実装が分離されるというのはその通りですね。

データベースの操作

 コード例は『PHPフレームワークLaravel入門』の方が若干豊富ですが、SQLを書く方式、Eloquentを使う方式、両方での操作方法など。
 実行されたクエリの確認方法、Eloquent ORMで設定できるプロパティの詳細、検索条件のメソッド化や論理削除、結果1行ごとにSQLが一回実行されてしまうN+1問題を防ぐEagerローディングの実装方法まで載っているのはありがたいですね。

Chapter 4 Laravel5の新機能を紹介!

新機能

 その名の通り新機能の紹介。このへんはもう完全にLaravel4経験者向けになっています。

  • ディレクトリ構成の変更
  • 実行環境の指定方法が.envに
  • 設定ファイルのキャッシュ化方法
  • URLルーティングのキャッシュ化方法
  • メソッドインジェクションとIoCコンテナの拡張
  • コマンドやメール送信に使えるスケジューラーの機能
  • Filesystem系クラスによりクラウド系へアクセスが可能イン
  • 有名SNSに繋げられるOAuth実装がまとめられたSocialiteパッケージ
  • Laravel4からの移行方法
  • Laravel5自体を拡張するパッケージ開発方法
コマンドバスとジョブキュー

 メール送信など外側のあるクラスから要求が来たら、それを貯めて非同期で実行できたりするコマンドバスやジョブキューの実装方法。完全に上級者向けです。

ミドルウェアの基本

 コントローラクラスのアクションメソッド実行前後にフィルタリングして処理を挟めるミドルウェアの話。ここは、実際に書く際のサンプルコードは『PHPフレームワークLaravel入門』の方が詳しいです。

フォームリクエス

 バリデーション処理をコントローラクラスから切り離せるフォームリクエストの話。コントローラクラスのアクションメソッドが処理されるまでの流れ(ライフサイクル的なやつ)、イベントを検知している方法の解説は役に立ちますが。ここも機能側での実装時サンプルは『PHPフレームワークLaravel入門』の方が詳しいです。

スクランナーLaravel Elixirの活用

 フロントエンド開発で、CSS系やJavaScript系のフレームワークやライブラリの導入、必要な作業やコマンド実行など定型的な作業をまとめるものが「タスクランナー」と呼ばれ、具体的にはNode.jsで実装されたgulpやGruntがある。このgulpをLaravelに取り込んで使えるようにした...というのがLaravel Elixir。ヒットポイントが全快しそうな名前ですが、これの活用方法。ここも上級者向けです。

phpspecを活用したアプリケーション開発

 単体テストフレームワークの有名なxUnitシリーズであるPHPUnitが最初からLaravelに入っているのは知っていましたが、同じく単体テストフレームワークでビヘイビア駆動開発(BDD)によく使われるPHPSpecもLaravelに入っているとのこと。これを使った入門記事。

特別記事 PHPフレームワーク最新事情

 個人的には非常に役に立った章です。SymfonyCakePHPZend Framework、Yiiを題材に取り、Laravel以外の主要フレームワークの特徴、コード例、最近の情勢、PHP言語の仕様策定グループであるPHP-FIGの話、PHPフレームワークのこれからの話。
 Laravel本なのにLaravelの話をしていないという勇気ある記事ですが(笑)、こういう包括的な情報はとても参考になります。

Chapter 5 実践!REST APIアプリケーション

 最後はその名の通り、画面がなくてRESTなAPI経由で本の予約参照、予約、変更、削除ができる「gihyo書籍予約システム」と題したサンプルアプリのチュートリアル。DBはMySQLでテーブルも3つ使う本格的なものです。
 Laravel4.2なのがネックですが、DBのマイグレーションなど準備から環境設定、ルーティング、コントローラ→サービス→Eloquentを使ったモデル...のPHP実装、最後はPHPUnitを使ったテストまで、じっくり学べます。
 やっぱり個々のAPIを実現する各レイヤーの機能実装コードは量が少なくて、うまくLaravel側がやっているんだなあと思います。

まとめ:LaravelとPHPの周辺情報が拾える良本

 メインの対象読者はやはりPHP初心者ではなく、少しでもLaravelを知っている人、あるいはLaravelを知らなくても他のPHPフレームワークを使った経験のある人に思えます。
 発行時期の悪さから4.2と5のコードが混じっていること、雑誌連載記事をまとめて作ったりすることも多いムック本の宿命で書いた方が複数なので、章ごとに内容がばらばら感がある……などもありますが、Laravel関連の情報がだいたい分かるよい本です。特に生い立ちや背景、他のフレームワークのことまで書いてあるのがよいですね。
 どうもAmazonだとなぜか評価がいまいちですが、日本国内初のLaravel本、読んで損はないと思います。

iwasiman.hatenablog.com

 こちらの『PHPフレームワーク Laravel入門』はもっと初心者がターゲットなので、「この通りに書くと動くよ」はあるのですが「なぜ動くのか」関連はほとんど記述がありません。そのへんのLaravelが裏でどう処理しているのかを、こちらの本書で補完するとよいでしょう。
 逆に本書はムック本なのでDB操作、フォームリクエスト、ミドルウェアなど実際のコード例が少ない所もあるので、その辺は上の青い本で相互に補完すると良いのかと思います。

技術評論社による正誤表サポートページがこちら。

サポートページ:Laravelエキスパート養成読本[モダンな開発を実現するPHPフレームワーク!]:|技術評論社

 また2章のサンプルコードで、ユーザからの入力値をエスケープしてないというミスがあるそうです。脆弱性といっても一般インターネットに公開しなければ大丈夫ですが、こちらを参照。

「Laravelエキスパート養成読本」の内容に含まれる脆弱性について

 前回の繰り返しになりますが、この養成読本クラスの内容の濃さでLaravel5対応で網羅性のある1冊のがっちりしっかりした解説本があると、Laravelに興味がある人も使っている人もみんな助かると思うのですが……いつか出てくれないかなあ。