簡単インストールから始める初心者のためのRuby on Railsチュートリアル:開発現場でちゃんと使えるRails 4入門(1)(3/3 ページ)
エンタープライズ領域での採用も増えてきたRailsを使ってWebアプリケーションを作るための入門連載。初回はRailsの概要とMVCモデルとの関係、Rails 4の新機能・変更点、開発環境、インストール、scaffoldでアプリケーションを作る手順などを紹介します。
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 %>
標準の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
コントローラーは「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
まだ生成されたばかりのモデルは非常にシンプルです。「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:山根 剛司
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- Ruby on Rails3で学ぶWeb開発のキホン(2):Railsの全体像を知ろう
Railsは、機能ごとに異なるコンポーネントで構成されています。Railsの全体像を見渡すために、今回はこのコンポーネントの種類や機能を紹介します。 - Railsで目指せ、情熱エンジニア(1):Railsを始めたきっかけ
ロンドン在住のRailsエンジニア、井上真氏による初中級者向け読み物と技術解説の新連載。第1回はRails学習の体験談だ - Rails情報源の歩き方(前編):要チェックのRails関連情報源はここ!
Ruby on Railsは英語なら情報が豊富にあります。ただ、そもそもどこを見ていいのか分からないという方も多いのではないでしょうか。ここでは重要な情報源となり得るサイトを紹介します(この記事はRailsDevCon2010で西村が行った発表をベースにしています)。 - Rails Girls Tokyo レポート:キラッキラな「Ruby on Rails」の世界へ――Rails Girls 25人が集結
3月1〜2日、「Rails Girls Tokyo」が開催された。女子力あふれるイベントの様子をレポートする。 - 3rdRailによるRailsプログラミング入門(1):初めてのRailsアプリケーション開発
Ruby/Ruby on Rails統合開発環境「3rdRail」。これを使ってWebアプリケーション開発の流れを習得してみよう - Ruby on RailsのRJSでかんたんAjax開発(前編):かんたんAjax開発をするためのRuby on Railsの基礎知識
実はAjaxアプリケーション開発はあなたが思うよりも簡単です。まずはRuby on Railsの基礎知識から学びましょう - 実用レベルに達したJRubyを体感してみよう(前編):Aptana RadRailsで始める JRuby on Rails超入門
もはやJava技術者にとって無視できない存在になったRuby。Javaと融合したJRubyの特徴や利点について解説します - 小山博史のJavaを楽しむ(4):(Java+Derby)* Ruby on Rails プログラミング
世の中には、JavaなまりのRubyである「JRuby」という言語がある。しかも、それがRailsで使えるとなると……。試してみない手はないだろう - RoRでCGMサイト構築虎の巻
大規模なコミュニケーションサイトをRubyで開発する。インフラ面、アプリケーションの構成で気を付けるべきポイントとは何か? - 資格試験は転職に役立つか:Rails技術認定試験がスタート、合格者に聞いた
- @IT自分戦略研究所 資格辞典:Rails技術者認定試験(Rails 3 Certified Programmer)
- RubyKaigi 2009でRails開発者が講演:“Railsという現象”とコミュニティの性質
- Rubyでアジャイルプロトタイピング(3):アジャイルプロトタイピングとRuby on Rails
WebアプリケーションフレームワークRuby on Rails(RoR)の紹介と、RoRがアジャイルプロトタイピングに寄与する特徴を解説する - 安藤幸央のランダウン(29):WebプログラマはRailsに乗るべきか?
- 安藤幸央のランダウン(30):Ruby on Railsのチームから学ぶ仕事術
- JavaエンジニアのためのRuby入門(3):Strutsの知識を基に、Ruby on Railsを学ぶ方法
両者は共にMVC準拠。慣れ親しんだStrutsと比較しながら、Ruby on Railsを学ぶ。これであなたも、立派なRubyエンジニア? - Javaから見たRuby on Rails:Java+Sturtsの視点からRailsを捉える
PHPやPythonは気にならなかったJavaプログラマの皆さん、さすがにRailsだけは気になるのでは? 凄腕プログラマがその評価にチャレンジした