RubyOnRailsのチュートリアルをやってみる。
(注: RailsもMySQLも詳しくないのでおかしなところがあると思います...)
勉強のためにTutorial ( http://wiki.rubyonrails.com/rails/pages/Tutorial ) からやってみる。個人的には、10分で〜 で作成したブックマークを管理するほうが面白いと思った。予め、GettingStartedWithRails ( http://wiki.rubyonrails.com/rails/pages/GettingStartedWithRails ) を見て動くことを確認してから、Tutorial を見たほうが良いかも。Tutorialの説明は、ちょっと省略している感じなので。ということで、"Congratulations, you’re on Rails!" を見れるようにしてから次へ...。
Tutorial
Step 1
データベースの作成
Railsで利用するデータベースを作成する。
$ mysql -u root -p mysql mysql> create database rails_production;
ユーザも作成することにする。MySQLは、ユーザとデータベースは、データベーススキーマのような1対1の関係ではないようだ。なので、ユーザも作成しておく。権限は、とりあえず、全部付与しておく。MySQLって、create user じゃなくて、grant でユーザが作成されるみたい...。
$ mysql -u root -p mysql mysql> grant all on rails_production.* to rails@localhost identified by 'hoge';
テーブル作成
データベースが出来たら、Tutorialにあるようにテーブルを作成しデータを入れておく。
Rails では、何かのModel、ここでは、人(Person) を扱う時は、複数形をテーブル名とするそうな。1エントリ(行)が、1人(Person)で、それが複数のエントリになって、Peopleテーブルってことだろう。
Tutorialでは、人々(People)としている。(このNoteに書いてある、"the name of the database" って、"the name of the table" かな)。SQLは、Tutorialにあるのでそれを利用する。
mysql> create table ...(省略)...; mysql> insert ...(省略)...;
Step 2
先ほど作成したデータベースへの接続設定を行う。 (Rails関連ファイルを作成したディレクトリ)/config/database.yml をいじる。このTutorialでは、testDBは、同じにするな(developmentから、コピーされて、元々あったデータが消されるから)とあるのに、同じになっている。。。まぁ、いいか。ほんまは、良くないんだろうけど。テストをするときは気をつけねば。というわけで、ここでは、接続設定をすればよい。
Step 3
新しい Controller を作成
ブラウザからのリクエストを判断して、どのような結果を返すかを表す、Controllerを作成する。とりあえず、次のように実行する。
$ ./script/generate controller Friends list view new edit
FriendsというController とそれが管理?する動作? list, view, new, edit のそれぞれに対応したメソッドが作成され、デフォルトのViewも作成される。
Controllerは、app/controllers/ に作成され、view は、app/views 以下に作成される。UnderstandingControllers へのリンクがあったが、解かったような解からなかったような...。また今度見ることにしよう。
Step 4
Model の作成
Controllerに続き、Modelを作成する。ここは、アプリケーションのデータ部分を表し、最初に作成したテーブルへのアクセスなどもこのクラスでアクセスを行う。最初に注意書きにあったのだが、ここでは、PeopleテーブルのModelとして、Personを割り当てるので、次のようなスクリプトでModelクラスの雛型を自動生成する。
$ ./script/generate model Person
作成されたファイルを見ると、app/models 以下に person.rb というファイルが作成された。
ActiveRecord::Base の派生クラスで出来ていて、デフォルトの動作は、これらのクラスが面倒を見てくれるみたい。
Step 5
チュートリアルではここは、テストのステップだが、スキップしている。自分でやる場合は、テスト用のDBを作成して、Step2 で変更したときの test のデータベースを変更してやった。あとは、rake というコマンドでテストが実行される(Railsが、Rakefile というファイルを作成してくれるので、そこから テストが実行されるみたい)。
Step 6
Model, View, Controller の準備が出来たので実際の振る舞いを記述する。
まず、表示部分をいじる。app/views/friends/view.rhtml をチュートリアルにあるように、編集する。@person.xxx という個所があるが、これは、Controller がメンバを設定してそれを参照するってことだろう。 Java だと HttpServletRequest とかの Attribute へアクセスして値を持ってくるようなものだ。
次で Controller を編集。まぁ、どんな値を設定するかはどこかで書かないといけないし、そいうのは、アプリごとに違う。そして、その実装は Controller でやるという感じだ。
def view @person = Person.find(1) end
これは、先ほど作成した app/controllers/friends_controller.rb を変更する。これを見て解かったが、Friends Controller を作成したときの後に続く引き数は、このメソッドで、多分ブラウザのアクセスするURLによって、これらのメソッドのどれかが呼ばれるのだろう。
Person.find(1) は、最初のエントリを持ってくるものとの事だ。これは、ActiveRecord?のデフォルト実装で提供されているものみたい。
そして、後はブラウザからアクセスするだけ。 ruby script/server (WEBrickを使う場合) とかでアクセスする。このURLを見ると、
http://host:port/.../<controller名>/<controllerのmethod名>
という感じみたい。(この辺は、知らないけど、今見た感じではそう)。
ということで、 http://.../friends/view にアクセスして
Friends#view This page will display one friend Superman 123 Somewhere Smallville KS 123456
こんな風に表示されて完了ー。
Rubyの文法メモ
Railsのコードで頻出する :hoge は、 http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Symbol にあるようにシンボルを表している。Cでの関数ポインタや、JavaのMethodオブジェクトのような感じだろうか。きっとRailsのクラスの中で、このシンボルを呼び出したりなんかごにょごにょしているのだろう。API Docやソースを把握する必要がありそう。約束事っぽいので。
その他、今後の確認用メモ
- ActiveRecord でどのようにDBデータを参照するかなど。
- ControllerとURLとの関係(Controller名=URLパス?)
- Controller/Modelの自動生成時の大文字/小文字の区別は?
- view.rhtmlとcontroller.view の関係。この関係は、1対1なのか否か。 render_action というのが有るらしい。 http://rails.rubyonrails.com/classes/ActionController/Base.html
リンク
- サーバのセットアップ http://wiki.rubyonrails.com/rails/pages/GettingStartedWithRails
- Tutorial http://wiki.rubyonrails.com/rails/pages/Tutorial 参考にさせてもらいました(というか、まんまですけど)。
- MySQLクイック・リファレンス http://www.bitscope.co.jp/tep/MySQL/quickMySQL.html
- Ruby on Rails http://wiki.rubyonrails.com/rails/