Hatena::ブログ(Diary)

yuksewの日記

2013-03-18

フレームワーク選択のススメ

| 10:36

play!, Ruby on Rails, CakePHP 等、世の中にあるフレームワークの内

どのフレームワークを選択すればいいのか?を調べてみた。

play framework

Java もしくは Scala のフルスタックフレームワーク。ここでは 2.x について述べる

主な特徴

Ruby on Rails

Ruby のフルスタックフレームワーク

コンセプトは「DRY(Don't Repeat Yourself)」「CoC(Convention over Configuration)」

CoCとは

Convention over Configuration(設定より規約)の略

開発者が決定すべき事を減らし、単純にするが柔軟性は失わせないという思想

主な特徴
  • scaffold による強力なひな形自動作成で、特定のデータに対して以下の画面を自動で作成できる
    • 新規作成画面
    • 一覧表示画面
    • 詳細表示
    • 修正画面
    • 削除画面
  • ActionView, ERb による出力内容の生成
  • ActiveRecord によるModelの実現
    • データとソースコードが全て 1対1で関連付けられており、非常にシンプル

Sinatra

Rubyフレームワーク

主な特徴

Symfony

PHP のフルスタックフレームワーク

PHP5 にのみ対応

主な特徴

CakePHP

PHP のフルスタックフレームワーク

PHP4/5の両方に対応

「あらゆるレベルのPHPユーザが素早く快適に開発を行えること」を目標として作られている

主な特徴
  • Rails を意識した設計
  • Rails と同様にActiveRecordパターンを使用したO/Rマッパーを採用
  • 出力内容は Pure PHP で作成し、テンプレートエンジンを使用しないことも可能
  • JSON形式での出力は、基本的にはテンプレート内でPHPのjson_encodeを実行する形になっている
    • symfony と比べ、自由度は高いがその分開発者がする作業が多い
  • XSS については Sanitize というライブラリで対策を提供
    • PHPのhtmlspecialchars()と同等のエスケープ処理や、不要なタグのみを除去したりすることが可能

CodeIgniter

PHPフレームワーク

主な特徴

Spring

Java の汎用フレームワーク

Webシステム以外にも、通常のJavaアプリケーションを製作するのにも利用可能

元々はMVCフレームワークではないが、Spring MVC を利用することでMVCの機能を使用できる

主な特徴

Dependency Injection(依存性の注入)コンテナの略

オブジェクトコンポーネント)間の依存関係をソースから取り除き、プログラムの実行時までコンポーネント同士が依存関係を持たないようにするデザインパターン

オブジェクト間の依存関係をソースコードではなく、外部の設定ファイルにXML形式で記述する


Seasar2

Java の汎用フレームワーク

主な特徴

Spring に近いが、CoCの思想を取り入れており、設定ファイルに記述する内容が少なくなるように設計されている。


Scalatra

ScalaSinatra Like なフレームワーク

主な特徴
  • Sinatraと同様に、MVCのコントローラー部分のみを提供する
  • 言語が Scala であり、静的型付けであるため、コンパイル時にエラーの検出が可能

Lift

Scala のフルスタックフレームワーク

  • アプリケーションサーバとして JettyデータベースH2 Database Engine が採用されている
  • MVCのコントローラーに該当する部分は、開発者が意識せずに済むように設計されている
  • CoCに基づき、設定ファイルを書かずに済むように設計されている

フレームワークを選択するうえで、以下の特徴を考慮することにした

フルスタック or シングルタスク

フレームワークを単純にフルスタック/シングルタスクで分類できるわけではなく

複数の機能を含むがフルスタックではない、などもあり得る

CoC or Not

Rails, play 等の CoC を採用しているフレームワーク

Sinatra 等のそうでないフレームワークがある。

Rails等はフレームワークの規約に沿って実装する限り、設定ファイルなどはほぼ不要となっている。

対して、Sinatra については(実装に大きく依存するが)設定ファイルを使用しない事も可能である。

CoCを採用しないフレームワークの方が自由度が高いが、開発者の数が大きくなった場合のクオリティーはCoCを採用しているフレームワークの方が安定するものと思われるため、プロジェクトの規模によってどのフレームワークを採用するかを変更するべき?


今回調べたフレームワークの一覧

今回調べたフレームワークの特徴について、以下の表にかんたんにまとめた。

名前言語フルスタック度合規約コード自動生成備考
Springjava
Seasar2java
playjava/scala
Scalatrascala×提供するのはMVCのContollerのみ
Liftscala
CodeIgniterphp
Symfonyphp
Cake PHPphpBakeを使用する事でコードの自動生成が可能
Sinatraruby×提供するのはMVCのContollerのみ
Ruby on Railsruby

総括

今回調べたフレームワークの内、3つをピックアップした。

これらについてはサンプルアプリを製作する予定。

play
  • 元々静的言語であることと、テンプレートも静的なためコンパイル時のエラー検出が非常に強力
  • 導入する際のハードルも比較的低い
  • フルスタックであるため、多人数での開発に向いている
Ruby on Rails
  • scaffold が強力
  • メジャーであるため参考文献が多い
Scalatra(もしくはSinatra)
  • 規約が弱く、非フルスタックなため小規模なアプリケーション開発に向いている
  • 習得している言語によってどちらかを選択するのが良いと思われる

参考にした文献

http://www.atmarkit.co.jp/fjava/rensai3/springdi01/springdi01_1.html

http://jp.rubyist.net/magazine/?0017-BundledLibraries

http://www.techscore.com/tech/Ruby/Rails/other/designpattern/1/

http://itpro.nikkeibp.co.jp/article/NEWS/20071112/286911/

http://www.infoq.com/jp/news/2010/10/scalatra

http://oki2a24.com/2012/07/14/simplest-examples-of-cakephp/

トラックバック - http://d.hatena.ne.jp/yuksew/20130318/1363570567