Railsのジェネレータを学ぶ。ScaffoldでWebアプリのたたき台を作成する。

Railsのジェネレータを学ぶ。ScaffoldでWebアプリのたたき台を作成する。

 

Railsの強力な機能の一つにコードのジェネレータの機能がありますが、今回は便利なコードジェネレータScaffoldについて説明していきます。

コードジェネレータとは、プログラミング界隈ではしばしば用いられるのですが、クラス定義やマイグレーションコードなどは開発を進める上である程度同じコードを書かなければいけない場合がまあまああります。

そんな時に、コマンド一つで必要なファイル一式の骨組みだけでも揃えられると効率が上がって良いよねということで「コードを生成するためのコード」を書くことがあります。

フルスタックフレームワークであるRailsもしっかりコードジェネレータを搭載していてい、なれてしまえば簡単なCRUDのアプリを作るのに10分程度で作ってしまうことが可能になっています。

 

Scaffoldを使ってみる

 

さきにも書きましたが、Scaffoldを使うとものの10分程度で簡易的なアプリらしいものが作成できます。scaffoldのコマンドは次のように行います。

 

rails generate scaffold [リソース名] [カラム名1]:[型1] [カラム名2]:[型2]...

 

ここでのリソース名はモデルやコントローラの名前になります。blogというように指定すると指定された名前を元にRailsの命名規則からBlogsControllerとBlogモデルが作成されます。

以下が、Scaffoldの実行結果です。

 

rails generate scaffold blog title:string content:text
Running via Spring preloader in process 71421
      invoke  active_record
      create    db/migrate/20180902014339_create_blogs.rb
      create    app/models/blog.rb
      invoke    test_unit
      create      test/models/blog_test.rb
      create      test/fixtures/blogs.yml
      invoke  resource_route
       route    resources :blogs
      invoke  scaffold_controller
      create    app/controllers/blogs_controller.rb
      invoke    erb
      create      app/views/blogs
      create      app/views/blogs/index.html.erb
      create      app/views/blogs/edit.html.erb
      create      app/views/blogs/show.html.erb
      create      app/views/blogs/new.html.erb
      create      app/views/blogs/_form.html.erb
      invoke    test_unit
      create      test/controllers/blogs_controller_test.rb
      create      test/system/blogs_test.rb
      invoke    helper
      create      app/helpers/blogs_helper.rb
      invoke      test_unit
      invoke    jbuilder
      create      app/views/blogs/index.json.jbuilder
      create      app/views/blogs/show.json.jbuilder
      create      app/views/blogs/_blog.json.jbuilder
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/blogs.coffee
      invoke    scss
      create      app/assets/stylesheets/blogs.scss
      invoke  scss
      create    app/assets/stylesheets/scaffolds.scss

 

コマンドの実行結果を見てわかるように、モデル、コントローラが生成されていますが、他にもマイグレーションファイルからビュー、テストコードまでが自動で生成されています。

実際に生成されたマイグレーションのコードをみると以下のようにしっかり指定したカラムが宣言されています。

 

class CreateBlogs < ActiveRecord::Migration[5.2]
  def change
    create_table :blogs do |t|
      t.string :title
      t.text :content

      t.timestamps
    end
  end
end

 

 

実際にマイグレーションをしてみて、サーバーを立ち上げて

http://localhost/blogs

にアクセスすると次のような画面が表示されて一通りのCRUDが使えるようなアプリが出来上がっています。

 

Scaffold結果

 

 

こういった形でScaffoldを使うと爆速でアプリの骨組みを作成することができます。ただ、実際のアプリ開発ではこれにもう少し修正を加えるひつようがあるのであくまでも踏み台のコードと考えていただければ良いと思います。

Scaffold自体「足場」という意味なので自動生成されたコードを元に自分のアプリを開発していくと実に効率よく開発を進めることができます。(簡単な管理画面などはScaffold使うのと使わないので手間が違います。)

 

まとめ

 
  • Scaffoldではコマンド一つでコードが自動生成できる
  • コントローラ、モデル、ビューからテストコード、マイグレーションコードまで自動生成可能
  • あくまでもたたき台なので自動生成されたコードに手を加えつつ効率よく開発する
  • RailsではScaffold以外にも個別のジェネレータも充実
 

今回はScaffoldしか紹介できませんでしたが、Railsでは他にもコントローラ、モデル、マイグレーションなどを個別に自動生成することもできるので別記事でこちらのジェネレータについても紹介していこうかと思います。

Scaffoldは簡単な管理画面を作る時やRails触りはじめに動作を見てみるときなどには本当に便利ですので、ぜひこの記事きっかけで使ってみていただければと思います。