効率的な Web アプリケーションの作り方

先週 [twitter:@fivestr] さんが関西に遊びにこられるというので、神戸、京都を連れ回して遊んでもらった。
その際に「効率的な Web アプリケーションの作り方」を献本頂いた。



350 ページとボリュームありサンプルのシステムが Symfony2 を使って書かれている。
Symfony2 は恐らく執筆時に PHP5.3 で動き、かつフレームワークが正式バージョンとしてリリースされている、小川さんが使い慣れているという事で選択されたんだろう。
が、Symfony 云々はこの本の本質ではないと思う。


本当に読むべき所は

という所だろう。


特に Part2 の所でビューとロジックが入り交じったコードをリファクタリングして分離していく所を読むべき所だと思う。
これはフレームワークに関係ないし、[twitter:@shimooka] さんの「PHP によるデザインパターン入門」と同じように普遍的に読めるものだと思う。
# 残念ながらこちらは絶版みたいだけど…


パーフェクト PHP では残念ながらテストについて深く踏み込まれて書かれていなかったので、本書ではちゃんとテスト書きましょうというのに触れられていてとても良い。
# 何故か PHP でテストについて触れられている本が少ない気がする


これらの章は保守・運用を行っていて、リリースのサイクルが短い案件を経験した身にはとても良く理解できる。
当時 PHP5.2 系を使っていたが、FW が基本的に継承パターンしか考慮されていなかった。
例えばキャンペーンを行う施策があって、そのキャンペーンは幾つかのパターンがあった。
# 商品の中身などは変わる
継承しかできないようなモデルだと抽象化するのが難しかったので、保守性を上げるために YAML で DI を簡単に出来るようなものを作ったり、テストコードが実行できるようにしたりした。


当時このような本と出会っていればもっと保守性のあるコードが書けたんじゃないかなぁと思う。
因に当時激しく PHPmixi-in が欲しいと思ったが、今なら Trait があるし、[twitter:@rsky] さんが http://blog.r-sky.jp/post/20240404769/php541-mixin を提案しようとしてるし良い時代になったもんだと思う。


蛇足だけど私が唯一気に入らないのは Symfony の人たちがよく Acme というのを使うけど、これは日本の PHPer には馴染み深くないので分かりにくいと思うくらいかな。
Acme の元ネタが PerlAcme パッケージだと思うけど、どうしてもジョークパッケージという風に思えてしまう…。
せっかく動くアプリケーションがあるのだから、ここはちゃんとしたベンダー名を付けて欲しい所だけど、まぁこれは些細な点だろうw