この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
こんにちは。
KBMJのエンジニアの高瀬です。
今回、ruby on railsに関する技術コラムを書くと言う事で、
scaffoldでプログラムを作ってみて、またそのプログラムは
どの様にして作られているか解説します。
Scaffoldってそもそも何?
最近のアプリケーション(特にWeb)は、アプリケーションのデータを
DB上で管理する事が多くなっていますが、
そういったDB上のテーブルを操作するプログラムを作りたい場合に、
基本的なテンプレートを提供してくれるのがscaffoldです。
scaffoldを使うと、簡単なアプリケーションがそれこそ10分で
出来上がるので、かなり重宝します。
実際にScaffoldで作ってみる。
まず、Scaffoldを使ってアプリケーションを作ってみます。
最初に、railsでscaffold_testプロジェクトを作ってみましょう。
コマンドプロンプト上で、
rails scaffold_test
と入力してみてください。(>は入力しなくて良いです。)
大量に[ create ~~]と出てきたと思います。
今後は、このプロジェクト上で作業を行うので、
cd scaffold_test
で、カレントディレクトリを移動しておいてください。
次に、scaffold_testプロジェクト内でscaffoldを作ってみます。
扱うテーブルを決める必要がありますので、とりあえずメンバー管理として、
Memberモデルをつくり、名前(name)と説明(discription)と誕生日(birthday)だけ管理しましょう。
ruby script/generate scaffold Member name:string discription:text birthday:datetime
これで、scaffoldの土台は出来ました。
ですが、肝心のdbがないので、 DBを作成します。
rails 2.0から、db:createが出来たので、そのコマンドを使います。rake db:create
(ここでは、DBの作成方法のエラーが出た場合や、1.x系の話は割愛します)
DBが出来たら、scaffoldで作成されたmigrationファイルからテーブルを作成します。
rake db:migrate
これでテーブルが出来たのでサーバーを立ち上げて、
プログラムにアクセスしてみましょう。
ruby script/server
を実行し、 下記のURLにアクセスしてください。
http://localhost:3000/members
「Listing members」と表示されるページにアクセスできると思います。
これで、New memberと表示されているリンクをクリックすると
メンバーが登録できます。
これだけで簡単なメンバー管理システムの出来上がりです。
scaffoldのソースを見てみる。
途中で実行した
ruby script/generate scaffold Member name:string discription:text birthday:datetime
で、管理する項目や、項目の属性を指定しているのですが、
今のプロジェクトのソースを見てみましょう。
scaffold_test フォルダの下にある、
app/controllers/members_controller.rbを何かのテキストエディタで
開いてみてください。
自分が書いた覚えのないプログラムが存在していると思います。
実は、ruby script/generateコマンドを実行した時、
exists app/models/
exists app/controllers/
exists app/helpers/
create app/views/members
exists app/views/layouts/
exists test/functional/
exists test/unit/
create app/views/members/index.html.erb
create app/views/members/show.html.erb
create app/views/members/new.html.erb
create app/views/members/edit.html.erb
create app/views/layouts/members.html.erb
create public/stylesheets/scaffold.css
dependency model
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/member.rb
create test/unit/member_test.rb
create test/fixtures/members.yml
create db/migrate
create db/migrate/001_create_members.rb
create app/controllers/members_controller.rb
create test/functional/members_controller_test.rb
create app/helpers/members_helper.rb
route map.resources :members
と、大量にメッセージが出たと思いますが、ここで、createと出ている行は、railsが自動で
ソースコードを作ってくれています。 create app/views/members
create app/views/members/index.html.erb
create app/views/members/show.html.erb
create app/views/members/new.html.erb
create app/views/members/edit.html.erb
create app/views/layouts/members.html.erb
create public/stylesheets/scaffold.css
create app/models/member.rb
create test/unit/member_test.rb
create test/fixtures/members.yml
create db/migrate
create db/migrate/001_create_members.rb
create app/controllers/members_controller.rb
create test/functional/members_controller_test.rb
create app/helpers/members_helper.rb
というわけで、次回はこのコードがどの様にして作られているか、解説して行きたいと思います。