… ので、インストールしてみたら
% sudo gem install merb (snip) Successfully installed merb-1.0 40 gems installed
依存する gem が大量すぎるw
ちなみに FreeBSD 6.3R に入れるときには do_sqlite3 という gem が sqlite3.h が見付からないと言ってこけるので、
% sudo gem install merb -- --with-opt-dir=/usr/local
とかしてやらないといけなかった。 なんでやねん。
続く…… かも。
とりあえず Merb Wiki の HOW TO Topics を参考にさらっといじってみようと思っているところ。 で、Generate your first app にならって
% merb-gen app my-first-app
と実行してできたものを眺めた感じ。
とりあえずテストに関しては RSpec と ZenTest (の autotest) が前提とされてる風味。 あとバージョン管理は git を想定しているらしく .gitignore なんつーファイルも出力されてた。
app ディレクトリの構成は Rails を踏襲してるみたいだけど、controllers/exceptions.rb てのがあったり、それに関する views が用意されてたりする。 Rails で failsafe 的なエラーページにいろいろ細工したい場合って結構面倒なんだけど、そこら辺を簡単にしてくれる仕組みなのかな。
あと Rails だと application_helper.rb なところが global_helpers.rb になってたりとか。 models/user.rb というのが用意されてて、ちょこっと書き換えれば merb-auth パッケージのユーザ認証がすぐに使えるようになるみたいな感じなのかな? まだ外面しか見てないから違うかもだけど。
他にも config/rack.rb とか、Rack に関するデフォルト設定なんかも入ってるみたい。 そもそも Rack って具体的に何するものなのかイマイチわかってないんだけど。 (なんか WEB サーバとアプリの間に入るミドルウェア的なものみたいなんだけどなんかよくわからん。つーかまともに調べてない。)
How to Quickstart Merb Slice Development を斜め読みしただけだが。
要するにアプリケーションのサブセットを gem として登録しておいて、他のアプリから呼び出すことで共通して使えるということかな。 これの何が嬉しいのか考えると、おそらくはアプリケーションの粒度を小さくできることなんじゃないだろうか。
例えば何かユーザ認証が必要なサイトを作ろうとすると (ちょっと極端に書くけど)
こんな感じかしら。 んで、スライスを使うことでコピペをすることなく 3 番目の方法を採れるようになる。 そうすると WebAPI みたいな余計な手間をかける必要無くアプリケーションを細かく分離できるようになるので、メンテナンスが楽になったり、負荷分散がしやすくなったりする…… ような気がする。
結構好みな機能のような気がするので、いずれもう少し突っ込んで調べてみよう。
Parts を斜め読み。
Rails の render :partial をより一般化したようなものかな。 コントローラ部分もあるから、その分 render :partial より柔軟性がありそう。 ついでにスライスで切り出しておけば再利用も簡単、という寸法だろうか。
Merb はこういう小さく切り分けるための仕組みが充実してる感じがするね。
(訳注: 以下カッコで囲っている部分は基本的に訳注)
Merb と Rails は違うものだけど似たところもあるよ。 例えば、両方とも MVC ベースなフレームワークだし、ルータ機構を持っているし、Ruby を使っている。 (Rails と一緒にすんなボケ、って言ってるようにも見える気が)
| Rails | Merb |
| script/server | merb |
| script/console | merb -i (webrat という gem が必要と言われるので入れる必要あり) |
| script/generate | merb-gen (script/destroy の場合は -d オプションを付ける) |
| redirect_to article_path(@article) | redirect url(:article, @article) |
| respond_to | provides :xml, :js, :yaml (使う場所が違うから 1:1 で関連付けていいのか微妙 |
| format | content_type |
| render :xml => @article | render @article |
| render :file => 'public/404.html, :status => 404 | raise NotFound |
| logger | Merb.logger (e.g. Merb.logger.info("Setting coordinates")) (むやみ名前空間汚さないのがステキ) |
| before_filter | before |
| render :partial | partial |
| RAILS_ENV | Merb.environment (むやみに名前空間(ry ) |
| flash[:notice] | message[:notice] |
ここまで。
ちなみに respond_to に関してだけど、Rails の場合
def an_action
@record = Record.find(params[:id])
respond_to do |format|
format.html
format.xml { render :xml => @record }
format.yaml { render :text => @record.to_yaml }
end
end
みたいな感じになるんだけど、Merb だと
provides :xml, :yaml def an_action(id) @record = Record.get(id) display @record end
てな風にして、Record クラスの方に
def to_xml # xml な文字列 end def to_yaml # yaml な文字列 end
としておくような感じみたい。 display メソッドは要求された Accept-Type に応じてテンプレートを探して、あればそれをレンダリング、無ければ与えられたオブジェクトの to_#{type} メソッドを呼んで結果をレスポンスとして戻すというような動作らしい。 だからテンプレートを用意しておくならモデルクラスにメソッドを用意する必要は無いはず。
結局ヒドくハマったのはワープの面だけだという(疲
でもラスボスの倒し方がステキすぎたんで今までのストレスも吹っ飛んだ。 もうこのラスボス戦だけで元取れた気がするわ。 FINAL 波動砲は超燃える。 リアルで「おお〜!!」って声出ちゃったよ(笑
あとは、とりあえず DELTA の R13 エンディングの続きらしいステージ 3.5 をやっときたいんだけど、必要な機体はいつ手に入るのかねー。
177 名前:以下、名無しにかわりましてVIPがお送りします[] 投稿日:2008/11/10(月) 20:47:46.54 ID:44eec3rb0
2枚目のディスクに入ったらイキナリ振り子が揺れててエピソードが回想で進んでいった
何を言ってるかわからないと思うが俺もなにをいってるのか(ry
なんというゼノギアスw
いつになったらこの展開が終わるんだろうと思いながら、結局最後までそのままだったときの絶望感は完全にトラウマ。 「Disc 2をないことにすれば名作である」という言葉に「まあ確かにそうかもなあ」と、ついついつられてゲームアーカイブでゲットしてしまったがトラウマが邪魔をしてプレイできないという。