[s2container-php5:153] ありがたく利用させていただきました。

成田 英樹 [E-MAIL ADDRESS DELETED]
2011年 6月 2日 (木) 01:42:55 JST


成田と申します。


 こちらのMLには初投稿となります。よろしくお願いします。
 #最近はあまりアクティビティが無いようで残念ですが。

 S2Container.PHP5 2.0.3を利用してプロジェクトを進めることができたので、
 お礼をかねてご報告させていただきます。

 作成したサイト名は先方の了承を得ていないので、伏せさせていただきますが、
 ちょっとリッチな電子書籍を販売するサイトになります。

 ショッピングモールのように、店子を持つためそれなりに規模の大きいものに
 なりました。
 管理画面、フロント画面あわせてPEAR等のライブラリを含まず1000個オーバーの
 クラスファイル数になります。

 #java で実装しても良かったのではないか?とも思いましたが、周りはPHPエンジニア
 #ばかりでしたので、大きな声にはなりませんでした。

 導入のきっかけですが、私が以前SAStrutsを利用した開発を行ったときに、
 DI,AOPを使った開発に魅せられたところがございまして、そんな中、
 それなりの規模になる見通しがたったため、実装者が担当する機能に
 集中して欲しいといった気持ちと、また、メンバーが増えることによる、
 実装のふらつきを小さくしたい(が、自由度は持たせたい)といった点から、
 Struts like なフレームワークを組み上げ導入に踏み切りました。

 開発当初は、DIにもAOPにも馴染みのない開発メンバーから戸惑いの声も
 ありましたが、なんとかリリースまでこぎつけることができました。
 #コンポーネントを var_dump した開発メンバーの悲鳴が聞こえたりとか。。

 開発中盤の、クラス数が数百個になったあたりから、パフォーマンスに関する問題が、
 でてきまして、リクエストからすると、本来必要のないクラスまでコンテナ内に登録している為、
 PHPのローディングが積み重なってパフォーマンス低下に繋がっていると調査しました。

 サーバーのCPUパワーと台数にまかせて、しばらく放置、、様子をみていたのですが、
 さすがにまずい状況になりまして、そこで、初期状態のコンテナを起動させ、クラスローダを
 1枚かませて、後からクラスを追加する方式に変えることでなんとか、乗り切ることができました。

 この対応によって、 @S2Component で付けた名前でコンポーネントを取得できなくなってしまいました。
 非常に惜しい気持ちでしたが、幸いにしてほとんどクラス名で呼び出ししていたため、namespace を付与する
 程度の対応で済んだのですが、今でももっといい方法があったのではないか?と思っています。

 開発を終えてみて、開発の速度は他のフレームワークと比較しても、まぁ普通と言ったところでした。
 使いやすさの点では、仕組みを理解しないと書けないプログラマの方にはかなり難解だったようです。

 今回はあまり出番がなかったのですが、POJOのように実装できるのでPHPUnitとの親和性もよさそうです。
 アノテーションは PHPDocumentor と組み合わせることによってドキュメント化に役立てることができますし、
 なにより、プログラムの見通しの良さと、柔軟さを両立させるという点では、かなり役に立ったと思っております。

 先に述べましたとおり、パフォーマンス面が最も厄介な点だったのですが、最近プロジェクトを
 抜けてから、GreeFastProcessor (GREEの藤本さんのプロダクトのようです)との相性がいいのではないか?
 と実験をしてみて思っております。
 #コンテナが半常駐化するため、クラスを全てロードされることは欠点では無くなっているのでは?と思っています。

 長くなってしまいましたが、お陰さまで、PHPでも(むしろ最近はPHPの方が?)
 エキサイティングな開発をすることができました。
 コミッターの皆様に感謝を申し上げます。ありがとうございました。

 今後ともよろしくお願いします。

/成田

 


S2Container-PHP5 メーリングリストの案内