第51回PHP勉強会に行ってきました。

100回へ向けた折り返しとなる第51回PHP勉強会@関東に参加してきました。
前回の大盛況と打って変わって今回は大量のキャンセルなどにより8名分枠が余っていました。もったいない。

感想と突っ込み

CodeIgniterのUnit_testクラスとHMVC (nekogetさん)

CodeIgniterでUnitテストを見やすく実装してみたよというお話。CodeIgniterは使わないのですが、テスト結果をリアルタイムでブラウザ上で表示するというのは面白いなと思いました。
でも、そこそこ規模が大きくなってくるとテスト実行するだけで数分とか掛かるようになる気がしますが、そこんとこどうなんでしょう。と今思いました。

rhaco2(riafさん)

symfonyを賛美しながらの、racho2のゆるふわな説明でした。
僕が発表するとどうしてもガッチリやろうとしてしまうので、ああいうゆるふわな発表にはあこがれます。
rhaco2はrhacoのver.2ではなくてracho2のver.1.xだということは重要そうです。

Openpear (id:sotarokさん)

Openpearのリニューアルのための人員確保を狙ったOpenpearの中身の話でした。Openpearオープンソース化されて、中身はrhaco2だそうです。完成はまたPHPカンファレンスを目指すらしいです。
懇親会でいろいろ突っ込みを入れる予定でしたがsotarokさんが懇親会に参加しなかったので突っ込めませんでした。残念。SourceForgeだと説明文のユーザ言語版がないときには機械翻訳を表示してくれますが、Openpearも追随したら良いのになぁと帰り道で思ってました。
がんばってください。フレームワークagaviだったら手伝えたのに!

リソース指向フレームワークBEARのご紹介(TOMさん)

RESTの考え方に基づいたリソース指向という思想で作られたフレームワークの説明でした。
rhaco2のときもそうでしたが、開発者が会場にいるのに別の人が発表するのってやりづらいだろうなと思いました。
それはさておき、BEARはRESTfulな思想で作られているとか、リソースにはCRUDだけしかないからいいとか言っていましたが、agaviだってリソース指向に基づいて利用できます。
agaviではMVCのCにあたる部分がagavi本体のController,Routingと開発単位である各モジュール内にあるActionクラスが担っています。このうちActionクラスでは本質的な処理はexecuteRead,executeWrite,executeDelete,executeCreateが行います。すなわちCRUDです。
つまり、開発者がActionをリソースとして認識して実装すれば立派なリソース指向フレームワークとなりうるわけです。
また、BEARではページ層として扱っている部分をagaviではViewが担っています。ViewはViewクラスとRendererが主な処理を行いますが、さらにレイヤーやスロットといった概念を持つことにより、複数のActionをひとつの出力にまとめることなども簡単に行うことができます。さらに、agaviには出力形式(Output Type)という概念が導入されており、同じAction呼び出しに対する出力をhtmlにしたりxmlにしたり、jsonにしたりと出し分けることができます。
出力形式はコントローラのRoutingクラスの設定ファイルであるrouting.xmlによって設定することができます。例えば特定のURIに対するアクセスの返答をjsonに固定にすることや、あるいは同じURIに対するリクエストでもHTTPヘッダのAcceptにapplication/jsonが含まれていたらjsonそれ以外はhtmlというコンテントネゴシエーションを実装することが簡単にできます。それこそ、RESTfulなWebAPIと同様の機能を提供するWebアプリケーションを同じAction,Modelを使って実装することができてしまいます。
また、リソース層に封じ込めてあるのでコマンドラインから呼び出すように実装できるともおっしゃっていましたが、agaviはConsole対応しており、設定ファイルを数行いじってViewにコマンドライン用出力形式対応のメソッドを追加してあげるだけで簡単にコマンドラインから呼び出せます。本当に簡単なのでwebサーバの設定がめんどくさい*1時にコマンドライン版でMとCを実装しておいて、あとからhtml出力をViewに実装するなんてことを以前行ったことがあります。
BEARの切り口は大変面白いですが、本気MVCagaviはもっと柔軟でかつ便利です! MVCよりもリソース指向がよいと思っていたのなら、それはそこらへんのなんちゃってMVCをやってるフレームワークを見ていたからかも知れませんよ!

64bit PHPの罠(hnwさん)

64bit環境でPHPを動かしたときに起こりうる問題のお話でした。具体的にはint型が64bitになってunix timestampの範囲が地球の寿命を越えるということのようです。その結果intの最大値がfloatの最大値を上回ったり、
mysqlの0000-00-00が意味を持っちゃったりとするようです。
いま、マニュアルをみていてPHPのマニュアルに下記のような記述を発見しました。これ、64bitでPHP_INT_MAX/1とかPHP_INT_MAX/1.0とか(PHP_INT_MAX-1)/2とかPHP_INT_MAX/2とかしたらどうなっちゃうんでしょう。


PHP には整数の割り算はありません。1/2 は float 型の 0.5 になります。

謝辞

今回会場を提供してくださったトライコーン株式会社様、ありがとうございました。
また、司会兼幹事をしてくださったgusagiさん毎度お疲れ様です。

*1:加えて、html表示のデザインが上がっていなかった