Kentaro Kuribayashi's blog

Software Engineering, Management, Books, and Daily Journal.

『はじめてのフレームワークとしてのFuelPHP』を読んだ

最近話題のFuelPHPがどんなものなのか気になっていたので、学習のために『はじめてのフレームワークとしてのFuelPHP』を読みました。FuelPHPのセットアップから、MVCの説明、仕様解説、実践的入門と、この手のフレームワークを使ったことのないひと向けに手堅く説明している感じで、よい本だと思いました。

また、実践的入門編の後半では、ユニットテストはもとより、直接FuelPHPと関係があるわけではない、PHPUnitを用いたファンクショナルテストを導入し、リファクタリングを進めながらテストによって動作を確認するという、この手の入門書ではスルーされがちな手法についてもちゃんと書かれていて、意識レベルが適切。また、セキュリティについても、FuelPHPのサポートする諸機能を用いつつ、簡潔に説明がされていて、安心です(ただし、後述「疑問点」を除く)。

FuelPHPは、ドキュメント(日本語訳)がしっかりしているようで、なかなかよさげなのですが、本書の対象読者や、まとまった形でざっくり使い方などを把握したい向きには、とてもよい本なのではないかと思いました。

疑問点

「4.2.2 コントローラとURLの関係」の項で、URLから取得したパラメタを、以下のように直接HTMLに埋め込んでいるコード例があるのだけど、これはだいじょうぶなんだろうか(多分だめだと思う)。

public function action_category($cat = 'php', $page = '1')
{
    return __FILE__ . '<br />' . $cat . '<br />'. $page;
}

FuelPHP自体について

うすいフレームワーク

PHPフレームワーク事情について、特に知識があるわけではないので比較はできないのですが、tokuhiromさんもおっしゃってる通り、ごてごてとしておらず、すっきりとしたうすいフレームワークという感じで、よさそうに思いました。他のRails的なフレームワークとか、Javaじゃばしたようなのからすると機能面で物足りないところもあるのかもしれませんが、個人的には、このようなうすいものの方が、取り回しがきくので好きです。

HMVC/Modules

また、特にいいなあと思ったのは(この本では少し触れられる程度ですが)、HMVCModulesです。アプリケーションが大きくなってくると、コードベースがやたらと肥大化してどうにもならなくなることがよくあるわけですが、FuelPHPは、アプリケーションの(大きなくくりでいうところの)機能ベースでModuleとしてMVCを階層的に配置できるシンプルな仕組みにより、解決策を提案しているようです。

たとえば、いろんなサブ機能を持ったSNSのような巨大アプリの場合、それぞれのアプリを別々に作るということももちろん可能ですが、FuelPHPのModuleを使うと、このようにも構成できます。

  • app/
    • modules/
      • blog
        • classes
          • controller
          • model
          • view
        • config
        • views
      • album
        • classes
          • controller
          • model
          • view
        • config
        • views
      • message
        • ...
      • ...

さらに、HMVC requestと呼ばれる仕組みで、moduleを超えたコントローラの呼び出しも可能なので、共通の処理をglobalなところに書いておいて、差分を各moduleに書くということが可能なようです。これは、なかなかシンプルで筋のよい策だなあと思います。

不安なとこ

FuelPHP自体のテストカバレッジが不十分と書かれていて、実際リポジトリを見ても「えっ……」という状況なので、かなり不安……。これはちょっと厳しいんじゃないかなあ。また、自動生成されたmigrationの定義ファイルがおかしかったりすることがあるのでちゃんと確認するようにとか書かれていて、その辺、まだ安定していないようだ。開発自体に関わるつもりで使おうという感じぽいですね。

所感

まあ、個人的には新規のプロジェクトでPHPを使う必要性を特に感じないので、Railsとかでいいじゃんと思うので、使わないと思います……。