【Rails基礎】1行でアプリができる!scaffoldの使い方




 

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のウェルカム画面。

Image from Gyazo
userモデルでscaffoldを作ったら(http://localhost:3000/users)へ。

すると、こんな感じのアプリが持っています。

 

Image from Gyazo
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




音生入力で楽にブログを書く技が満載!
ブログ音声入力術

音声入力の使い方から文章を書くコツまで完全網羅。ブログを書きたいすべての人向けの電子書籍