scaffoldの中身を理解するためにMVCコンポーネントと7つのアクションを個別で自作する開発現場でちゃんと使えるRails 4入門(2)(1/3 ページ)

エンタープライズ領域での採用も増えてきたRuby on Railsを使ってWebアプリケーションを作るための入門連載。最新版の4に対応しています。今回は、便利なscaffoldをただ使うだけではなく、中身をちゃんと理解するためにMVCコンポーネントと7つのアクション「index」「show」「new」「create」「edit」「update」「destroy」を個別で自作しルーティング設定をしていこう。

» 2014年03月28日 18時00分 公開
[著:林慶、監修:山根剛司,株式会社アジャイルウェア]

※編集部注

本連載はRuby on Rails 4の入門連載です。Rubyについて学びたい方は連載「若手エンジニア/初心者のためのRuby 2.1入門」をご覧ください。


開発現場でちゃんと使えるように、scaffoldの中身を理解する

「開発現場でちゃんと使えるRails 4入門」のインデックス

連載目次

 前回の「簡単インストールから始める初心者のための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」が用意されています。


       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。