基本的に私はPHPで開発するときはSymfonyだが、今回Ethnaを入れてみた。
今回はそのEthnaについて思いのまま書いてみる。
基本的にはココを見れば一通りのドキュメントがそろっているので、
そちらを見たほうがよいだろう。
Ethnaとは
Ethna(えすな)とは、Greeが開発した和製のPHPフレームワークである。
日本でPHPフレームワークといったら、Cake , Symfony , Zendなんかがポピュラーだが、Ethnaはそれに続く立ち位置だと思う。
和製PHPフレームワークとしては、一番使われていると思われる。もちろんGREEもEthnaを使ってできている。
Ethnaをインストール
インストールはPearでサクッと入る。
pear channel-discover pear.ethna.jp pear update-channels pear install -a ethna/ethna
上記コマンドで打ったら
/usr/share/pear
以下にEthnaのソースが展開されたので、ここにphpのパスを通しておく必要がある。
php.iniに以下を追加。
include_path=".:/usr/share/pear"
ethnaが入っているか確認
ethna -v Ethna 2.5.0 (using PHP 5.2.9)
Ethnaを使ってみて思った全体感
まず思ったことは、フレームワークはやりのMVCがしっかりしている。
公式ドキュメントを見ても分かるが、
コントローラーやアクションに余計なものは書かないように推奨されている。(アクションに200行以上書いちゃだめとか)
逆に言うと、MVCって何?的な人がEthnaを使えばMVCってのが何となく理解できるのではないだろうか。
Ethnaのテンプレートエンジン Smarty
Ethnaの特徴の一つは、テンプレートエンジンとしてsmartyを採用している。
また、バリデート時のエラーメッセージやformのデフォルト値、viewオブジェクトでセットした値が非常にアクセスしやすくなっている。
さらに、ユーザーが入力したform値に関してはデフォルトでエスケープ処理がされているという便利設計。
しかし、ヘッダー、フッターを都度かからなければならずsymfonyのlayout.phpみたいな便利な機能がない。
ヘッダー、フッターのインクルードファイルを作るほかないだろう。
Ethnaの文字コード
当初はEUC-JPがデフォルトだったが、最新版ではUTF-8がデフォルト。
やはりUTF-8がよい。
EthnaのDB接続
メインはPEAR::DBを継承したEthna_DB_PEARを使っている。
whileでresultセットを回して、1件、1件fetchする感じ。
直感的にSQLをかけるのは良い。
便利なことに、マスター用の接続、スレーブ用の接続(複数セットした場合は自動で振分け機能付き)など色々な接続を簡単に設定できる。
一応、O/Rマッパーも独自で実装されている。
ぱっと見は使いやすそうだが、やはりSymfonyのマッパー等にくらべると少々弱い感じがする・・・。
オブジェクトの配列を一気に取得して、がんがん回して、がんがんセットしていきたい。見た目、一つずつしか取得できない?
ただ、webのform値を一気にimport(set)できるのは便利そう!スクリプトが綺麗になる。
コレは便利formについて
チュートリアルをサクッと見ると、すごく便利に見えたのはformについて。
formのバリデートはそれ専用に書くところがあるし、エラーハンドリングやエラーメッセージもテンプレート側でsmartyを使ってアクセスしやすい。またエラー時にvalue値としてformの値をセットするが、デフォルトでエスケープされている。
また、バリーデート済みのform値はO/Rマッパーを使用してそのままオブジェクトにset->updateできる。
symfonyにも同様の機能があるが、こちらの方がテンプレートも自由にかける等少しライトに実装されており、つかいやすそう。
Ethnaのパフォーマンス
symfonyとethnaで「Hello World」を出力するアプリを作ってみて、各10回計測し、それの平均値をもとめてみた。
- Ethna : 0.0724179
- Symfony : 0.0970384
すくなくともsymfonyより早いので問題ないでしょう。symfonyが重すぎ・・・。
あとはDB接続周りに依存するでしょうね。
まとめ
とりあえず思ったことは、EthnaはライトなWebアプリケーションを作るのにはすごく向いているなと思う。
また、全体的に分かりやすいので習得コストもそれほどかからないだろう。
ただし、Symfonyなどと比べるとやはり機能が少ない(symfonyが多すぎ)。
もし、大規模なアプリケーションを開発するのであれば、EthnaではなくSymfonyなどを検討してみても良いと思う。



