第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.html
を RAILS_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形式のファイルから複雑なデータを読み込む方法について学習します。