第5回 テンプレートファイルの配置と命名規則

2007/11/12

Ruby on Rails を利用する上で大切なことは、ファイルの配置と命名に関する規約を覚えることです。

面倒に思うかもしれませんが、一定の規約に従うことで、他のデザイナーやプログラマーたちとの共同作業において誤解が生じにくくなります。

では、コマンドプロンプト(ターミナル)を開いて、前回「RailsのインストールとWebサーバの起動」で作成した sample ディレクトリに移ってください。このディレクトリを RAILS_ROOT と呼ぶことにしましたね。今日は、 app ディレクトリに移動して、その中をのぞいてみましょう。

> cd sample
> dir

なお、入力例の行頭の > は、入力しないでください。また、Mac OS X や Linux では、dir の代わりに ls コマンドを使用してください。

app ディレクトリには4つのサブディレクトリが存在していて、それぞれの役割は次の通りです:

  • controllers -- テンプレートに渡すデータを用意するプログラムを置く
  • helpers -- テンプレートから呼び出す自作のプログラムを置く
  • models -- データベースアクセスのためのプログラムを置く
  • views -- テンプレートファイルを置く

この連載では models ディレクトリには一切触れません。当面の間 helpers ディレクトリのことも忘れて結構です。

前回、RAILS_ROOT/public ディレクトリに、既存のHTMLファイルをそのまま置いて、Webrick を起動してブラウザで表示してみました。HTMLファイルを一つ選んで、拡張子を .html から .rhtml に変更して、RAILS_ROOT/app/views ディレクトリに移動してください。

その際、気をつけることが一つあります。必ず、RAILS_ROOT/app/views ディレクトリの更に下のサブディレクトリの下に置く、ということです。初期状態では、サブディレクトリが存在しないので、適当な名前で作ってください。ここでは、top という名前にしておきましょう。例として、RAILS_ROOT/public/about.htmlRAILS_ROOT/app/views/top/about.rhtml に移動したとします。

次にすることは、コントローラの作成です。これは、テンプレートに渡すデータを作成するプログラムのことです。このプログラムのファイル名は、テンプレートファイルを置いたサブディレクトリの名前に _controller.rb を付けたものになります。私たちの例で言えば、top_controller.rb となります。これを RAILS_ROOT/app/controllers ディレクトリに設置します。

top_controller.rb の中身は、次のようなきわめて単純なものです。

class TopController < ApplicationController
end

このプログラムは、ApplicationController クラスを継承する TopController クラスを定義しています。クラス および 継承 は、オブジェクト指向プログラミングの重要な概念です。それぞれいろいろな意味を持ちますが、Web制作の文脈では、「クラス」は後で説明する「アクション」の入れ物に過ぎません。やや抽象的ですが、「継承」は別のクラスから機能を受け継ぐことであると理解しておいてください。なお、Ruby 言語では、クラス定義は class で始まり end で終わります。また、継承関係を表すのに < という記号を用います。

さて、先ほどの top_controller.rb に、もう少しコードを付け加えて、本来の役割である「テンプレートに渡すデータを用意する」働きをさせてみましょう。

class TopController < ApplicationController
  def about
    @title = 'このサイトについて'
  end
end

def about から end までは、メソッドを定義する Ruby 言語の構文です。メソッド とはサブルーチンの一種で、複数の文をまとめて名前で呼び出せるようにしたものです。コントローラ内で定義されたメソッド(正確には、パブリックなインスタンスメソッド)をアクションと呼びます。

@title は第2回で学んだインスタンス変数です。インスタンス変数はテンプレートから参照することができます。これまでコントローラはテンプレートにデータを「渡す」と表現してきましたが、実際には用意したデータをテンプレートに「取らせる」という感じです。

お気づきのことと思いますが、コントローラはディレクトリに対応し、アクションはテンプレートに対応しています。top_controller.rb コントローラの about アクションが、RAILS_ROOT/app/views/top ディレクトリの about.rhtml テンプレートのためにデータを用意する、という関係です。

Rails による Web 制作では、この関係をよく理解することが大切です。

次回は、YAML形式のファイルから複雑なデータを読み込む方法について学習します。