Webフレームワークの新しい波 Waves探訪記
第7回 Wavesの未来
前回まで,簡単なWebアプリケーションの開発を通じてWavesの特徴をさぐって来ました。最後に現在進行形で進化を続けているWavesの現状についてまとめたいと思います。
Waves 0.7.7
7月11日にWaves 0.7.7がリリースされました。これは6月にリリースされた0.7.5をベースにしたものです。0.7.5には,多数の重要な変更点や改良点が含まれています。以下にまず0.7.5の概略をまとめます。
Waves 0.7.5における修正点
Windowsサポートの向上
今までのWavesは事実上Windowsでは使い物になりませんでした。特にコマンドラインで利用する各種のツールが正常に動作しませんでした。0.7.5ではこの点を改良して,Wavesアプリケーションの生成やrakeによるマイグレーションがWindowsでも正しく動作するようになりました。
rake schema:migrationのバグの修正
rake schema:migrationが正しいバージョンを認識できなくなるバグが修正されました。
複数テンプレートの優先付け
利用できるテンプレートが複数ある場合,アルファベット順に優先されるようになりました。
Waves 0.7.5の強化点
レイアとファウンデーションの導入
Waves 0.7.5には,Railsで言うプラグインの仕組みが導入されました。Wavesではレイア(Layer)と呼び,Wavesのコア部分はレイアを使うように書き換えられました。ファウンデーションとは,複数のレイアからなるアプリケーションの基本構造のことです。
完全にORM非依存に
元々Wavesは,特定のO/Rマッパーとの依存性を下げ,O/Rマッパーを切り替えられるような仕組みを目指してきましたが,レイアにより,この仕組みは一応の完成を見たといってよいでしょう。ただしデフォルトではSequelレイアが付いてくるので,Sequelが最もよく使われるという点は変わらないでしょう。O/Rマッパーを完全に取り除いてWebアプリケーションを作ることも簡単にできるようになりました。
複数のRackハンドラに対応
mongrel,thin,ebbといったRackハンドラが使えるようになったため,様々なWebサーバをより簡単に使えるようになりました。設定ファイルで切り替えます。
deffered?メソッド
thinやebbといったイベントドリブン型のWebサーバは「リクエストが短時間に終わる限り,スレッド型のサーバよりずっと高速」という特徴があります。ところがファイルアップロードのような時間のかかるリクエストが発生すると,これが全体をブロックしてしまうため性能が低下します。deffered?メソッドは,イベントドリブン型Webサーバにおいて,時間のかかるリクエストを指定する仕組みです。defferd指定されたリクエストは,スレッドで処理されるため,イベントドリブン型とスレッド型の両者のメリットを生かすことができます。
テスティングフレームワークの導入
Baconという,RSpecクローンが組み込まれています。これが今後Wavesにおける標準のテスト環境になります。
賢いwavesコマンド
アプリケーションのひながたを生成するwavesコマンドはRakeGenで書き直され,既存のアプリケーションのアップデートや,より慎重な上書き時の処理などを行うようになりました。
互換性について
デフォルトのRDBはsqlite3
以前はMySQLでしたが,0.7.5からsqlite3になっています。Railsもsqlite3になりましたし,今後お手軽なRDB環境はsqlite3ということになるのかもしれません。
startup.rb
レームワークは,startup.rbからrequireされるようになりました。
デフォルトのモデル,ビュー,コントローラ
ファイルとして生成されなくなりました。フレームワークから動的に生成されます。
rakeタスクの置き場所
lib/tasksになりました。つまりより正しい場所に配置されるようになりました。
lib/{アプリ名}.rb
廃止されました。代わりにlib/application.rbが使えますが,完全な置き換えではありませんので注意してください。
Waves 0.7.5
上記の修正や強化に加えて,0.7.7では主に以下のような変更が加えられています。
ActiveRecordレイアの追加
ActiveRecordをO/Rマッパーとして利用するためのレイア(プラグイン)が追加されました。これでRailsで使い慣れたActiveRecordをそのまま使うことができます。
rake waves:freezeとrake waves:unfreeze
Railsにもあるバージョンを固定するrakeタスクが追加されました。
Hamlのサポート
Hamlが追加されました。Hamlは,非常にシンプルな記法が特徴のテンプレートエンジンです
rake generate:modelの復活
なぜか使えなくなっていた(単なるバグでしょうか?)rake generate:modelが復活しました。
Wavesの今後
Wavesはそのバージョン番号を見ても分かるとおり,まだまだ発展途中です。今後のロードマップには,以下のようなことが予定されています。
テンプレートエンジンの追加
次のテンプレートエンジンとして,SassやTenjinが候補に挙がっています。Sassはcssを動的に生成することを目的にした面白いエンジンで,Hamlと組み合わせて使われているようです。Tenjinは国産のテンプレートエンジンで,複数の言語に対応しており,高速性が売り物です。
キャッシュのサポート
まだ公式のキャッシュメカニズムは組み込まれていません。
Filebaseサポート
Filebaseは,sqliteのようなライブラリ型のRDBです。全てrubyで記述されていて,いずれはWavesにバンドルされ,単純なRDB処理はすべてFilebaseで行うようになるようです。
セッション
Wavesのセッションサポートはシンプルなものなので,より高度なハンドリング(データベース格納など)が望まれています。
アンドゥ・リドゥ
Webアプリケーションにはあまり見られないアンドゥ・リドゥですが,もし使えたら非常に便利なものに違いありません。Railsのプラグインにインスパイアされて,Wavesでも開発の機運が高まっているようです。ちなみにRails Undo Redoプラグインの作者はWavesのコア開発者でもあります。
まとめ
いかがでしょうか。Wavesが野心的なプロジェクトであることはお分かりいただけたかと思います。これからもまだ大きく変更される余地がありますので,ビジネスの現場では使いづらいかもしれません(それを開発者側も認識しているので1.0未満のバージョン番号が振られているのでしょう)。しかし,Wavesが1.0に到達するとき,Ruby on Railsの有力なライバルとして,Wavesが扱われるのではないかとひそかに期待しています。


