こんにちは、Webエンジニアの泰です。
今回は爆速フレームワークとして名高い、Phalconをご紹介していきます。
PHPはフレームワークが多く、設計の段階でフレームワークの選定が非常に重要となってきます。API開発の事例を交えて、Phalconを選んだ理由をお話します。
Phalconとは
Phalconは2013年に発表され、PHP最速フレームワークとして話題になりました。そのスピードは今なお健在で、PHP Framework Benchmarkでも圧倒的な結果を残しています。その速度の秘訣はZephyrを使用した、PHP拡張機能としての実装です。
CakePHPなどのフレームワークでは”コア”がPHPファイルで存在し、様々な機能を提供する為にゴリゴリと実装されています。シングルトンパターンや遅延ロードなど様々な方法を利用して省メモリの工夫をしていますが、比較的大規模なPHPコードが走っています。Phalconの場合はPHPよりも低いレイヤで処理が書かれているため、高速でかつ省メモリを実現できています。
API開発にPhalconを選んだ理由
今回僕が行った案件では次のようなAPIの開発を行いました。
- ポイントシステムのAPI
- ポイントの付与や照会などをAPIで行う。
- APIとしては比較的小規模
- エンドポイントは8個程度。
- APIへのリクエストが多い
- サイト内でのポイント照会やバッチ処理によるポイント追加・削除処理など頻繁にアクセスされる。
RESTでの設計を行ったため処理内容は非常にシンプルでした。しかしリクエストが頻繁に行われるため、フレームワークとしてもある程度のパフォーマンスが必要な状況です。規模としてはそれほど大規模なものではないので、プログラムとしてもシンプルな構成にしたいという考えていました。そこでPhalconを実戦投入してみました。
Phalconのメリット
Phalconのメリットとして実感できたのは以下の3点です。
- パフォーマンスが高い
- マイクロ構成を使うことで不要なコードがなくなり、コード全体の見通しが良くなる
- 素のPHPに近い自由度がある
Phalconは非常に自由度が高いため、開発時にきちんと設計を行っていれば様々な環境に対応できます。構成によってはCakePHPのようにMVCでフォルダ分けを行い、それぞれのClassを使用した実装を行うことができます。ですが今回のような規模のAPIを実装する場合はマイクロ構成を使用する事で、不要なAPIの読み込みをなくすことが可能です!全体のコード量が少なくなり、動作の軽量化にも繋がるので、他のフレームワークにはなかなかないメリットかと思います。
マイクロ構成でのアクションの実装は以下のようになります。
// app.php
use Phalcon\Mvc\Micro;
$app = new Micro();
/**
* アクション開始時の処理
*/
$app->before(function() use ($app) {
});
/**
* アクション終了時処理
*/
$app->finish(function() use ($app) {
});
/**
* 例外時処理
*/
$app->error(function($exception) use ($app) {
});
/**
* NotFound時の処理
*/
$app->notFound(function() use ($app) {
});
/**
* POSTの場合
*/
$app->post('/users', function() use ($app) {
});
/**
* GETでURLにIDを含める
*/
$app->get('/users/{user_id:[0-9]+}/articles', function($userId) use ($app) {
});
$app->handle();
ソースコードの見通しが非常に良いですね!上記サンプルは最小単位に近い状態なので、ここから設定ファイルやDIでの実装などを追加していく形になります。
REST APIの実装を行う場合はURLとHTTPメソッドがポイントとなるため、ひと目でエンドポイントを把握できるこの構成はメンテナンス性の向上に繋がります。エンドポイントが多くなってきた場合でも、クロージャをControllerクラスに置き換えたり、ファイルに分割してrequireするなどの対応が可能になっています。
Phalconの注意点
他のフレームワークにはなかなかない強みをもつPhalconですが、注意しなければならない点もあります。
個人的に感じた点としては
- Phalcon導入時にWebサーバの再起動が必要がある
- 自由度が高い分、設計や規約をしっかり整備しなければならない
- 一部、外部ライブラリが必要となる場合がある
といった部分です。Phalconは規約の縛りが非常に弱いため、こちらで規約を整備しなければなりません。Phalconでの設計ノウハウが非常に重要となってきます。
また、メール送信処理など一部の機能はincubatorと呼ばれるPhalconのライブラリ集を使う必要が出てきます。
Phalconで自由なAPI開発
Phalconは他のフレームワークと比べて素のPHPに近い自由度でコードを書くことができます。今回ご紹介したマイクロ構成以外でもシングルモジュールやマルチモジュールなど構成を変えることでMVCのプロジェクトを作成することが可能です。注意点がクリアできる場面であれば、僕はPhalconでのAPI開発をおすすめします!
About The Author
Shohei Tai | 2016年入社
CTO
フルスタックエンジニア。Webサービスやポータルサイトの開発、マネジメントをしています。フロントエンドの開発、高速化、SEOが得意です。外部のイベントでたまにLTをやっています。趣味はダーツ(ハード・ソフト)とバイク。