Sinatra の MVC の M に Sequel を使ってみる

ライブラリの選択

SinatraMVC のモデルに関してのサポートはないので、DB を使ったアプリケーションを作成する場合は既存のO/Rマッピングライブラリを組み込むのがよさそう。サポートされていないことのメリットって、DBを使用しない場合は組み込まなくて済む(軽量化)、ライブラリに選択肢ができる、の二つくらいかな。逆にデメリットとしては、何を使えばいいのか迷うってところか。
で、迷った挙げ句(そんなに迷っていないが)Sequel を使うことに。理由は、情報が多そうだから。長いものには巻かれます。

DB はSQLite。インストール済みだし、勉強用のアプリならこれで十分でしょう。

インストール

# gem install sequel
% gem list | grep sequel
sequel (3.3.0)

3.3.0がインストールされた。

テスト

とりあえず、DB を読み込んで内容を表示させる機能を作ってみる。

コントローラ
require 'rubygems'
require 'sinatra'
require 'sequel'

Sequel::Model.plugin(:schema)
Sequel.connect('sqlite://myapp.db')
class Items < Sequel::Model
  unless table_exists?
    set_schema do
      primary_key :id
      string :name
      timestamp :created_at
    end
    create_table
  end
end

get '/' do
    @items = Items.all
    haml :index
end
テンプレート
!!! XML
!!!
%html
  - @items.each do |item|
    %div
      %span= item.id
      %span= item.name
      %span= item.created_at
テストデータの登録
% sqlite3 myapp.db
sqlite> insert into items (id, name, created_at) values (1, 'foo', current_timestamp);
sqlite> insert into items (id, name, created_at) values (2, 'bar', current_timestamp);
sqlite> insert into items (id, name, created_at) values (3, 'baz', current_timestamp);
sqlite> select * from items;
1|foo|2009-08-18 13:39:57
2|bar|2009-08-18 13:40:16
3|baz|2009-08-18 13:41:32
実行結果
<?xml version='1.0' encoding='utf-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
  <div>
    <span>1</span>
    <span>foo</span>
    <span>Tue Aug 18 13:39:57 +0900 2009</span>
  </div>
  <div>
    <span>2</span>
    <span>bar</span>
    <span>Tue Aug 18 13:40:16 +0900 2009</span>
  </div>
  <div>
    <span>3</span>
    <span>baz</span>
    <span>Tue Aug 18 13:41:32 +0900 2009</span>
  </div>
</html>

意外とすんなり出来た。登録、更新、削除もやってみないと。