作成するアプリケーションの概要
今回から,Wavesを使って簡単なアプリケーションを作成します。今回作成するのはTwitterに代表されるようなマイクロブログです。Twitterは「鳥のさえずり」という意味ですが,その名の通り,"つぶやき"とも"誰に対してでもない報告"ともとれるようなエントリを次々と作っていくシステムです。チャットとは違いリアルタイム性はありませんし,同じチャネルにいるメンバー全員に同じ内容が送信されるといった押し付けがましいところが無いのが特徴です。Twitter類似のサービスとしてはGoogleの1グループになったJaiku,ファイル共有システムを持つPownceなどがあります。今回は望みは大きく実装は小さく,とりあえずひとりでつぶやけるシステムを作りましょう。
今回使っているシステムはOSがFedora 7(coLinux),データベースはsqlite3 3.4.2,Wavesは0.7.2です。前回も書きましたが,残念ながら現状WavesはWindowsには対応していません。まもなくリリースされるバージョン0.7.3(もしかすると一気に0.8)ではWindowsもサポートされる模様です。
Wavesコマンドでアプリのひながたを作る
Twitter風のアプリケーションということで,名前はTwにしました。
Twアプリケーションの作成
waves tw
wavesコマンドを実行したディレクトリに,アプリケーションのベースになるファイルが生成されます。Ruby on Railsを使ったことがあれば,railsコマンドと同じようなものと思ってください。ただしWavesのバージョン0.7.2の生成するコードにはバグがありますので,以下の手順に従って修正する必要があります。
Wavesコマンドのバグ対応
バージョン0.7.2のWavesコマンドにはいくつかのバグがありますので,ここで修正しておきます。
lib/tasks/schema.rb
この中の8行目付近に「Blog.database」という文字列があります。これは「アプリ名.database」でなければなりません。したがって今回はTw.databaseと修正してください。
lib/tw.lib
44行目付近にある「Sequel.mysql( config.database )」ですが,このままではデータベースがMySql決め打ちになってしまいます。「Sequel.open( config.database )」に修正して,設定したデータベースに接続するようにしてください。
textileメソッドは日本語に非対応
Wiki風のマークアップを解釈してくれるtextileメソッドがビューで使えるのですが,残念ながら日本語はうまく表示できないようです。
データベースの設定とテーブル作成
データベースの設定
まずデータベースを設定します。configurations/development.rbをエディタで開いて設定します。今回はSqlite3を使います。
configurations/development.rbの修正
module Tw
module Configurations
class Development < Default
database :host=>'localhost', :adapter=>'sqlite', :database=>'db/tw_dev'
host '0.0.0.0'
port 3000
reloadable [ Tw ]
log :level => :debug
application do
use Rack::ShowExceptions
run Waves::Dispatchers::Default.new
end
end
end
end
hostは接続するホストのIPアドレスを制限します。デフォルトは'127.0.0.1'になっていますので,同じIPアドレスからの接続しか許していません。公開する場合は'0.0.0.0'などにする必要があるでしょう(公開用のproduction.rbのデフォルトはこうなっています)。coLinuxで開発していて,Windows側からcoLinux側のWavesアプリケーションに接続する場合も,'同じマシン'とはみなされないので,設定を変える必要があります。
マイグレーション
まずマイグレーション用のベースを作成します。
以下のコマンドを実行すると,schema/migrations/001_initial_schema.rbというファイルが自動的に作られます(db/tw_devも作成されます)。
マイグレーション用のファイルを作る
rake schema:migration name=initial_schema
次に実際のテーブル情報を設定します。個々の発言はwordテーブルに格納することにします。schema/migrations/001_initial_schema.rbを編集して以下のようにします。
マイグレーション用のファイルを作る
class InitialSchema < Sequel::Migration
def up
create_table :words do
primary_key :id
text :text
timestamp :created_on
timestamp :updated_on
end
end
def down
drop_table :words
end
end
最後にマイグレーションを実行すると,wordsテーブルが作成されます。マイグレーション実行前には,dbディレクトリをアプリディレクトリに作っておいてください。dbディレクトリはユーザもグループもWavesサーバからリードライトできる必要があります。自分のユーザディレクトリで開発している場合はそのままで問題ないはずです。
マイグレーション用のファイルからデータベースを設定する
rake schema:migrate
ここまでやると,コンソールからモデルが触れるようになります。

