Ruby Freaks Lounge

第42回 実世界のSinatra

この記事を読むのに必要な時間:およそ 4 分

コードの整理法

SinatraはMVCフレームワークでないと言及しましたが,コードの整理の仕方においては,Railsからの影響を色濃く受けていると言えるでしょう。

Sinatraで開発するとき,いわゆるビジネスロジックは,選択したO/Rマッパー内に定義するのが良いでしょう。しかし,それ以外の多くの共通処理はヘルパーに集中することになります。

先述の通り,helpersメソッドはモジュールを引数に取れますので,これを利用し,ヘルパーはモジュール内にしっかりと実装するのが良いでしょう。そして,Sinatraでのもう一つ記述が集中しやすい箇所があります。それはconfigureブロック内です。

筆者の場合,開発環境でHerokuを使っていたのですが,本番環境はスケールアウトするためにデータベースのレプリケーションや,キャッシュの設定をしており,環境での差異に悩まされた経験があります。

このとき,configureブロックの第一引数に環境を指定できることと,configureブロックが複数定義可能なことを知っていると,かなり設定をすっきりさせられます。

リスト3 configureブロックの評価順

configure do
  # set something...               ---(1)
end

configure :test, :development do
  # set something...               ---(2)
end

configure :production do
  # set something...               ---(3)
end

configure do
  # set something...               ---(4)
end

上記のリストのようにconfigureを複数定義し,環境がproduction(本番)の場合,(1)→(3)→(4)の順でconfigureブロック内が評価されます。設定の途中の値だけ可変にしたい,ということも実現できますので,是非利用してみてください。

ドキュメント

最後に,ここで紹介しきれなかった多くのことについて,特に有益な公式内のドキュメントを紹介することで替えさせていただきます。

ドキュメントのタイトル(和訳含む)内容
日本語のREADME日本語で訳されたREADME。基本的なSinatraの使い方はここで分かるはずです。
よくある質問MLで多い質問はここに記載されるので,困ったらとりあえず見ましょう。随時更新されています。
設定項目setメソッドで利用出来る組込みの設定の説明があります。⁠ログをどうやって止めるの?」等は,ここを確認しましょう。
テストの書き方Rack::Testを利用したテストの書き方が紹介されています。Test::Unitの他にも,RSpecを用いた例もあります。
事例紹介Applicationsには多くのgithubレポジトリがリンクされています。書き方を学ぶにはここが一番でしょう。

まとめ

前回のまとめを繰り返すことになりますが,Sinatraの先にはまだ地図がありません。

今回は現実世界でSinatraを使うことをテーマにしましたので,いくつかネガティブな内容もあったかもしれませんが,それらは"あくまで現状で"という保留付きだということを,ここで強調させていただきたいです。よく話題とされる開発規模の問題も,今後素晴らしいアイディアによって乗り越られる可能性は充分あります。現時点でのSinatraを過大評価することはできませんが,矮小化して語ってしまうことも非常にもったいないと筆者は思います。

恐縮ながら,この記事をきっかけにきちんとSinatraが評価され,未来に活かされれば良いなあと思っています。

2回という短い連載でしたが,皆様のSinatraを使った開発が,楽しく,自由なものになることに少しでも貢献できれば,筆者としてこれ以上の幸福はありません。ご精読ありがとうございました。

著者プロフィール

吉川毅(よしかわつよし)

Tokyu.rb,Asakusa.rb,はたまたJimbocho.rbなど,首都圏のRubyコミュニティにふらふらと出没する,浮気な文系プログラマ。お仕事では主にPHPを使ったtoC向けのサービス開発に従事。最近はソーシャルゲームを開発したりしている。Twitterほか,Web上でのidは"tsuyoshikawa"。実は回文になっている。

http://twitter.com/tsuyoshikawa