Rubyで記述したWebフレームワークの新顔 Waves チュートリアル パート1

http://www.rubywaves.com/tutorial
チュートリアルがあったので訳してみた。まだパート1だけ。
ここだけ見るとまだ Rails との差はあまり無いです。

    • -

Waves アプリを作るのに,一番手っとり早くて簡単な方法は,こんな風に waves コマンドを使うことです。

~ $ waves blog

これはデフォルトの Waves アプリを blog というディレクトリの中に作ります。次に,このディレクトリの中の configurations ディレクトリにある default.rb を修正して,データベースに接続できるようにする必要があります。

デフォルトはこんな感じ。

module Blog
  module Configurations
    module Default
      database :host => 'localhost', :name => 'blog',
        :username => 'root', :password => ''
    end
  end
end

データベースを必ずしも使わなくてもいいということは指摘しておく価値があるでしょう。default.rb は,アプリを作ったときにデータベースが必要だと Waves が判断したに過ぎません。「データベースを使わず Waves を使う」やり方もあります。

データベースの情報を設定してください。データベースがないのなら作ってください(あるいは管理者に作るようにお願いしてください)。このチュートリアルではデータベースにアクセスできる必要があります。

次にデータベースのスキーマを設定します。アプリのルートディレクトリ(blog)で,次のようにタイプします。

rake schema:migration name=initial_schema

scheme/migrations に 001_initial_schema.rb というファイルができます。これは Railsマイグレーションと同じように機能します。

最初はこのようになっています。

class InitialSchema < Sequel::Migration

  def up
  end

  def down
  end

end

これは2つのメソッドを持ったクラスを作ります。1つはマイグレーションを "up"(バージョンを上げるのと同じです)して,もう1つはマイグレーションを "down" します。次に,blog アプリ用に最初のスキーマを書きます。まずブログエントリー用のテーブルからはじめましょう。以下のコードを up メソッドに追加します。

create_table :entries do
  primary_key :id
  text :name
  text :title
  text :summary
  text :content
end

(down メソッドには drop_table :entries を追加すべきです)

name フィールドを "キレイなURL" に使います。Waves は基本的にキレイな URL を使いますが,変えることも簡単にできます。

マイグレーションを実行します。

rake schema:migrate

これは未適応のマイグレーションを全て自動的に実行します。今は entries テーブルを生成します。

マイグレーションがちゃんと動作したか確認するには,そして Waves の魔術を見るには,Waves コンソールを使います。

~/blog $ waves-console
irb(main):001:0> M = Blog::Models
irb(main):002:0> M::Entry.all
=> []

最初に気づくのは,いま作ったアプリが Blog モジュールに含まれていて,名前の衝突から守られているということです。このため複数のアプリを一緒に動作させることかできます。

アプリケーションモジュールの中に,いくつか自動的に作られたものがあります。今回のケースでは,全てのアプリケーションモジュールを含んでいる Models モジュールを使っています。

この例では Entry モデルを使います。これは最初のマイグレーションで作った entries テーブルに対応しています。ここで Entry モデルについて一切コーディングしていないことに注目してください。

そうです。Waves が処理しています。もっと正確に言うと,単に参照するだけでアクセスできます。対応するテーブルを持たないモデルを使おうとすると,データベースのエラーになります。

irb(main):003:0> M::Comment.all
Mysql::Error: Table 'blog.comments' doesn't exist

これでマイグレーションが正しく行われたことが分かりました。続けてエントリを追加してみましょう。

irb(main):004:0> M::Entry.create :title => 'My First Entry', :name => 'first-entry',
  :content => 'Yada, yada, yada.', :summary => 'Yada.'
=> #<Blog::Models::Entry:0x1540b18 ... >
irb(main):005:0> M::Entry.all.length
=> 1

最初のブログエントリができました。これは,このチュートリアルのパート2でビューを作ったときに役に立ちます。