Webフレームワークの新しい波 Waves探訪記

第3回 シンプルなWebアプリを作る(その1)

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

作成するアプリケーションの概要

今回から,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

ここまでやると,コンソールからモデルが触れるようになります。

著者プロフィール

松永肇一(まつながけいいち)

株式会社ライフメディア 創造推進部プロジェクトマネージャ。東京都出身。千葉大学工学部での卒論テーマは人工知能関連だったが,富士通に入社後はPCのソフトウェア開発に関わる。"GNU for Towns"のために,リチャード・ストールマンに会いにいくような妙な仕事を経て現職。Ruby on Railsを使ってWebアプリを開発する毎日。ブログは「ma2の日記」。

URLhttp://d.hatena.ne.jp/ma2/

コメント

コメントの記入