Ruby Freaks Lounge

第12回 Ramazeを使って120行で作る単語帳アプリ

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

コントローラ

最後に,アプリケーションの本体であるコントローラを見てみましょう。今回の単語帳アプリはとてもシンプルなので,コントローラは1つしか定義していません。

リスト2 コントローラの例(app.rb)

class Words < Ramaze::Controller
  map '/'
  engine :ERB
  layout 'default'

  def index
    @words = Word.all
  end

  # (略)
end

コントローラクラスは,Ramaze::Controllerから継承させます。クラス名に決まりはありませんが,⁠MainController」のようにControllerが付いた名前にするか,今回の「Words」のように操作する対象を複数形にした名前を付けることが多いようです。

Ramazeではコントローラクラスの最初にコントローラの設定を書きます。⁠engine :ERB」⁠layout 'default'」は前述の通り,ビューのための指示です。残りの「map '/'」は,このコントローラをどのようなURLに割り当てるかの指示です。今回は「'/'」に割り当てているので,⁠http://localhost:7999/index」でindexメソッドが,⁠http://localhost:7999/new」でnewメソッドが呼ばれます(indexメソッドはアクション名がない「http://localhost:7999/」というURLにアクセスされた場合にも実行されます)⁠

indexメソッドは登録されている単語の一覧を表示します。といっても,コントローラではデータベースからデータを取ってくるだけで,あとの処理はview/index.html.erbで行っています。単語の一覧を作っている部分を見てみましょう。

リスト3 ビューの例(index.html.erb)

<ul>
  <% @words.each do |word| %>
    <li><%= a(word.name, :show, word.id) %></li>
  <% end %>
</ul>

コントローラで用意した変数@wordsを使って,各単語の表示ページへのリンクを作成しています。aメソッドはRamazeのLinkヘルパーで用意されている,リンクタグを簡単に作成するためのメソッドです。⁠ヘルパー」は,コントローラに便利な機能を追加するために用意されているRamazeの機構です。通常のヘルパーは「helper :cache」などのようにして読み込みますが,LinkヘルパーやRedirectヘルパーなどよく使われるヘルパーは読み込みなしで使えるようになっています。

単語のランダム表示

もう一つ,単語を一つランダムに表示するrandomメソッドの実装を見てみましょう。

リスト4 コントローラの例(app.rb)

  def random
    at = rand(Word.count)
    @word = Word.first(:offset => at)
    render_view :show
  end

まず何番目の単語を表示するかを,Ruby組み込みのrandメソッドによってランダムに決めています。次に,表示する単語をデータベースから読み込みます。firstメソッドは,指定した条件を満たす最初のカラムを取得するDataMapperのメソッドです。

画面表示はshowメソッドと全く同じなので,view/random.html.erbは用意せず,render_viewメソッドでview/show.html.erbを表示させています。render_viewメソッドは前述のRedirectヘルパーの提供するメソッドです。

参考リンク

以上,駆け足ですがRamazeの機能と実践について解説してきました。より詳しい情報は以下のサイトを参考にしてください。

  • Ramaze : index:Ramazeの公式サイトです。
  • Journey to Ramaze:Ramazeに関するWeb Bookです。まだ一部が書きかけですが,Ramazeの詳細について知るにはとても役に立つでしょう。
  • ramaze-users:筆者の公開しているWikiです。Ramazeに関する日本語の情報があります。

まとめ

4回に渡って,Rubyの新しいWebアプリケーションフレームワーク,SinatraとRamazeを紹介してきました。両者に共通するのは「シンプルさ」を追求する心です。コードがシンプルであれば,アプリケーションの全体を楽に把握することができます。アプリケーションの全てのコードが自分の思いのままになる楽しさをぜひ体験してみてください。

次回は,Railsのような高機能を指向したフレームワーク「Merb」が取り上げられる予定です。お楽しみに!

著者プロフィール

原悠(はらゆたか)

NaClこと「ネットワーク応用通信研究所」勤務。さまざまなプログラミング言語に興味を持つ。最近触っている言語はRuby,Scheme,JavaScript,Englishあたり。

URL:http://route477.net/

著書

コメント

コメントの記入