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でビューを作ったときに役に立ちます。