今さらRuby on Railsを入門する part2
プロジェクト作成
環境構築出来たので、掲示板アプリを作っていきます。次のコマンドを実行すると、プロジェクトのディレクトリが作成されます。
# rails bbs -d mysql
オプションで-d mysqlとしないと、デフォルトではsqlite3用として作成されます。
今後Rails用のコマンドを実行する時は、作成されたbbsディレクトリ直下で行います。ディレクトリの中身を確認してみます。
bbsの中身 README Rakefile app config db doc lib log public script test tmp vendor
scaffoldで自動生成
Railsにはアプリケーションで必要な最低限のファイルを自動生成してくれるscaffoldという機能があるので、最初はこれで作ってみましょう。scaffoldを作るにはscript/generateを使います。generateはRubyスクリプトです。
scaffoldを作成 # script/generate scaffold entry subject:string name:string content:text exists app/models/ exists app/controllers/ exists app/helpers/ create app/views/entries exists app/views/layouts/ exists test/functional/ exists test/unit/ exists public/stylesheets/ create app/views/entries/index.html.erb create app/views/entries/show.html.erb create app/views/entries/new.html.erb create app/views/entries/edit.html.erb create app/views/layouts/entries.html.erb create public/stylesheets/scaffold.css create app/controllers/entries_controller.rb create test/functional/entries_controller_test.rb create app/helpers/entries_helper.rb route map.resources :entries dependency model exists app/models/ exists test/unit/ exists test/fixtures/ create app/models/entry.rb create test/unit/entry_test.rb create test/fixtures/entries.yml create db/migrate create db/migrate/20081220124727_create_entries.rb
scaffoldの引数にmodel構成を指定することで、それに合わせてmodel、view、controllerなどが作成されます。subject、name、contentフィールドを持ったentryテーブルを指定してみました。Railsは名前の付け方が厳密に定められているので注意です。ここで指定するテーブル名は単数形でなければなりません。
データベースの作成
Railsではデータベースの変更はマイグレーションで行います。scaffoldで自動生成されたものを確認してみます。
db/migrate/20081220124727_create_entries.rbファイル class CreateEntries < ActiveRecord::Migration def self.up create_table :entries do |t| t.string :subject t.string :name t.text :content t.timestamps end end def self.down drop_table :entries end end
ActiveRecordを継承したCreateEntriesクラスで、self.upとself.downが定義されています。self.upにデータベースを変更するコードを書き、self.downに元に戻すコードを書きます。この例では、self.upでcreate tableを行うコード、self.downでdrop tableするコードが書かれています。テーブル名がscaffoldで指定したentryの複数形になっています。Railsのルールで、テーブル名は複数形と定められているからで、辞書によって自動変換してくれます。
ファイル名に日付がついていましたが、バージョン管理のためです。つまり、好きな時点へスキームを進めたり戻したり出来るわけです。subversionでソースコードのバージョン管理は上手く出来ますが、データベースも同じレベルで実現出来ます。
scaffoldではマイグレーションのファイルが作られるだけなので、実際にデータベースに反映していきます。一般的にはデータベースに繋いでcreate database、となるわけですが、ここでもRailsの便利さを味わう事が出来ます。
まずはデータベース設定ファイルであるconfig/database.ymlを環境に合わせて編集しておきます。development用とtest用とproduction用の3種類が設定出来ますが、とりあえずdevelopment用だけで良いです。アプリケーションで使用するデータベース名と、権限のあるユーザとパスワードを指定しておきます。
で、
rake db:create
以上でdatabase.ymlのdevelopmentに指定したデータベースが作成されます。rakeはRubyのビルドツールで、javaで言うAntみたいなものです。rake -Tを実行することで、Railsで使える各種のタスク一覧が見られます。また、タスクを自分で作成することも出来ます。
データベースが作成されたので、テーブルを作成します。
rake db:migrate
以上でマイグレーションが実行されデータベースが最新の状態になります。ちなみにrakeタスクにはdb:migrate:downやdb:migrate:upというものもあり、マイグレーションによるバージョン管理が可能なことをうかがわせてます。
アプリケーションの確認
scaffoldでcontrollerやviewも作成されていたので、テーブルさえ作成出来ればアプリケーションを実行出来る環境は整っています。Rails内蔵のサーバーを起動してみましょう。
script/server
サーバーが起動して、http://localhost:3000にアクセスすることで確認出来ます。RailsはURLからcontrollerを判断してmodelからデータを加工してviewを表示する流れになっています。通常はmodel名でindexを表示するcontrollerが作成されているはずなので、http://localhost:3000/entriesにアクセスしてみます。
一覧画面ですが、作成したばかりなので何もデータはありません。New entryをクリックして登録画面に移動します。
これが登録画面です。2件ほどデータを追加してみます。
一覧画面にデータが追加されています。
完成
データの編集や削除も可能で、とりあえず使用出来るレベルの物が出来上がりました。慣れれば5分で実践出来ると思います。
viewやcontrollerはappディレクトリの中に作成されていて、編集するとサーバーの再起動無しに確認出来るので色々触ってみると良いでしょう。次回はこのbbsを元に色々と機能強化していきたいと思います。
つづく