読者です 読者をやめる 読者になる 読者になる

Phalconとはなにか: Phalcon Advent Calendar 1日目

f:id:koyhoge:20141202110711p:plain

初日から締め切りぶっちしてますが、Phalcon Advent Calendar 2014 - Qiitaの1日目なわけです。

最近は某所のお仕事で Phalcon を使っていまして、結構面白いフレームワークだなぁと思いながらも、案外とクセが強いというか、使い方のノウハウがまだあまり共有されていないと感じたので、ついついアドベントカレンダーを立ち上げてしまいました。参加者が集まらなくても、最悪は少人数でぼちぼちやれば良いなぁと考えていたのですが、存外に好評なようで、開始時点で 13 エントリーも集まっています。

あらためて Phalcon とはなにか

PhalconPHP 5.3 以降を対象とするウェブアプリケーションフレームワークです。


High performance PHP framework

その最大の特徴は、コア部分がひとつの PHP 機能拡張として C 言語で書かれており、そのため PHP の文法解析/オペコードへの変換をすっ飛ばして実行されます。それが「最速 PHP フレームワーク」と自ら称している所以となっています。

他にも色々と興味深い特徴を持っていて、

などなど、コア部分を機能拡張として実装する必要からか、他のコンポーネントの利用は少なく、すべて自前で実装しているフルスタックフレームワークとなっています。

なお、Phalcon 本体は PHP 機能拡張として実装されていますが、それを使用するアプリも機能拡張として書かなければいけないわけではなく、通常通り PHPフレームワークを継承/利用してコードを書いていく形になります。

Phalcon の設計の特徴

フレームワーク設計的な視点で Phalcon をみた時に、一番の特徴は

DI を中心にしてすべてを設計している

ということだと思います。

Phalcon の DI は、Phalcon\DI というクラスを実装し、それに機能をすべて登録する一種のデータベースとして利用する形式になっています。主要なクラスはすべて Phalcon\DiInterface というインターフェースを implements しており、DI を軸に各種の機能を呼び出すことで、各クラス間の依存を可能な限り小さくする方針を取っています。このため一世代前のフレームワークにありがちな、コントローラクラスにすべてを詰め込んだいわゆる「ファットコントローラ」に陥ることを防ぐのを容易にしています。

DI を軸にやり取りする以上、基本的な機能を提供するサービスにはすべて Interface が用意されており、実装を独自に差し替えることが可能になっています。ただその Interface が現在の Phalcon の実装に引きずられる形で定義されており、用途によっては汎用性が足らず、自分の望むような拡張ができないこともままあります。

現在の開発状況

Phalcon の現在の安定版は 2014年9月にリリースされた 1.3.3 2014年10月にリリースされた 1.3.4 で、これはいくつかの問題点を修正したメンテナンスリリースです。(追記: @kenji_s さんに 1.3.4 がリリースされているとご指摘いただきました。いつもありがとうございます。)

これとは別に現在開発進行中なのが 2.0.0 で 2014年10月16日にベータ3がリリースされたところです。Phalcon 2 の大きな特徴は、Zephir を使ってコアのコードをすべて書き直したことです。 Zephir は型付きの PHP とでも呼べるようなプログラミング言語で、コードを Zend API を使った C 言語に変換しコンパイルすることで、PHP と機能拡張の形でリンクできるネイティブコードを作成することができます。Phalcon を Zephir ベースで書き直したことにより、クラスの型チェックがより高速になったと報告されています。

Phalcon は速度命だけどそれだけじゃない

Phalcon が開発された発想の基本は、PHP の巨大なフルスタックフレームワークで速度の足を引っ張る部分を、根本から解決するにはどうしたら良いかという思考の末にできあがったものだと思います。コアのすべてを機能拡張として C 言語で実装するという選択は、手軽にコードを記述できる PHP のメリットを失わせるものにも思えますが、フレームワーク設計をしっかりと行いフルスタックを作り切ることで、結果的に高性能かつ用途の問わないフレームワークができあがりました。

機能拡張として実装している以上、設計変更のコストは純粋な PHP フレームワークに比べてやはりどうしても高くなります。そのため Phalcon の設計思想は、すべてのクラス設計において統一感があるように感じられます。人によっては多少の好き嫌いはあるにせよ、統一感のある思想のもとに設計されたある意味では美しいフレームワークは、触っていても心地よさを感じるものです。