SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

最新イベントはこちら!

Security Online Day 2025 春の陣(開催予定)

2025年3月18日(火)オンライン開催

Enterprise IT Women's Forum

2025年1月31日(金)17:00~20:30 ホテル雅叙園東京にて開催

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けの講座「EnterpriseZine Academy」や、すべてのITパーソンに向けた「新エバンジェリスト養成講座」などの講座を企画しています。EnterpriseZine編集部ならではの切り口・企画・講師セレクトで、明日を担うIT人材の育成をミッションに展開しております。

お申し込み受付中!

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

EnterpriseZine編集部が最旬ITトピックの深層に迫る。ここでしか読めない、エンタープライズITの最新トピックをお届けします。

『EnterpriseZine Press』

2024年秋号(EnterpriseZine Press 2024 Autumn)特集「生成AI時代に考える“真のDX人材育成”──『スキル策定』『実践』2つの観点で紐解く」

NetBeansで始めるRuby on Rails

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

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というアクション(インスタンスメソッド)が反応していることは確認できました。

次のページ
リンクの設定

この記事は参考になりましたか?

  • Facebook
  • X
  • Pocket
  • note
NetBeansで始めるRuby on Rails連載記事一覧

もっと読む

この記事の著者

黒田 努(クロダ ツトム)

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

EnterpriseZine(エンタープライズジン)
https://enterprisezine.jp/article/detail/858 2008/11/21 09:00

Job Board

AD

おすすめ

アクセスランキング

アクセスランキング

イベント

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング