SOY CMS / SOY Shop

ブログトップ

SOY2フレームワークの解説 0回目

2010年04月07日

 

miyazawaです。

SOY CMSの裏側でがんばっているSOY2フレームワークを何回かに解説していこうと思います。

 

 

○きっかけ

 

世の中には有名なフレームワークやテンプレートエンジンが数あれど、要求仕様にあまり合わないため全て自分たちで開発することにしました。

 

フレームワークに要求する仕様は以下です。

 

1.PHP5以上のオブジェクト指向であること

2.一部機能だけ取り出して使うことが可能であること

3.古いPHPの書き方でもシステムを構築出来ること

4.手軽であり、シンプルであること

 

フレームワークを使った場合、「フレームワークに沿ったコードの書き方」を強制されることが多いです。もちろんメリットは数多いですが、メンテナンスもいらない一回限りのスクリプトを書く場合などにおいてはその制限が不要なこともあります。

 

スキルレベルの違いもあるため、低いスキルの人が書いたコードで無駄が多くとも他に影響しないことも重要です。(たとえばActionはここ!と決められていた場合はダメなコードが見えてしまうため、削除が可能かどうかの判断に困ることがあります。)

 

//アプリケーションを起動します

SomeFramework::run();

 

こんなコードのフレームワークもあります。シンプルで良いことです。ただ、もっと気軽にどうでもいいプログラムを書きたいこともあるんです。

 

なので、フレームワークを作りました。

 

 

○SOY2フレームワークの概要

 

SOY2フレームワークは用途・機能によって以下のパッケージに別れています。

 

・SOY2 importやオブジェクトの操作

・SOY2Controller フロントコントローラー

・SOY2HTML テンプレートエンジン

・SOY2Action Webロジック

・SOY2DAO DB操作

・SOY2Logic ビジネスロジック

・SOY2Mail メール送受信(SMTP、POP、IMAP)

・SOY2Plugin 拡張機能のベースクラス

・SOY2Debug デバッグ情報を各ツールに表示

・functions 便利関数群

 

完全なWebアプリケーションフレームワークではなく、むしろWeb以外で使うことを考えてパッケージを切り分けています。Webに特化しているものはSOY2ControllerとSOY2Actionだけなので、他のパッケージはどこでも使えます。

 

例・Smartyの代用にSOY2HTMLを使う

・cronで定期的にメールを送信するためにSOY2Mailを使う

・CSVをバッチファイルで一気にDBに投入(SOY2Logic、SOY2DAO)

 

 

○結局フレームワークって何?

 

マクロに見るとWebアプリケーションは以下のような形になります。

 

HTTPリクエスト→(フレームワーク)→レスポンス(HTMLなど)

 

このリクエストを受け、レスポンスを返す仕組みがWebアプリケーションにおいてのフレームワークと言っても良いでしょう。

 

WebアプリケーションをMVCモデルで考えた時のパターンは実は一定ではありません。

(参考:Model View Controller Wikipedia)

 

フレームワークの処理のパターンとして

1.C:ロジックを起動

M:ロジックから呼ばれ、Vに渡される

2.V:画面を表示

というのが処理を追いかけやすく、良い例にあげられます。

 

デメリットとしては画面(=V)を表示するためにもロジックを記述する必要があり、単純な(何もしないという)処理でもロジックが増えてしまいます。

 

SOY CMSで採用したパターンは

1.V:リクエストからどのVを表示するか自動的に決定

C:Vの中で必要に応じてロジックを呼び出す

2.V:表示

のようにView内部に全ての処理を行うパターンです。

 

レイヤー間が疎になっていない=ダメと思う方もいるとは思いますが、この場合Vだけで完結するため、CやMの仕様が決まっていなくてもどんどんシステムを構築することが出来ます。

 

○まとめ

 

ちょっとわからない?もちろんそうだと思います。

 

例えば、SOY ShopはUIができあがった後にシステム構築にかかった時間は実は2週間程度だったりします。

 

重要なのは早さではなく、WebアプリケーションにおいてのUIの比重が非常に大きいということです。

 

使いやすいUIに集中出来るフレームワーク、それがSOY2フレームワークなのです。

 

次回以降、パッケージについて個別に解説していきます。

一回目は「SOY2DAO〜SQLを書きたくないけど書きたい時もある〜」の予定です。