実際に作ってみよう
それでは、実際に作ってみよう。作るのは、オンライン・クックブックだ。皆の好きな料理のレシピを保存して、共有できる。
どんな機能があるかと言うと、
- すべてのレシピを一覧表示する
- レシピの新規登録と既存のレシピの編集
- レシピごとのカテゴリー分け機能(”デザート”とか”スープ”とか)
アプリケーションを作るときには、どのディレクトリでも好きなところを使うことができるが、この記事では c:\rails\cookbook 配下で作業をした。以降で出てくるパスはこのフォルダを基準としている。別のフォルダを使う人は、今後出てくるパスを適宜読み替えてほしい。
空のRails Webアプリケーションを作る
Railsは、WebアプリケーションフレームワークのランタイムとWebアプリケーションの作成を支援するスクリプト群で構成されている。 ここでは、全体のディレクトリ構成や、cookbook アプリケーションの雛形となるファイルを作成するために、このスクリプトを使ってみる。
- コマンドプロンプトを開き、アプリケーションを作成したいフォルダへ移動する。(ここでは、 c:\rails )
- コマンドを実行する。
rails cookbook
これで、cookbook のためのサブディレクトリが作成される。このサブディレクトリには、Rails の雛形のためのフォルダやファイルなどが含まれている。
Figure 6. 新しく作られたRails applicationのディレクトリ
Rails の雛形を動かしてみる
Railsはだいたいどんなwebサーバー上でも動作するが、Railsアプリケーションを作るのに一番簡単なのはビルトインされているWEBrick web サーバーを使うことだ。さっそくサーバーを起動して、cookbookアプリケーションを見てみよう。
- 開いているコマンドプロンプトから、 c:\rails\cookbook へ移動する。
- コマンドを実行してサーバーを起動する(Figure 7.参照)
ruby script\server
- ブラウザを開いて http://127.0.0.1:3000/ を見てみる。うまくいっていれば、Figure 8.のような画面になっているはずだ。[ 筆者注:ここまで記事と一緒に実際に試していない人は、このリンクが表示されないだろう。でも、慌てないでほしい。127.0.0.1はローカルマシンを示す指定アドレスだからだ。]
Figure 7. WEBrickサーバーを開始する
これからの作業でも使用するので、WEBrick web サーバーを起動した画面は開いたままにしておこう。
Figure 8. Railsのデフォルトページ
Rails アプリケーションのディレクトリ構成
Railsではあなたが決めなければならないことをなるべく少なくし、不要な作業をしなくていいようになっている。さっきアプリケーションの雛形を作るためにRailsの支援スクリプトを使ったときに、スクリプトはアプリケーションのためのすべてのディレクトリ構造を構築してくれている。(Figure 9.参照)この構造の中でどこにどんな必要なものがあるのかをRailsが知っているので、あなたがRailsに指定してやる必要はない。設定ファイルは不要だって言ったのを覚えているかい?
Figure 9. Railsアプリケーションのフォルダ構造
Railsによる開発でのほとんどの作業は c:\rails\cookbook\app 配下のフォルダでファイルを作ったり、編集したりすることになる。一連のフォルダの使い方をざっと説明しよう。
- controllersフォルダはRailsがcontrollerクラスを探しに行くところだ。controllerは、ユーザーからのwebリクエストを扱う。
- viewsフォルダには表示用のテンプレートが入っている。このテンプレートは、アプリケーションによって動的にデータを埋め込まれ、HTMLへと変換され、ユーザーのブラウザへと返される。
- modelsフォルダはアプリケーションのデータベースに蓄えられているデータを形作り、ラップするクラスが入っている。ほとんどのフレームワークでこのデータを扱う部分はとても複雑・冗長・雑多でエラーを含みがちになるものだが、Railsは画期的なシンプルさで解決している。
- helpersフォルダにはmodel, view, controllerの3クラスを補助するクラスはなんでも入れられる。これがあることでmodel, view, controllerのコードを小さく、範囲を絞り、まとまったものにしてくれる。
ControllerクラスとURL
それじゃあさっそくcookbookデータベースを作成して、アプリケーションを作り始めよう。まずは、Railsではcontrollerがどんな風に動作するのか、そしてURLがcontrollerのメソッドとどのようにマッピングされ実行されるのかを理解することが大事だ。
controllerクラスはユーザーからのwebリクエストを扱う。リクエストのURLがcontrollerクラスとそのメソッドにマッピングされている。どうやって動作しているんだろう?
開いてあったコマンドプロンプトのウィンドウはwebサーバーを起動したままにしておいて、二つ目のコマンドプロンプトを開こう。そして、アプリケーションの基本のディレクトリ c:\rails\cookbook.へ移動しよう。1分もかからない内にFigure 10のような見た目になるはずだ。
Figure 10. cookbookアプリケーションのcontrollerフォルダ
新しいcontrollerクラスを作るために新たなRailsの支援スクリプトを使おう。コマンドプロンプトからコマンドを実行する。
ruby script\generate controller MyTest
これでMyTestControllerクラスの骨格となる定義を持ったmy_test_controller.rbという名のファイルが出来上がる。
c:\rails\cookbook\controllersディレクトリで、ファイルを右クリックし編集(Edit)を選択する。ファイルはFigure 11のようになっているはずだ。
Figure 11. MyTestControllerを編集する
それが存在していないことをあなたが知っているものをブラウズしてみたとしたら、何が起こるのだろう?http://127.0.0.1:3000/garbage/
を試してみよう。Figure 12がその結果だ。
Figure 12. 存在しないcontrollerをブラウズする
そんなに驚くような結果ではない。今度はhttp://127.0.0.1:3000/My_Test/
を試してみよう。Figure 13のようになる。
Figure 13. 新しく作ったcontrollerをブラウズする
うーん、ちょっと違った結果になった。URLのMyTest
という箇所が新しく作られたcontrollerにマッピングされている。どうやら、Railsはこのcontrollerの中のindex
という名前のアクションを探してみたけど見つからなかった、ということのようだ。
なんとかしてみよう。Figure 14のようにindexメソッドをcontrollerクラスへ追加する。
Figure 14. MyTestController
のindex
メソッド
ブラウザを更新してみてほしい。今度はFigure 15のような見た目になるはずだ。
Figure 15. index
メソッドの実行結果
http://127.0.0.1:3000/My_Test/index
でも同様の結果になる。
もっとよくわかってもらうために、新たなアクションをcontrollerへ追加してみよう。Figure 16のdilbert
メソッドだ。
Figure 16. dilbert
メソッド
それじゃあ、http://127.0.0.1:3000/My_Test/dilbert
をブラウズして、Figure 17のようになっているのを見てみよう。
Figure 17. dilbert
メソッドによる出力
これでだいたいわかっただろう。
ぼくらのデータベースを作って、実際のcookbookアプリケーションの中で作業をしてみよう。
Cookbookデータベースを作成する
さぁ、cookbookデータベースを作り、どこに行けばデータベースが見つけられるかをRailsに教えてやろう。(これがRailsの中で唯一、あなたが設定しなければならないものだ)
-
MySQL-Frontを起動し、ローカルで動作するMySQLインスタンス (
localhost
) がルートとなっているものへログインする。パスワードは空にする。Figure 18のようになる。
Figure 18. MySQL-Front -
そこにはすでに
mysql
とtest
の二つのデータベースがある。新しくcookbookという名のデータベースを作成する。メニューからDatabase>New>Database...
を実行して、データベース名のcookbookを入力する。Figure 19を参照。
Figure 19. 新規databaseを作成するOKボタンをクリックすればデータベースができあがる。
-
Railsにデータベースの場所を教えてやるためにファイル c:\rails\cookbook\config\database.yml を編集し、データベース名を
cookbook
へと変更する。ユーザー名はroot、パスワードは空欄のままにしておく。編集が終わったら、Figure 20のようになっているはずだ。
Figure 20. 設定ファイル database.yml
Railsではdevelopment, test, productionの3モードで別々のデータベースを使うことができる。このアプリケーションではすべて同じデータベースを使う。
筆者注: この変更をするとwebサーバーを再起動する必要がある。そうしないと、Railsが新しいデータベースを参照できず以降のステップが失敗する。Ctrl-Cを押すかウィンドウを適切に閉じて、ここでwebサーバーを再起動しておこう。