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
実際にマイグレーションをしてみて、サーバーを立ち上げて
にアクセスすると次のような画面が表示されて一通りのCRUDが使えるようなアプリが出来上がっています。
こういった形でScaffoldを使うと爆速でアプリの骨組みを作成することができます。ただ、実際のアプリ開発ではこれにもう少し修正を加えるひつようがあるのであくまでも踏み台のコードと考えていただければ良いと思います。
Scaffold自体「足場」という意味なので自動生成されたコードを元に自分のアプリを開発していくと実に効率よく開発を進めることができます。(簡単な管理画面などはScaffold使うのと使わないので手間が違います。)
まとめ
- Scaffoldではコマンド一つでコードが自動生成できる
- コントローラ、モデル、ビューからテストコード、マイグレーションコードまで自動生成可能
- あくまでもたたき台なので自動生成されたコードに手を加えつつ効率よく開発する
- RailsではScaffold以外にも個別のジェネレータも充実
今回はScaffoldしか紹介できませんでしたが、Railsでは他にもコントローラ、モデル、マイグレーションなどを個別に自動生成することもできるので別記事でこちらのジェネレータについても紹介していこうかと思います。
Scaffoldは簡単な管理画面を作る時やRails触りはじめに動作を見てみるときなどには本当に便利ですので、ぜひこの記事きっかけで使ってみていただければと思います。