Shoeisha Technology Media

EnterpriseZine(エンタープライズジン)

EnterpriseZine(エンタープライズジン)

テーマ別に探す

Ruby on RailsはどのようにHTML文書を作り出すのか

2008/11/21 09:00

Webシステム開発工程でかなりのウエートを占めるのが、HTMLテンプレートのコーディングです。Ruby on Railsには、この作業を効率化するための様々な工夫が凝らされています。今回は、RailsがHTML文書を生成する基本的な仕組みについて解説します。
 

URLの基本形

 Ruby on Railsの重要な特徴の1つが、URLの形式です。次のURLをご覧ください。

http://www.example.com/show_product.cgi?product_id=123

 これは典型的なCGIプログラムのURLの例です。ブラウザがこのURLに対してリクエストすると、Webサーバはあるディレクトリの下にあるshow_product.cgiというプログラムを起動します。

 Railsでは、次のようになります。

http://www.example.com/products/show/123

 これがRails式のURLの基本形です。URLのパス部分(/products/show/123)に注目してください。スラッシュ(/)で3つの部分に区切られており、それぞれに特別な意味が与えられています。

 Railsアプリケーションはそれ自体がWebサーバとして動作しています。ブラウザからこのURLに対するリクエストを受けると、URLからコントローラとアクションを決定します。Railsアプリケーションを「機械」に例えると、コントローラは「部品」に、アクションは部品の「機能」に相当します。アプリケーションは、アクションを指定してコントローラにIDすなわち「信号」を送ります。そして、コントローラは様々な処理を経て、HTML文書を生成し、ブラウザに送り出します。

 もちろん、実際の開発ではこのような単純な形式のURLだけで済むとは限りません。しかし、このURLの基本形をしっかり理解することが大切です。

コントローラとアクション

 では、コントローラとアクションが実際にどのようなコードとして表現されるかを見ていきましょう。前回の記事で作成したプロジェクトapp1を引き続き使用します。

操作手順

 1. NetBeansのプロジェクトウィンドウで[app1]→[コントローラ]の順にフォルダを展開します。

 2. [products_controller.rb]を開き、次のように修正します。

class ProductsController < ApplicationController
  def index
    @products = Product.all
  end

  def show
    @product = Product.find(params[:id])
  end
end

 3. [app1]フォルダを右クリックし、[実行]を選択します。

 4. Webブラウザが起動して、「Welcome Aboard」のページが表示されたら、アドレスバーに「http://localhost:3000/products/show/123」と記入して[Enter]キーを押します。

 5. 画面表示が次のように変わります。

解説

 まず、ソースコード全体を取り囲むclass ... endという構文に着目してください。これは、Ruby言語で「クラス」を定義する時の書き方です。

 先ほど、アプリケーションを「機械」に例えたとき、コントローラは「部品」に当たると説明しました。この比喩を引き続き使用するならば、クラスは部品の「設計図」に相当します。Railsアプリケーションは、起動時にこの設計図を見てコントローラを実体化し、ブラウザからの要求を待ちます。

 classの次にあるProductsControllerはコントローラクラスの名前です。Ruby言語では、クラス名は必ず大文字で始まることになっています。そして、Railsの規則により、コントローラクラスの名前は必ず「Controller」で終わらなければならず、コントローラの名前(products)と分離してはなりません。

クラス名の右にある記号「<」は、このクラスがApplicationControllerという別のクラスを「継承」していることを示しています。つまり、別の設計図の一部を取り込んでいる、ということです。

 次に着目していただきたいのは、クラス定義の内側にあるdef ... endという構文です。Ruby言語で「インスタンスメソッド」を定義するときはこのように記述します。

 コントローラクラスのインスタンスメソッドは「アクション」と呼ばれます。今回の修正の結果、productsコントローラには、indexとshowという2つのアクションが定義されたわけです。

 showアクションの中身はたった1行です。

@product = Product.find(params[:id])

 Product.findという書き方については前回触れました。productsテーブルからユニークなIDでレコードを検索してくれるものです。括弧の中に指定されているparams[:id]は、URLの末尾に指定されたidパラメータの値です。

 私たちは「http://localhost:3000/products/show/123」というURLでアクセスしましたので、params[:id]には"123"という文字列が格納されています。この結果、productsテーブルからIDが123であるようなレコードが検索されることになります。

 さて、実際にWebブラウザでこのURLにアクセスしてみると、エラー画面が表示されてしまいました。これは仕方がありません。データベースのproductsテーブルにはidが123であるようなレコードは格納されていないのです。しかし、とりあえず、showというアクション(インスタンスメソッド)が反応していることは確認できました。

※この続きは、会員の方のみお読みいただけます(登録無料)。


※この続きは、会員の方のみお読みいただけます(登録無料)。


著者プロフィール

  • 黒田 努(クロダ ツトム)

    株式会社オイアクス代表取締役社長。東京大学教養学部卒。在ギリシャ日本国大使館、株式会社ザッパラス、株式会社イオレでの勤務を経て、2007 年にRuby on Rails 専門の教育・コンサルティング会社オイアクスを設立。著書に『基礎Ruby on Rails』(共著、インプレスジャパン刊、2007)...

バックナンバー

連載:NetBeansで始めるRuby on Rails
All contents copyright © 2007-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5