熱いワールドカップが終わって平和な夜に戻ったshibuso です。Rails ユーザの皆さんは色々rails genarate コマンドを利用しているかと思いますが、この前調べていたら「こんなにあったのか!」となったので、今回Rails のgenerator を大まかに紹介してみます。Rails のバージョンは4.0.1 です。
実行結果をまとめてみました
結構数があるので先に目次を作っておきます。順番は重要そうなものだったり気の向くままだったりしていますので、大して意味はありません。
- scaffold
- scaffold_controller
- controller
- resource
- model
- migration
- assets
- helper
- generator
- integration_test
- jbuilder
- mailer
- task
rails generate scaffold
これはもう使ったことがない人はいないレベルでメジャーじゃないでしょうか。モデル名を指定することによりRails のMVC モデルに則った各種ファイルを生成してくれます。article と入力して実行した結果は以下のとおりです(これより下、全て名前をarticle で実行しています)
$ rails g scaffold article invoke active_record create db/migrate/20140716040221_create_articles.rb create app/models/article.rb invoke test_unit create test/models/article_test.rb create test/fixtures/articles.yml invoke resource_route route resources :articles invoke scaffold_controller create app/controllers/articles_controller.rb invoke erb create app/views/articles create app/views/articles/index.html.erb create app/views/articles/edit.html.erb create app/views/articles/show.html.erb create app/views/articles/new.html.erb create app/views/articles/_form.html.erb invoke test_unit create test/controllers/articles_controller_test.rb invoke helper create app/helpers/articles_helper.rb invoke test_unit create test/helpers/articles_helper_test.rb invoke jbuilder create app/views/articles/index.json.jbuilder create app/views/articles/show.json.jbuilder invoke assets invoke coffee create app/assets/javascripts/articles.js.coffee invoke scss create app/assets/stylesheets/articles.css.scss invoke scss create app/assets/stylesheets/scaffolds.css.scss
(※同プロジェクトで作っては消してを繰り返してたので、実行環境によって新規作成だったり既にあるのを使ったり、多少結果の見え方に違いが出ます)
rails generate scaffold_controller
scaffold と比べるとあまり使われていないのではないかと勝手に思っているのがこのscaffold_controller です。scaffold の実行で出力されるコントローラとビューと、それらに関わる部分を切り出した感じで生成します。モデルやアセットは作られません。モデルだけ先に作った場合、地味に便利です。
$ rails g scaffold_controller article create app/controllers/articles_controller.rb invoke erb create app/views/articles create app/views/articles/index.html.erb create app/views/articles/edit.html.erb create app/views/articles/show.html.erb create app/views/articles/new.html.erb create app/views/articles/_form.html.erb invoke test_unit create test/controllers/articles_controller_test.rb invoke helper create app/helpers/articles_helper.rb invoke test_unit create test/helpers/articles_helper_test.rb invoke jbuilder create app/views/articles/index.json.jbuilder create app/views/articles/show.json.jbuilder
rails generate controller
コントローラを生成します。scaffold_controller との違いはRESTful な設計を特に考えない土台を作っているというところです。ビューに関してはディレクトリは作成されますが、中に誰もいませんよ中は空です。こちらはアセットを作っています。また入力した単語は複数形にならずそのまま使われます。
$ rails g controller article create app/controllers/article_controller.rb invoke erb create app/views/article invoke test_unit create test/controllers/article_controller_test.rb invoke helper create app/helpers/article_helper.rb invoke test_unit create test/helpers/article_helper_test.rb invoke assets invoke coffee create app/assets/javascripts/article.js.coffee invoke scss create app/assets/stylesheets/article.css.scss
rails generate resource
恥ずかしながらこの記事をまとめるまで、このコマンドは使ったことがありませんでした。scaffold と同じようにMVC モデルに沿って生成しますが、こちらはRESTful を意識していないようです。そのためコントローラの中身もビューも空です。
$ rails g resource article invoke active_record create db/migrate/20140716080820_create_articles.rb create app/models/article.rb invoke test_unit create test/models/article_test.rb create test/fixtures/articles.yml invoke controller create app/controllers/articles_controller.rb invoke erb create app/views/articles invoke test_unit create test/controllers/articles_controller_test.rb invoke helper create app/helpers/articles_helper.rb invoke test_unit create test/helpers/articles_helper_test.rb invoke assets invoke coffee create app/assets/javascripts/articles.js.coffee invoke scss create app/assets/stylesheets/articles.css.scss invoke resource_route route resources :articles
rails generate model
モデルの生成と、テーブルをcreate するマイグレーションを生成します。
$ rails g model article invoke active_record create db/migrate/20140716040948_create_articles.rb create app/models/article.rb invoke test_unit create test/models/article_test.rb create test/fixtures/articles.yml
rails generate migration
scaffold に負けず劣らず有名ドコロです、使用頻度で考えるとscaffold よりも多いのではないでしょうか。カラムの型変更からテーブルの追加・削除まで、DB に関する各種変更の操作を記述可能なマイグレーションを生成します。
$ rails g migration AddNameToArticles invoke active_record create db/migrate/20140716052116_add_name_to_articles.rb
rails generate assets
アセットを生成します。最初のscaffold のところからそうですが、CoffeeScript とSass を導入しているためcoffee ファイルとscss ファイルが生成された例となっていますが、入っていない場合はそれぞれ普通のjs ファイルとcss ファイルになります。ここでは入力した単語は複数形にならずにそのまま用いられます。
$ rails g assets article invoke coffee create app/assets/javascripts/article.js.coffee invoke scss create app/assets/stylesheets/article.css.scss
rails generate helper
ヘルパーを生成します。合わせてテストも生成します。こちらも複数形にはなりません。
$ rails g helper article create app/helpers/article_helper.rb invoke test_unit create test/helpers/article_helper_test.rb
rails generate generator
generator を generate します…って、これだけではいまいち理解できないですね。generate する時にgenerator を指定することができるみたいで、そのgenerator をまずgenerate するんだそうです。generator がゲシュタルト崩壊を起こしそう…。詳しくはRailsGuides 等を読んでいただけたらと思います。
$ rails g generator article create lib/generators/article create lib/generators/article/article_generator.rb create lib/generators/article/USAGE create lib/generators/article/templates
rails generate integration_test
インテグレーションテスト(総合テスト)のファイルを生成します。このファイルは他のgenerate コマンドでは作られません。
$ rails g integration_test article invoke test_unit create test/integration/article_test.rb
rails generate jbuilder
Jbuilder はJava の統合開発環境…ではなく、JSON をこねくりまわすシンプルなDSL です。scaffold でも生成されています。ビューはなくてもJbuilder のgenerate コマンドはあるんだな、と思ったり。
$ rails g jbuilder article create app/views/articles create app/views/articles/index.json.jbuilder create app/views/articles/show.json.jbuilder
rails generate mailer
メーラーを生成します。こちらもintegration_test と同じで、このgenerate コマンドでしか作られません。
$ rails g mailer article create app/mailers/article.rb invoke erb create app/views/article invoke test_unit create test/mailers/article_test.rb
rails generate task
Rake タスクを生成します。
$ rails g task article create lib/tasks/article.rake
おわりに
今回はRails のgenerator のみ紹介しましたが、他にも色々generator は用意されているので、一度確認してみると良いかもしれません。下記コマンドで一覧が表示されます。
$ rails g -h
またここで紹介したのは生成されるファイルだけでしたが、ヘルプを見ると各種オプションも記載されているので、使用される際にはそちらも目を通してみると良いかと思います。scaffold の場合は下のようになります。
$ rails g scaffold -h