Railsには色々なコマンドがありますね。
中でもチート級に便利なのが
scaffold
です。
scaffoldは、「足場」の意味を持つ英単語。
工事現場でよく見る足場ですね。

Railsのscaffoldを発動すると、アプリ開発の「足場」を一瞬で作れるのです。
工事をすぐに始められるのですね。
今日はこのscaffoldの使い方を紹介します。
利用環境は以下の通り。
Rails バージョン | 2.5.0 |
---|---|
Ruby バージョン | 5.2.4.1 |
Railsのscaffoldの使い方
使い方は簡単です。
アプリのディレクトリに移動したら、次のコマンドが発動するだけ。
$ rails g scaffold モデル名 カラム名1:データ型 カラム名2:データ型2・・・・
そして、その後に
$ rails db:migrate
を唱え、マイグレーションファイルを実行すると、データベースまで誕生します。
たった2行でRailsアプリができちゃうのですね。
Railsのscaffoldでは何ができるのか?
それでは、scaffoldを発動すると、何が誕生するのでしょうか??
scaffoldで「userモデル」を作った例を紹介します。
$ rails g scaffold user name:string age:integer
を発動し、
- name(string型)
- age(integer型)
という2カラムを作成したとします。
モデルファイル
まず、モデルファイルですね。
Userモデルでscaffoldを使うと、
user.rb
というモデルファイルができます。モデルファイルの中身はこんな感じ。
class User < ApplicationRecord end
コントローラー
もちろんコントロールも作られ、中身もちゃんと入っています。
例えば、Userモデルでscaffoldを発動すると、
users_controller.rb
というコントローラーが誕生し、中身は次のようになっています。
class UsersController < ApplicationController before_action :set_user, only: [:show, :edit, :update, :destroy] # GET /users # GET /users.json def index @users = User.all end # GET /users/1 # GET /users/1.json def show end # GET /users/new def new @user = User.new end # GET /users/1/edit def edit end # POST /users # POST /users.json def create @user = User.new(user_params) respond_to do |format| if @user.save format.html { redirect_to @user, notice: 'User was successfully created.' } format.json { render :show, status: :created, location: @user } else format.html { render :new } format.json { render json: @user.errors, status: :unprocessable_entity } end end end # PATCH/PUT /users/1 # PATCH/PUT /users/1.json def update respond_to do |format| if @user.update(user_params) format.html { redirect_to @user, notice: 'User was successfully updated.' } format.json { render :show, status: :ok, location: @user } else format.html { render :edit } format.json { render json: @user.errors, status: :unprocessable_entity } end end end # DELETE /users/1 # DELETE /users/1.json def destroy @user.destroy respond_to do |format| format.html { redirect_to users_url, notice: 'User was successfully destroyed.' } format.json { head :no_content } end end private # Use callbacks to share common setup or constraints between actions. def set_user @user = User.find(params[:id]) end # Only allow a list of trusted parameters through. def user_params params.require(:user).permit(:name, :age) end end
いやあ、すごい。
indexからdestroyまで各アクションが勢揃いではありませんか。
ビューファイル
ビューファイルも生まれます。
- edit.html.erb
- index.html.erb
- show.html.erb
- new.html.erb
というビューファイルがたった1行のコマンドで誕生するのです。
ルーティング
ルーティングも完璧です。
Rails.application.routes.draw do resources :users end
という1行しか書いてありませんが、この1行で十分。
指定したモデルのindexからdestroyまでルーティングの設定が完了するのです。
データベースもできる
もちろん、$ rails db:migrate を発動すれば、データベースもできます。

Railsのscaffoldでどんなアプリができるのか?
それでは、どんなアプリがscaffoldで誕生したか見ていきましょう。
ローカルホストのトップ(http://localhost:3000/)に飛んでみると、Railsのウェルカム画面。
userモデルでscaffoldを作ったら(http://localhost:3000/users)へ。
すると、こんな感じのアプリが持っています。
userを追加できますし、userの詳細も見れます。
user情報の更新もできるし削除もできます。
これは凄いですね。
デザイン未適用なので、味気ないですが、アプリの足場としては申し分ないです。
scaffoldは初心者におすすめできない?
ただし、です。
scaffoldを使えば簡単にアプリが作れすぎるので、
初心者はscaffold使うべからずと言われています。
なぜなら、仕組みを理解しないままブラックボックス状態でアプリを作ることになるからです。
ぼく自身、初期段階でscaffoldに出会ってしまい、scaffoldを乱用。
Railsアプリを作れたっちゃ作れたのですが、scaffoldを乱用しすぎると、応用が効きにくかったのです。
結果的に「scaffoldの枠を出たアプリ」を作れないままでした。
scaffoldに頼りすぎ、スキルアップできずにRailsの勉強をやめた過去があったのです。
現在は「scaffoldに頼らないアプリ開発の修行」に励んでいます。
初心者ほど、苦労した方が良いのです。
ルーティングをしこしこ書いて、コントローラーにアクションを追加し、ビューファイルを自力で作成するのが一番。
「脱scaffold」してから、Railsアプリの仕組みがわかってきました。
ただ、scaffoldが便利なのは変わりません。
Railsアプリで試したいことがあったら、すぐに足場が作れますから。
scaffoldの削除方法は?
という感じで、一瞬で簡単にアプリを作れましたが、
scaffoldで作ったファイルを削除したい時
はどうすればいいんでしょう?
削除方法も簡単です。
$ rails destroy scaffold モデル名
の1行でいいのです。
例えば、userモデルのscaffoldを無効にしたい場合、
$ rails destroy scaffold user
です。
コマンドを発動すると、指定したモデル名のscaffoldファイルがごっそり消えます。
ただし、scaffoldを発動しても、データベースは残りますけどね。
時と場合に応じてscaffoldを試してみてください。
それでは!
Lin

おそらく、ブロガー。
今年でフリーランス 6年目。