アシアルブログ

アシアルの中の人が技術と想いのたけをつづるブログです

Phalcon勉強会(Phalcon Night)に登壇しました

こんにちは。宇都宮です。

8月5日にPHPフレームワーク・Phalconの勉強会があり、縁あって登壇させていただきました。

イベントページは以下です。

Phalcon Night 最速フレームワーク Phalconを使い倒せ!

スライド



私の発表のスライドは以下です。

https://ryo-utsunomiya.github.io/phalcon_night_01/(クリックするとスライドが表示されます)



スライドはreveal.jsで作成しているので、GitHubの方がおすすめです(SlideShareでも閲覧に支障はありませんが、一部表示崩れがあります)。

Phalconの勉強会について



実は、社外でPhalconユーザーに会うのはこの勉強会が初めてだったりします。PHPの勉強会はたまに行きますが、Cake、ときどきLaravelって感じで、Phalconは存在自体知らない、という人も多いですね。

そういう意味で、ユーザーが集まって知見を交換できた今回の勉強会はとても貴重な機会だったと思います。

それぞれの発表について



冒頭のインテリジェンス・大谷さんの発表では、Phalconのモデルクラスのベンチマークが紹介されていましたが、「PhalconのORマッパーはFuelPHPのORマッパーの16倍速い」というのは衝撃的な数字でした。Doctrine 2やIlluminate/Eloquentあたりとも比べてみたいですね。

ソニックムーブ・岩井さんの発表は、composerによるプロジェクトスケルトンの作成や、モデルのuseDynamicUpdate等の実践的な知見が盛り込まれていて興味深かったです。

また、岩井さんと、もう1人ソニックムーブから登壇された平岡さんの発表に共通していた内容として、「Voltは落とし穴」というのがありました。

モーションピクチャー・山本さんの発表では、PhalconのWindows版はdll1つで済むから簡単、というお話が印象的でした。Linuxだとソースからビルドしてインストールすることになるので、Phalconに関してはWindowsの方がLinuxよりも導入は簡単ですね。「WISP」という略語は初めて知りました…。「WindowsIISSQL ServerPHP」の頭文字を取ったものらしいです。

Phalconはフレームワークによる制約や規約が少ないフレームワークです。自由度が高い反面、ベストプラクティスが見えづらいという欠点もあります。PhalconのAPIはシンプルなので学びやすいですが、上手に使いこなすには、他のフレームワークの経験もあったほうが良い、という印象を受けました。


最後になりますが、企画から会場の用意、運営まで行っていただいた株式会社インテリジェンスさん、ありがとうございました。




2014年8月7日追記:

イベントページが更新され、全登壇者のスライド一覧が掲載されたので、リンクしておきます。

http://eventdots.jp/event/79800#repo

【最速PHPフレームワーク】Phalconを実案件で使った感想

こんにちは。宇都宮です。

最近は、「最速PHPフレームワークPhalconで開発を行っています。

Phalconは、PHP拡張として実装された、フルスタックのPHPフレームワークです。非常に高速に動作するという特徴がありますが、特有の難しさもあります。

そこで、実際に開発を行って感じたPhalconの特徴を、Q&A方式で紹介していきます。


Q. Phalconを使うと、高パフォーマンスのアプリが作れるの?



A. フレームワークの遅さに足を引っ張られることはなくなる



Phalcon公式ベンチマークからも読み取れるように、Phalconは一般のPHPフレームワークを大きく上回る実行速度を持っています(req/secで2倍〜7倍程度)。

また、Phalconの提供している機能を積極的に利用することで、パフォーマンスの最適化を図ることができます。たとえば、Phalconのモデルが提供するORマッパーはCで実装されており、高速かつ省メモリです。

Q. Phalconの学習コストは?



A. フレームワーク自体は難しくないが、英語の壁はある



Phalconの各コンポーネントは、比較的シンプルに作られています。一般的なMVC構造のWebアプリケーションフレームワークを使用したことがある人なら、それほど違和感なく使い始められるでしょう。

ただ、他のフレームワークに比べ、情報源が限られている印象があります。

主な情報源はPhalconの公式ドキュメントで、必要な情報はだいたい載っています。一方、Phalcon公式ドキュメント以外の情報源は、ほとんどありません。

また、現状では、Phalconの情報はほとんど英語しかありません。ドキュメントの日本語訳は少しずつ進んでいますし、Qiitaやブログ等でも日本語の情報はみかけますが、現時点でPhalconでの開発を行うには、英語のドキュメントを読んでいく必要があります。


Q. Phalconの安定性は?



A. おおむね安定しているが、完璧ではない



PHPで実装されたライブラリであれば、ライブラリ内部のエラーはPHPがエラーとして出力してくれます。これに対して、PHP拡張の内部にエラーがある場合、PHPは実行を停止します。このとき、サーバのエラーログを見ると、「zend_mm_heap corrupted」とか「Segmentation fault」といった文言が出力されているはずです。

こういったPHP拡張内部のエラーは、原因の究明が難しく、回避もしづらいという特徴があります。

では、Phalconを使って開発しているとき、こういったエラーに遭遇する機会はあるのでしょうか? 残念ながら、ゼロではありません。週に1回くらいは、これらのエラーに遭遇する機会があります。

経験上、Segmentation faultは自分のコードに起因していることが多いです(必須引数の渡し忘れ等。本来なら、フレームワークがエラーを返してしかるべきパターンですが…)。

それに対して、zend_mm_heap corruptedは、予期しないタイミングで発生します。Phalconが提供しているオブジェクトのプロパティ操作に起因して起こるという共通点がありますが、プロパティを触れば必ず発生するわけではなく、読みづらいエラーです。


Q. Phalconの開発状況は?



A. 現時点の最新安定版はv1.3.1。次期メジャーバージョンのv2.0.0がβ版の状態



Phalconのバージョン1はC言語で実装されていますが、バージョン2はZephirという言語で書き直されています。

Zephirは、PHP拡張を書くためのDSL(ドメイン特化言語)です。Zephirとは、Zend Engine/PHP/Intermediateの略称です。Zephirにはポインタがないので、C言語で実装するのに比べ、メモリ管理の不備に起因するエラーを低減させることができます。

ZephirはPHPにとても良く似たシンタックスで、PHPの標準関数もそのまま利用できます。Zephirのコードは、PHPを書くのに近い感覚で書いていくことができます。

Phalconのバージョン2系では、Zephirの導入により、安定性の向上とフレームワーク本体の開発効率向上が期待されています。

なお、v2.0.0は実装言語の置換えを目的としたバージョンなので、v1.3.xで動作するように実装されたアプリケーションは、v2.0.0でも問題なく動作します。


Q. Phalcon、速度以外の利点はあるの?



A. 柔軟で、自由度が高い



一般的なPHPフレームワークに比べ、Phalconは構成の自由度が高いです。Phalconには3種類の構成が用意されており、Slim/Silexのようなマイクロフレームワークとしても使えますし、シングル・マルチモジュールのMVCアプリケーションにも使えます。

また、強力で使いやすいDIコンテナや、豊富なイベントを備えているため、フレームワークによる縛りのせいで、やりたいことができない、ということはほとんどありません。


Q. Phalconへの不満は?



A. かゆいところに手が届かない



Phalconはフルスタックフレームワークなので、一般的なWebアプリケーションに必要となる機能はほとんど揃っています。ただ、「機能としてはあるのだけど、微妙に行き届いていない」機能がちらほらあります。

例えば、Phalconには、RDBのテーブルの情報を元に、モデルクラスを自動生成する機能があります(Phalcon DevTools の phalcon modelコマンド)。この機能は、テーブル定義を元にプロパティを定義したり、getter/setterを生成したりといった作業を自動で行ってくれます。

しかし、外部キー制約を元にしてリレーションを読み取り、リレーションを定義するコードを生成する機能はありません。hasOne/hasMany/belongsTo/hasManyToManyといったリレーションの定義コードは、自分で書く必要があります。


まとめ



Phalconは、PHP拡張という点では「とんがった」フレームワークですが、実際に利用してみると、意外とオーソドックスです。シンプルで高速に動作するフレームワークが好きな方には、特にオススメです。