3rdRailによるRailsプログラミング入門

第1回 初めてのRailsアプリケーション開発

富田 陽介
Banana Systems株式会社

2009/3/16

Tsubuyakiを動かしてみよう

- PR -

 それでは、作成したアプリケーションを起動してみましょう。3rdRailはRuby on Railsに特化したIDEですから、(Webサーバを含む)アプリケーションサーバの起動から動作確認までを、3rdRailウィンドウの中で提供します。

 まずは、Webサーバを起動し、作成したhitokotoモデルを一覧するアクション「index」をWebブラウザで確認してみましょう。[Railsエクスプローラー]の[コントローラー]−[Hitokotos]−[アクション]ツリーをそれぞれ展開し、indexを右クリックし、[実行]−[サーバーで実行]をクリックします。

画面6 アプリケーションの実行(画像をクリックすると拡大します)

 すぐにアプリケーションサーバが起動し、スクリプトの編集エリアに以下のような画面が表示されます。

画面7 動作確認画面(画像をクリックすると拡大します)

 早速、起動したアプリケーションを操作してみましょう。「New hitokoto」リンクをクリックすれば、新しい「ひと言」の登録画面が開きます。登録画面で「ひと言」を入力し、「Create」ボタンをクリックすれば、入力した「ひと言」がデータベースに登録されます。

 ここでは、アプリケーション操作を行いながら、以下の2点を確認しておきましょう。

・URLが「http://サーバ/コントローラ名/アクション名」となっていること

 例えば、最初にオープンした「ひと言」の一覧画面のURLは、http://localhost:3002/hitokotos/indexとなっているはずです。Ruby on Railsでは、このように、リクエスト先のURLを機械的に「/コントローラ名/アクション名」と解釈して割り当てを行うというルールがあります。

 なお、このルールは設定変更することも可能です。ただし、ルールにのっとったURLパターンを使用することで、外部のサービス利用者がURLを見ただけで、どういった処理が行われるアクションなのかを判別しやすくするというメリットもありますので、特に必要がなければ変更しない方が無難でしょう。

・[コンソール]にサーバアプリケーション実行ログが表示されていること

 [コンソール]には、アプリケーションへのアクセスの都度、呼び出されたコントローラやメソッド、使用されたテンプレート、実行時間などが逐次表示されます。上部にある動作確認用のブラウザを操作しながら、サーバ側でどういった処理が行われたのかを確認するのに活用できます。

 作成したアプリケーションの動作確認は以上です。次に、先ほどの[リソースの新規作成]により、自動生成されたファイル群の内容を確認していきます。

どんなファイルが自動生成されたのか

 ここからは、作成されたファイル群の内容を見ていきましょう。

 まず、モデルとして作成されたHitokotoクラスの内容を見ていきましょう。[Railsエクスプローラー]の[モデル]以下に作成されたHitokotoモデルをダブルクリックすると、ウィンドウ中央の編集エリアにhitokoto.rbスクリプトが表示されます。作成されたスクリプトの内容は、以下のとおりとなっているはずです。

class Hitokoto < ActiveRecord::Base

  validates_presence_of :hitokoto

end

 上記のとおり、わずか5行(実質3行)の、シンプルなスクリプトとなっています。

 1行目では、ActiveRecord::Baseクラスを継承したHitokotoクラスの定義を宣言しています。Rubyスクリプトでは、クラス継承を表記する際、このように「<」記号を使用します。

 3行目は、その記述が示すとおり、Hitokotoオブジェクトではhitokoto属性が存在することを検証するための1行です。

 もう少し細かく説明すると、validates_presence_ofは、ActiveRecordライブラリ以下で定義されているメソッドで、「:hitokoto」という表記は、このメソッドに渡されている引数という扱いになります(Rubyスクリプトでは、メソッド引数を括弧でくくる必要がないため(くくってもOKです)、上記のように、通常の文章のようなスタイルでメソッド利用の式を記述することができます)。

 5行目では、endキーワードにより、Hitokotoクラスの定義を終了しています。

 非常にシンプルな内容となっていますが、今回作成したアプリケーション範囲では、この内容で十分です。

 なぜなら、ActiveRecord::Baseクラスを継承しているHitokotoクラスは、すでにモデルとして扱われるのに十分有用な機能を備えているからです。先ほどの動作確認では、スカフォルドによって、Hitokotoオブジェクトの作成/一覧/更新/削除までが正常に行えることが確認できたと思いますが、これらの操作はすべて、このHitokotoクラスを介して行っているのです。

 以上で、モデルクラスの確認は終了です。

コントローラクラスのソースを確認しよう

 続いて、コントローラクラスを確認していきます。

 [Railsエクスプローラー]の[コントローラー]以下に作成されたHitokotosコントローラーをダブルクリックすると、ウィンドウ中央の編集エリアにhitokotos_controller.rbが表示されます。作成されたスクリプトの内容は、以下のとおりとなっているはずです。

class HitokotosController < ApplicationController
  # GET /hitokotos
  # GET /hitokotos.xml
  def index
    @hitokotos = Hitokoto.find(:all)

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @hitokotos }
    end
  end

  # GET /hitokotos/1
  # GET /hitokotos/1.xml
  def show
    @hitokoto = Hitokoto.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @hitokoto }
    end
  end

  # GET /hitokotos/new
  # GET /hitokotos/new.xml
  def new
    @hitokoto = Hitokoto.new

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @hitokoto }
    end
  end

  # GET /hitokotos/1/edit
  def edit
    @hitokoto = Hitokoto.find(params[:id])
  end

  # POST /hitokotos
  # POST /hitokotos.xml
  def create
    @hitokoto = Hitokoto.new(params[:hitokoto])

    respond_to do |format|
      if @hitokoto.save
        flash[:notice] = 'Hitokoto was successfully created.'
        format.html { redirect_to(@hitokoto) }
        format.xml  { render :xml => @hitokoto, :status => :created, :location => @hitokoto }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @hitokoto.errors, :status => :unprocessable_entity }
      end
    end
  end

  # PUT /hitokotos/1
  # PUT /hitokotos/1.xml
  def update
    @hitokoto = Hitokoto.find(params[:id])

    respond_to do |format|
      if @hitokoto.update_attributes(params[:hitokoto])
        flash[:notice] = 'Hitokoto was successfully updated.'
        format.html { redirect_to(@hitokoto) }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @hitokoto.errors, :status => :unprocessable_entity }
      end
    end
  end

  # DELETE /hitokotos/1
  # DELETE /hitokotos/1.xml
  def destroy
    @hitokoto = Hitokoto.find(params[:id])
    @hitokoto.destroy

    respond_to do |format|
        format.html { redirect_to(hitokotos_url) }
        format.xml  { head :ok }
    end
  end
end

 先ほどのモデルクラスとは異なり、若干行数が多いので驚かれたかもしれませんが、内容はごく単純なものです。今回はすべてを紹介できませんが、以下のポイントは確認しておきましょう。

・HitokotosControllerは、ApplicationControllerを継承して作成されている

 Railsアプリケーションで使用するコントローラは、基本的に、ApplicationControllerを継承して作成します。

 ApplicationControllerを継承することで、規定のURLリクエストに対してControllerを適切に割り当てられますし、Webリクエストのフィルタ処理や、レスポンス生成処理など、コントローラに必要な多くの便利な機能を利用できるようになります。

・1アクションに1メソッドが対応している

 defキーワードで始まる段落は、メソッド定義です。今回は、create(作成保存)、destroy(削除)、edit(編集)、index(一覧)、new(新規作成)、show(閲覧)、update(更新保存)の各メソッドが定義されています。

 先の動作確認で見たとおり、RailsアプリケーションへのリクエストURLは、標準で「http://サーバ名/コントローラ名/アクション名」と割り当てられるようになっています。Railsアプリケーションは、リクエストURLを上記のパターンで解釈し、リクエストに対応したアクションメソッドを実行するようになっています。

・アクションメソッド内で、Hitokotoモデルに対する操作が行われている

 例えば、indexメソッド内では、以下のような記述を確認できます。

  def index
    @hitokotos = Hitokoto.find(:all)

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @hitokotos }
    end
  end

 この行は、Hitokotoモデルに属するオブジェクトを、すべて(:all)、データベースから選択(find)し、その結果をまとめてHitokotosControllerのインスタンス変数「@hitokotos」に代入しています(Rubyではインスタンス変数の接頭子に「@」を付加します)。

 HitokotoクラスがActiveRecord::Baseクラスを継承しているおかげで、データベースからのレコード抽出をこのように記述できるというわけです。

 ActionRecord::Baseでは、上記のfindに加え、save、create、destroyなどオブジェクトを操作するためのメソッドが直感的な名前で定義されています。従って、これらのメソッドを利用することで、データベースの違いやSQLを意識することなく、作成/参照/更新/削除などの一般的なモデル操作のほとんどを実装していけます。

 以上で、コントローラクラスの確認は終了です。

見た目を担当するビューのコード

 それでは、HitokotosControllerに実装されたindexアクションが実行された際、どのようなビュー処理が行われるのでしょうか。続いて、ビューファイルを確認してみましょう。ビューファイルは、基本的に1アクションに対し1ビューファイルの形で作成します。

 [Railsエクスプローラー]以下、[コントローラー]−[ビュー]と展開し、indexビューをダブルクリックしてみましょう。編集エリアにindex.html.erbという名前のビューファイルが表示されます。作成されたビューの内容は、以下のとおりとなっているはずです。

<h1>Listing hitokotos</h1>

<table>
  <tr>
    <th>Hitokoto</th>
  </tr>

<% for hitokoto in @hitokotos %>
  <tr>
    <td><%=h hitokoto.hitokoto %></td>
    <td><%= link_to 'Show', hitokoto %></td>
    <td><%= link_to 'Edit', edit_hitokoto_path(hitokoto) %></td>
    <td><%= link_to 'Destroy', hitokoto, :confirm => 'Are you sure?', :method => :delete %></td>
  </tr>
<% end %>
</table>

<br />

<%= link_to 'New hitokoto', new_hitokoto_path %>

 上記のとおり、ビューファイルはhtmlがベースとなっています。ただし、途中で<% ... %>という表記や<%= ... %>という表記により、Rubyスクリプトがhtml中に挿入されていることが確認できると思います。

 このように、htmlファイルなどのテキストファイルにRubyスクリプトを埋め込んだスクリプトはeRubyスクリプトと呼ばれます。また、eRubyスクリプトをテンプレートエンジンとして使用するための仕組みをERBといいます。Railsアプリケーションでは、ビューを処理するテンプレートエンジンにERBを使用しています。

 上記のビューファイルでは、for式により、@hitokotos変数に含まれるレコードをhitokoto変数に繰り返し代入しながら、tr要素以下の表を1行ずつ表示していることが確認できます。また、<%=を使用することで、指定された式の評価結果、変数の中身を表示していることが確認できます。

 以上、今回のアプリケーション開発で自動生成されたファイル群を確認しました。

まとめ

 今回は、3rdRailを使用した初めてのRailsアプリケーション開発として、3rdRailの画面構成やモデル定義支援機能、コンソール(コマンダー)機能などを見ながら、スカフォルド利用による簡易的なアプリケーション開発の流れを紹介しました。

 また、プロジェクト生成から、アプリケーション作成、起動、動作確認までが3rdRailの中で行えることも確認できました。

 次回以降、今回紹介し切れなかった3rdRailのIDEとしての機能を紹介しながら、さらに実践的なRailsアプリケーション開発の流れを解説していく予定です。

3/3
 

Index
初めてのRailsアプリケーション開発
  Page1
3rdRailとは
初めて作るRailsアプリケーションは……
RubyインタプリタとRailsライブラリのインストール
最初の一歩は「プロジェクト」の作成
  Page2
3rdRailのメインウィンドウの見方を学ぼう
モデルを定義したら一気に実装完了
Page3
Tsubuyakiを動かしてみよう
どんなファイルが自動生成されたのか
コントローラクラスのソースを確認しよう
見た目を担当するビューのコード
まとめ

3rdRailによるRailsプログラミング入門

 Ruby/Rails関連記事
プログラミングは人生だ
まつもと ゆきひろのコーディング天国
 ときにプログラミングはスポーツであり、ときにプログラミングは創造である。楽しいプログラミングは人生をより実りあるものにしてくれる
生産性を向上させるRuby向け統合開発環境カタログ
Ruby on Rails 2.0も強力サポート
 生産性が高いと評判のプログラミング言語「Ruby」。統合開発環境を整えることで、さらに効率的なプログラミングが可能になる
かんたんAjax開発をするためのRailsの基礎知識
Ruby on RailsのRJSでかんたんAjax開発(前編)
 実はAjaxアプリケーション開発はあなたが思うよりも簡単です。まずはRuby on Railsの基礎知識から学びましょう
Praggerとnetpbmで作る画像→AA変換ツール
Rubyを使って何か面白いものを作ってみよう!
 一般的な画像をアスキーアートに変換するツールを作ってみる。さらに出力にバリエーションを持たせてみよう
コードリーディングを始めよう
Railsコードリーディング〜scaffoldのその先へ〜(1)
 優れたプログラマはコードを書くのと同じくらい、読みこなす。優れたコードを読むことで自身のスキルも上達するのだ
  Coding Edgeフォーラムフィード  2.01.00.91


Coding Edge フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Coding Edge 記事ランキング

本日 月間