連載
» 2014年02月28日 18時00分 公開

開発現場でちゃんと使えるRails 4入門(1):簡単インストールから始める初心者のためのRuby on Railsチュートリアル (3/3)

[著:林慶、監修:山根剛司,株式会社アジャイルウェア]
前のページへ 1|2|3       

scaffoldで生成されたアプリケーションの中身

 コマンド1つでデータ管理機能のscaffoldを生成できました。「rails generate scaffold」コマンドはデータを管理するために必要なソースを生成しています。その中に含まれるMVCの各種コンポーネントについて見ていきましょう。

ERBテンプレートエンジンを使ったビューの概要

 ビューのソースコードは「app/views」ディレクトリに置かれます。早速、一覧ページを表示するための「app/views/books/index.html.erb」を見てみましょう。

<h1>Listing books</h1>
<table>
  <thead>
    <tr>
      <th>Title</th>
      <th>Outline</th>
      <th></th>
      <th></th>
      <th></th>
    </tr>
  </thead>
 <tbody>
   <% @books.each do |book| %>
     <tr>
       <td><%= book.title %></td>
       <td><%= book.outline %></td>
       <td><%= link_to 'Show', book %></td>
       <td><%= link_to 'Edit', edit_book_path(book) %></td>
       <td><%= link_to 'Destroy', book, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>
<br>
<%= link_to 'New Book', new_book_path %>
app/views/books/index.html.erb

 標準のERBテンプレートエンジンを使った場合、このようにRubyのコードと思しきものが含まれるHTMLのソースコードになります。Rubyのコードが使われている個所は「<%」〜「%>」か「<%=」〜「%>」で囲まれた部分です。

 「<%」〜「%>」と「<%=」〜「%>」の違いは、サーバーを立ち上げてブラウザーから見たとき、タグ中のRubyの戻り値が「<%」〜「%>」の場合表示されず、「<%=」〜「%>」の場合表示されます。

 そのため、「<%」〜「%>」はコンテナーのイテレーターメソッド(each)や変数の代入時に使い、「<%=」〜「%>」は表示したいオブジェクトのプロパティやアンカータグを出力する「link_to」メソッドなどで使います。

 以上が主なビューの使い方ですが、今後の連載でより詳しく掘り下げていきます。

「ApplicationController」クラスを継承したコントローラーの概要

 コントローラーは「app/controllers」ディレクトリ以下に置かれます。「app/controllers/books_controller.rb」を見てみましょう。

class BooksController < ApplicationController
  before_action :set_book, only: [:show, :edit, :update, :destroy]
  # GET /books
  # GET /books.json
  def index
    @books = Book.all
  end
  # GET /books/1
  # GET /books/1.json
  def show
  end
  # GET /books/new
  def new
    @book = Book.new
  end
  # GET /books/1/edit
  def edit
  end
  # POST /books
  # POST /books.json
  def create
    @book = Book.new(book_params)
    respond_to do |format|
      if @book.save
        format.html { redirect_to @book, notice: 'Book was successfully created.' }
        format.json { render action: 'show', status: :created, location: @book }
      else
        format.html { render action: 'new' }
        format.json { render json: @book.errors, status: :unprocessable_entity }
      end
    end
  end
  # PATCH/PUT /books/1
  # PATCH/PUT /books/1.json
  def update
    respond_to do |format|
      if @book.update(book_params)
        format.html { redirect_to @book, notice: 'Book was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: 'edit' }
        format.json { render json: @book.errors, status: :unprocessable_entity }
      end
    end
  end
  # DELETE /books/1
  # DELETE /books/1.json
  def destroy
    @book.destroy
    respond_to do |format|
      format.html { redirect_to books_url }
      format.json { head :no_content }
    end
  end
  private
    # Use callbacks to share common setup or constraints between actions.
    def set_book
      @book = Book.find(params[:id])
    end
    # Never trust parameters from the scary internet, only allow the white list through.
    def book_params
      params.require(:book).permit(:title, :author, :outline)
    end
  end
app/controllers/books_controller.rb

 コントローラーは「ApplicationController」クラスを継承しており、ApplicationControllerは「app/controllers/application_controller.rb」で定義されています。ApplicationControllerで定義したメソッドは全てのコントローラーで使うことができるので、共通的に定義したいリクエストの前処理などを定義したりすることができます。有効に使いましょう。

 コントローラーはアクセスがあった際、そのURLに割り当てられている公開メソッドを実行します。そして実行の結果、別のURLにリダイレクトしたり、定められたビューをインスタンス変数を渡してレンダリングしてアクセス元に返したりします。

「rake」コマンドでURLとコントローラーのメソッドの割り当てを確認

 「BooksController」の「index」メソッドは「/books」にアクセスがあった際に実行されるようになっており、そのURLとメソッドの割り当ては「config/routes.rb」に定義されています。「config/routes.rb」の説明は次回にしますが、定義されているURLとコントローラーのメソッド(アクション)の割り当てを確認するには、次のコマンドを使います。

rake routes

 これにより、現在アプリケーションで定義されているアクションを確認できます。

Rails 4から便利機能

 また、Rails 4からはdevelopment環境で「http://localhost:3000/rails/info/routes」にアクセスするとブラウザーからルートを確認できます。さらに、定義されていないURLにアクセスするなどしてRouting Errorが発生した際には定義済みルートをブラウザーに表示してくれるようになり、とても便利になっています。

「ActiveRecord」を使うモデルの概要

 モデルは「app/models」に置かれます。「app/models/book.rb」を見てみましょう。

class Book < ActiveRecord::Base
end
app/models/book.rb

 まだ生成されたばかりのモデルは非常にシンプルです。「ActiveRecord::Base」クラスを継承しており、そこに便利なメソッドが定義されています。コントローラー中で使われていた「Book.all」や「Book.new」などが、それに当たります。Bookクラスには今後バリデーションやコールバックなどのメソッドを追加していきます。

Railsアプリケーション開発に役立つサイト

 Railsアプリケーション開発を楽に進めるために、以下に挙げるサイトを押さえておくと良いでしょう。

 Ruby on Railsの公式ガイドです。本文は英語ですが、ここに書いてある内容がRailsの公式仕様なので、正しい情報を得たい時にはこちらを参考にすると良いでしょう。

 さまざまなRailsの機能やgemの解説を動画で紹介しています。動画の言語は英語ですが、テキスト化された幾つかのコンテンツには日本語訳が付いています。

次回は、scaffoldを使わない!

 今回はRailsの基本を駆け足で紹介しましたが、いかがでしたでしょうか。

 Railsはプログラミング言語ではなくフレームワークであるため、基本的なことだけでもたくさんの要素があります。しかし、フレームワークの要素をいちいち暗記する必要はなく、困った時の索引程度に考えておけばよいでしょう。

 次回はscaffoldを使わないで開発する方法を紹介します。ご期待ください。


著者プロフィール

林 慶(Rails技術者認定シルバー試験問題作成者)

平成2年大阪生まれ。2006年から高専で情報工学を学んでいたが当時は所謂プログラミングができない工学生だった。卒業後、高専の専攻科に上がったもののマンネリ化したキャンパスライフに飽きたため休学して渡豪。そこでプログラミングに対するコンプレックスを克服するためにRuby on Railsなどでアプリケーションを作ることを覚える。

帰国後から現在までは復学し推薦システムに関する研究を行いながら、アジャイルウェアでRuby on Railsアプリケーションの開発業務に従事している。

好きなメソッドはinject。


監修者プロフィール

山根 剛司(Ruby業務開発歴7年)

兵庫県生まれ。1997年からベンチャー系のパッケージベンダーで10年間勤務。当時、使用していた言語はJavaとサーバーサイドJavaScript。

2007年よりITコンサル会社に転職し、Rubyと出会って衝撃を受ける。基幹システムをRuby on Railsで置き換えるプロジェクトに従事。それ以来Ruby一筋で、Ruby on Railsのプラグインやgemも開発。

2013年より、株式会社アジャイルウェアに所属。アジャイルな手法で、Ruby on Railsを使って企業向けシステムを構築する業務に従事。

Ruby関西所属。好きなメソッドはtap。

Twitter:@spring_kuma、Facebook:山根 剛司


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

編集部からのお知らせ

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。