scaffoldの中身を理解するためにMVCコンポーネントと7つのアクションを個別で自作する:開発現場でちゃんと使えるRails 4入門(2)(1/3 ページ)
エンタープライズ領域での採用も増えてきたRuby on Railsを使ってWebアプリケーションを作るための入門連載。最新版の4に対応しています。今回は、便利なscaffoldをただ使うだけではなく、中身をちゃんと理解するためにMVCコンポーネントと7つのアクション「index」「show」「new」「create」「edit」「update」「destroy」を個別で自作しルーティング設定をしていこう。
開発現場でちゃんと使えるように、scaffoldの中身を理解する
前回の「簡単インストールから始める初心者のためのRuby on Railsチュートリアル」では、「Ruby on Rails」(以下、Rails)の概要とMVCモデルとの関係、Rails 4の新機能・変更点、開発環境、インストール、scaffoldでアプリケーションを作る手順などを紹介しました。
特に「Railsの『scaffold』でデータの管理機能を作る」の章以降で、「rails generate scaffold」コマンドを使ってアプリケーションの「scaffold」(土台、基盤)を作りました。
「rails generate scaffold」コマンドは、取り扱おうとしているデータに関する各種コンポーネントを生成してくれます。それらのコンポーネントはブラウザーでデータを一覧したり、作成したりする機能を提供してくれました。
生成されたscaffoldはRailsの主要機能なので当たり前ですが、とてもよくできています。データベースに対するCRUD(生成、読み取り、更新、削除)のための機能が実現されており、それらの実装を身に付けることで、さまざまな機能に応用が可能です。
またscaffoldの考え方は、Rails登場後に多くのフレークワーク/ツールで採用されました。具体的には、「CakePHP」「Spring Roo」「Dolteng」「JBoss Forge」「ASP.NET MVC」などです。
scaffoldを使うことで手軽にWebアプリケーションが開発できますが、実際の開発現場ではそれだけでは通用しません。scaffoldの機能自体をよく理解しておく必要があります。そこで、今回は自分たちの手でscaffoldの中身を作ってみましょう。
scaffoldで作られるさまざまなコンポーネントを個別に実装していく
前回の紹介した「rails generate scaffold」コマンドはさまざまなコンポーネントのファイルだけではなく、CRUDのための実装も生成してくれました。
Railsには個別のコンポーネントを生成するコマンド(後述する「rails generate model」「rails generate controller」など)も用意されていますが、それらには機能の実装は含まれていません。開発者自らが作るためです。
前回作ったサンプル「book_library」に新たな機能を追加していきましょう。具体的には、MVCそれぞれのコンポーネントを作成し、「index」「show」「new」「create」「edit」「update」「destroy」の7個のアクションを実装していくことになります。
ソースコードは、こちらで配布しています。
モデルの作成
まず、次のコマンドでアプリケーションの利用者をUserモデルとして作成します。
% bundle exec rails generate model user name:string department:string
コラム「gemを使うためのbundle execコマンドとは」
「bundle exec」はアプリケーション内の「vendor/bundle」ディレクトリに置いてあるgemを使うためのコマンドです。後の連載で詳しく説明しますので、以降では、「bundle exec」に続くサブコマンドに注目してください。
「bundle exec」は毎回書くと、長くて面倒なので「alias be='bundle exec'」を「~/.bashrc」などに書いておき、短くしておくと良いでしょう。
※訂正とおわび
2014年2月28日の連載第1回記事公開時、「bundlerの「bundle」コマンドで標準以外のgemをインストール」において、bundleコマンドで記述の間違いがありました。下記のように訂正させていただきます。これにより、上記bundle execコマンドが使用可能になります。このたびは内容に不備があり申し訳ありませんでした。
bundle install
bundle install --path vendor/bundle
「rails generate model」コマンドでモデルに関するファイルを生成
「rails generate model」コマンドはモデルに関する以下のようなファイルを生成します。
- app/models/user.rb
- db/migrate/xxxxxxxxxxxxxx_create_users.rb(xxxxxxxxxxxxxxはタイムスタンプ)
- test/models/user_test.rb
「rails generate model」コマンドの使い方はモデル名(単数形)を渡し、「カラム名:型」の形でカラム情報を連ねていきます。最後に、オプションを渡せます。
カラムの型には次のものが使えます。なお、Railsは標準でidカラムを主キーとし、timestamp型の「created_at」「updated_at」カラムを作成します。
型 | 概要 |
---|---|
string | 文字列 |
text | 長い文字列 |
integer | 整数 |
float | 浮動小数点数 |
decimal | 精度の高い小数 |
datetime | 日時 |
timestamp | タイムスタンプ |
time | 時刻 |
date | 日付 |
binary | バイナリ |
boolean | 真理値 |
primary_key | 主キー |
次のコマンドでマイグレーションをデータベースに適用しましょう。
% bundle exec rake db:migrate
以上でモデルを使用する準備ができました。確認してみましょう。
「rails console」コマンドで各コンポーネントの連携を切り離して機能を確認
各コンポーネントの連携を切り離して機能を確認したいときに便利なのが「rails console」コマンドです。このコマンドはコンソールからRailsを操作できるようにします。
ActiveRecordの機能も使えるので、作成したモデルを使ってみましょう。
% bundle exec rails console Loading development environment (Rails 4.0.2) irb(main):001:0> user = User.new(name: "アリス", department: "ネットワーク管理部") irb(main):002:0> user.save irb(main):003:0> User.create(name: "ボブ", department: "サービス開発部")
上のコードではコンソール上で、複数のデータを登録しています。
モデルの「new」メソッドは、カラムをキーとするハッシュを引数に渡すことで、その値で初期化されたモデルオブジェクトを作成します。
そのオブジェクトをデータベースに保存するには「save」メソッドを呼び出します。saveメソッドの返り値は保存成功時はtrueが返り、バリデーションにより保存に失敗した時はfalseが返ります。
「create」メソッドはnewメソッドとデータベースへの保存を兼ねます。保存成功時には保存済みのモデルオブジェクト、失敗時には未保存のモデルオブジェクトが返ります。
コラム「railsコマンドには省略形がある」
「rails console」は省略形として「rails c」としても実行でき、同様にサーバーを起動する「rails server」には「rails s」が、今回多用する、コンポーネントを生成する「rails generate」には「rails g」が用意されています。
Copyright © ITmedia, Inc. All Rights Reserved.