PHP Matsuri 2011 レポート

PHP Matsuri 2011 セッション・ワークショップレポート

この記事を読むのに必要な時間:およそ 7.5 分

Graham Weldonさん「CakeFest wrap-up, and CakePHP 2.0 Performance」

日本への来日は去年のPHP Matsuriに続き3年目となるGraham Weldonさんより,CakePHP2.0についてのセッションがありました。

Graham Weldonさんは,CakePHPのコアコントリビューターとして4年間活動してる他,RedmineのPHPクローンであるCandyCaneの開発にも参加しているそうです。

3回目の来日となるGrahamさん

3回目の来日となるGrahamさん

まず,先日イギリスのマンチェスターで行われたCakeFestの紹介がありました。このCakeFestは,2日間はワークショップ,次の2日間はカンファレンスの計4日間行われ,100名近くが参加したそうです。PHP Matsuriの参加者の中にも,日本からCakeFestに参加した方が何名か参加されていたのが印象的でした。

次に,本題であるCakePHP2.0の紹介に移りますが,このセッションでは規約類からはじまりエラー処理,国際化,セッション,認証系など,それぞれの機能についての大きな変更点について,書ききれないほど多くの説明がありました。

それによると,CakePHP2.0では従来のソースコードをすべて書き直し,PHP4以前を切り捨てたため,パフォーマンスが向上するとともに多くの新機能が追加されたということです。特にパフォーマンスは,遅延読込を適用していること,命名規則の変更により文字列操作を削減できたこと,リクエスト・レスポンス処理を改善したこと,DBのキャッシュ処理を改善したことなどにより,ベンチマークで10〜15%程度パフォーマンスが向上しています。

また,PHP5.3以降の新機能である無名関数や名前空間などを積極的に取り入れようとする一方,Exceptionを使用してエラー処理を改善したり,コンソールシェルの出力に色付けができるようになるなど,着実に進化している一面も感じ取れました。筆者個人的には,国際化のためのショートカット関数がタイプ数を減らす方向へ変更された点などに好感が持てました。

次に,CakePHP2.0のドキュメントやAPIリファレンスなどを紹介しました。そこにはJenkinsによるCI(継続的インテグレーション)の状況を公開するURLもあり,開発手法の進化も見て取ることができました。

最後に,ドキュメントの日本語化について触れ,有志による翻訳に感謝するとともに,さらなる協力者を募集しているとのことです。

CakePHP2.0のリリースが直前だった(この翌日である10月16日にリリースされた)ためか,CakePHP1.x系からの変更点についての詳細な説明があり,CakePHPユーザーとしては非常に役立つセッションとなったのではないでしょうか。

Fabien Potencierさん「Symfony2, the major features」

Symfonyフレームワークの作者であるFabien Potencierさんより,今年7月にリリースされたSymfony2フレームワークについてのセッションです。

まずはじめに,Symfony2の概要について説明がありました。Symfony2は,より拡張しやすく高速なアーキテクチャを手に入れるために既存のコードをすべて書き直して作り直されたそうです。それによって,PHP5.3の新機能や,Symfony1リリースからの5年間のベストプラクティスを取り込むことが可能になったとしています。

そして,Symfony2は「WEB開発者が持つ多くの問題を解決できる再利用可能なコンポーネントセット」であり,それと同時に「それらのコンポーネントをベースとしたフルスタックフレームワーク」でもあると指摘しました。

来日2回目となるFabienさん

来日2回目となるFabienさん

セッションの前半では,Symfony2を構成するコンポーネントの紹介がありました。Symfony2には21の再利用可能でスタンドアローンなコンポーネントがあるそうです。それらのコンポーネントがそれぞれがgitリポジトリを持ち,個別にインストールして使用することができるといいます。代表的なものとして,yamlファイルを扱うYamlやファイルシステムを扱うFinder,DOM操作を行うCssSelectorなどの機能を紹介しました。

これらのコンポーネントを作る上では,Symfony1での経験を元にしつつも,JavaのWEBフレームワークであるSpringや,PythonのDjango,Ruby on Railsなどのベストプラクティスも参考にしているそうです。

そして,これらのコンポーネントセットを利用することで独自のWEBフレームワークを作成することも可能とし,例としてsilexというマイクロフレームワークを紹介していました。

また,doctrineやPHPUnitなどのプロジェクトでもSymfony2のコンポーネントが使われており,次期phpBB4やDrupal8でも採用される予定だそうです。これらのことからも,紹介されたコンポーネントの機能はWEB開発に際して有用なものが多いことがわかりました。

後半では,フルスタックフレームワークとしてのSymfony2の紹介がありました。Symfony2はMVCモデルでいうV(View)とC(Controller)を担当するフレームワークであり,M(Model)は好きなものが選択できるといいます。また,Symfony2をダウンロードする際に,プロジェクトの性質に応じて何種類かのセットから選択することが可能になったそうです。これはディストリビューションといい,Linuxのディストリビューションとよく似た仕組みだそうです。

さらに,ダウンロードしてソースコードを配置した直後には,Symfonyの設定がWEB GUIで簡単に行えるコンフィグレーションシステムを導入し,初心者でもインストールしやすいものになったとしています。他にも,新しいテンプレートエンジンであるTwigや機能が拡張されたWEBデバッグツールバーなど,WEB開発を支援する機能を紹介しました。

最後に,質疑応答では不足しているドキュメントに関する質問をされ,⁠自分で作って追加するか,チケットを作って!」などと回答し会場を沸かせていました。

Garrett Woodworthさん「High Quality Code with Lithium」

元CakePHPコアデベロッパで,現在はLithiumフレームワークの開発をしているGarrett Woodworthさんによる,クオリティの高いコードに関するセッションです。PHPコミュニティには,時としてクオリティの低いコードが多いという評判があることを危惧してセッションのテーマを決めたそうです。

終始気さくに接してくれたGarrettさん

終始気さくに接してくれたGarrettさん

はじめに,Garrettさんの考えるクオリティの高いコードについての説明がありました。良いコードとは,書いた本人が見返せばすぐに思い出せ,理解しようとした人が問題なく理解できるコードだと思うそうです。また,コードの質を保つには,

  • ドキュメント
  • 基準
  • テスト
  • ツール

の4つが必要であると示しました。しかしドキュメントはコードとともに変化していくので完成が無いため,最後に作りたいものだといいます。また,ドキュメントにはコードが何をしてるかだけでなく,どうやって動いているかを記述することが重要であるといいます。基準については,基準があるから読みやすく共有しやすいコードができるため,コードを書く人それぞれが持つべきであるとしながらも,共同作業をするときは相手の基準を理解することが重要であるといいます。テストについては,質の高いコードを目指す上での最後のステップとし,テストファーストを実践するとコードの質は改善されると話しました。

Lithiumフレームワークではこれらを支援するためのツールを用意しているそうです。このツールとは,

  • コードのコメントブロックからドキュメントを生成するDocument Generator
  • コードの解析を行うCode Analysis
  • テストコードの作成を支援するTest suite
  • CI(継続的インテグレーション)

の4点であり,これらを駆使することによりコードの質を保っているそうです。

セッションの後半では,プロジェクト作成からプログラム実装,テスト実行までの一連の流れや,ドキュメント生成のデモを行いました。最初に簡単なコマンドをいくつか叩いた後は,WEB GUIによる操作でコードの解析やテストの実行が行えるという簡単さには驚いた参加者も多いのではないでしょうか。また,アジャイル開発やテスト駆動開発などで耳にするキーワードが多く出現し,開発手法という側面から見ても非常に興味深いセッションでした。

Garrettさんは,セッション中にどこからか聞こえて来た音楽に合わせた即興ダンスを披露するなど,非常に気さくで面白い方でした。

著者プロフィール

佐野宏英(さのひろひで)

神奈川県横浜市在住。18歳で参画した大手SIerによる大規模Java開発から2年で脱出して以来,CakePHPを使ったWEB開発を主に1人で行っている。尊敬する人物はよしおかひろたか氏。

コメント

コメントの記入