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

» 2014年02月28日 18時00分 公開
[著:林慶、監修:山根剛司,株式会社アジャイルウェア]
前のページへ 1|2|3       

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

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

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

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

  1. <h1>Listing books</h1>
  2. <table>
  3. <thead>
  4. <tr>
  5. <th>Title</th>
  6. <th>Outline</th>
  7. <th></th>
  8. <th></th>
  9. <th></th>
  10. </tr>
  11. </thead>
  12. <tbody>
  13. <% @books.each do |book| %>
  14. <tr>
  15. <td><%= book.title %></td>
  16. <td><%= book.outline %></td>
  17. <td><%= link_to 'Show', book %></td>
  18. <td><%= link_to 'Edit', edit_book_path(book) %></td>
  19. <td><%= link_to 'Destroy', book, method: :delete, data: { confirm: 'Are you sure?' } %></td>
  20. </tr>
  21. <% end %>
  22. </tbody>
  23. </table>
  24. <br>
  25. <%= 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」を見てみましょう。

  1. class BooksController < ApplicationController
  2. before_action :set_book, only: [:show, :edit, :update, :destroy]
  3. # GET /books
  4. # GET /books.json
  5. def index
  6. @books = Book.all
  7. end
  8. # GET /books/1
  9. # GET /books/1.json
  10. def show
  11. end
  12. # GET /books/new
  13. def new
  14. @book = Book.new
  15. end
  16. # GET /books/1/edit
  17. def edit
  18. end
  19. # POST /books
  20. # POST /books.json
  21. def create
  22. @book = Book.new(book_params)
  23. respond_to do |format|
  24. if @book.save
  25. format.html { redirect_to @book, notice: 'Book was successfully created.' }
  26. format.json { render action: 'show', status: :created, location: @book }
  27. else
  28. format.html { render action: 'new' }
  29. format.json { render json: @book.errors, status: :unprocessable_entity }
  30. end
  31. end
  32. end
  33. # PATCH/PUT /books/1
  34. # PATCH/PUT /books/1.json
  35. def update
  36. respond_to do |format|
  37. if @book.update(book_params)
  38. format.html { redirect_to @book, notice: 'Book was successfully updated.' }
  39. format.json { head :no_content }
  40. else
  41. format.html { render action: 'edit' }
  42. format.json { render json: @book.errors, status: :unprocessable_entity }
  43. end
  44. end
  45. end
  46. # DELETE /books/1
  47. # DELETE /books/1.json
  48. def destroy
  49. @book.destroy
  50. respond_to do |format|
  51. format.html { redirect_to books_url }
  52. format.json { head :no_content }
  53. end
  54. end
  55. private
  56. # Use callbacks to share common setup or constraints between actions.
  57. def set_book
  58. @book = Book.find(params[:id])
  59. end
  60. # Never trust parameters from the scary internet, only allow the white list through.
  61. def book_params
  62. params.require(:book).permit(:title, :author, :outline)
  63. end
  64. 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」を見てみましょう。

  1. class Book < ActiveRecord::Base
  2. 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.

スポンサーからのお知らせPR

Coding Edge 鬮ォ�ェ陋滂ソス�ス�コ闕オ譁溷クキ�ケ譎「�ス�ウ驛「�ァ�ス�ュ驛「譎「�ス�ウ驛「�ァ�ス�ー

髫エ蟷「�ス�ャ髫エ魃会スス�・髫エ蟶キ�」�ッ闖ォ�」

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

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

メールマガジン登録

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