Railsのgenerateコマンドは、Controllerなどの必要なファイルを一式作成してくれるので非常に便利です。
しかし時には自動生成されるファイルが不要だったり、slimやrspecなどのファイルも自動生成して欲しいケースもあると思います。
そこでこの記事では以下の内容に焦点を当てて解説していきます:
- Railsのgenerateコマンドの使い方
- generateコマンドで生成したファイルの一括削除方法
- generateコマンドで作成されるファイルを制御する方法
- generateコマンドでrpec、slimファイルを生成する方法
generateコマンドの一覧
まずよく利用するgenerateコマンドと生成されるファイル群を見て行きます。
generateコマンドはgの様に省略して記述することが可能なので、今回の記事では省略記法で記述をしています。
generate migration
空のマイグレーションファイルの生成
$ rails g migration users
-------------- 実行結果 --------------
invoke active_record
create db/migrate/20210207121846_users.rb
上記のコマンドを実行することで、db/migrate配下にコマンドを実行した日付と入力したテーブル名を元にmigrationファイルが作成されます。
指定したカラムを持つマイグレーションファイルの生成
$ rails g migration users name:string age:integer
ファイル作成と同時にカラムも指定したい場合はカラム名:型というフォーマットで記述を行います。
generate model
空のマイグレーション+モデルの生成
$ rails g model Test
-------------- 実行結果 --------------
invoke active_record
create db/migrate/20210207161348_create_tests.rb
create app/models/test.rb
invoke test_unit
create test/models/test_test.rb
create test/fixtures/tests.yml
generateコマンドでmodelを生成すると関連するmigrationファイル、testファイル、fixtureファイルも同時に生成をしてくれます。
指定したカラムを持つマイグレーション+モデルの生成
$ rails g model Test name:string
-------------- 実行結果 --------------
invoke active_record
create db/migrate/20210207161719_create_tests.rb
create app/models/test.rb
invoke test_unit
create test/models/test_test.rb
create test/fixtures/tests.yml
generateコマンドでmigrationを指定した時と同様に、カラム名:型でフォーマットを記述することでどの様なカラムを持たせるかも指定が可能です。
generate controller
controller+関連ファイルの生成
$ rails g controller tests
-------------- 実行結果 --------------
create app/controllers/tests_controller.rb
invoke erb
create app/views/tests
invoke test_unit
create test/controllers/tests_controller_test.rb
invoke helper
create app/helpers/tests_helper.rb
invoke test_unit
invoke assets
invoke scss
create app/assets/stylesheets/tests.scss
Controller+アクション+関連ファイルの作成
$ rails g controller tests index show
-------------- 実行結果 --------------
create app/controllers/tests_controller.rb
route get 'tests/index'
get 'tests/show'
invoke erb
create app/views/tests
create app/views/tests/index.html.erb
create app/views/tests/show.html.erb
invoke test_unit
create test/controllers/tests_controller_test.rb
invoke assets
invoke scss
create app/assets/stylesheets/tests.scss
controller名の後にindex、showの様にアクション名を指定すると、それらを含んだControllerを生成し、更にviewsのファイルまで生成してくれます。
class TestsController < ApplicationController
def index
end
def show
end
end
generateで作成したファイルを一括で削除する方法
generateコマンドで指定する命名などを間違ってやり直したい場合には、destroyコマンドを活用すると便利です。
$ rails destroy controller tests
-------------- 実行結果 --------------
remove app/controllers/tests_controller.rb
invoke erb
remove app/views/tests
invoke test_unit
remove test/controllers/tests_controller_test.rb
invoke helper
remove app/helpers/tests_helper.rb
invoke test_unit
invoke assets
invoke scss
remove app/assets/stylesheets/tests.scss
generateコマンドではgの様な省略記法がありましたが、destroyは省略記法で書けない点に注意しましょう。
ジェネレーターで生成されるファイルを制御
generateコマンドで生成するファイルはconfig/application.rbで制御をすることが可能です。いくつかよく利用する物の例を紹介します。
helperを自動生成しないようにする場合
下記のコードを記述する事でgenerate controller実行時に、helperのファイルを生成しないように出来ます。
config/application.rb
class Application < Rails::Application
# 下記のコードを末尾に追加
config.generators do |g|
g.helper false
end
# ------ ここまで ------
end
$ rails g controller tests
-------------- 実行結果 --------------
create app/controllers/tests_controller.rb
invoke erb
create app/views/tests
invoke test_unit
create test/controllers/tests_controller_test.rb
invoke assets
invoke scss
create app/assets/stylesheets/tests.scss
この様にgenerateコマンドで生成されるファイルを制御する事で、無駄の無い自動生成が可能になります。
rspecのファイルをgenerateコマンドで自動生成する
config/application.rb
class Application < Rails::Application
# 下記のコードを末尾に追加
config.generators do |g|
g.test_framework :rspec
end
# ------ ここまで ------
end
slimのファイルをgenerateコマンドで自動生成する
config/application.rb
class Application < Rails::Application
# 下記のコードを末尾に追加
config.generators do |g|
g.template_engine :slim
end
# ------ ここまで ------
end
config.generatorで指定できる他のオプション
今回紹介したgeneratorのオプションはほんの一部なので、他にどのようなオプションがあるかは下記のサイトを参考にしてみてください。
利用していないファイルは無駄に作らない
Railsのgenerateコマンドは便利ですが、時には生成されるファイルを制御したいケースもあると思います。
config/application.rbに変更を加えることで簡単に制御が可能なので、特定のファイルは自動生成の対象外にしたい場合や、slimやrspecのファイルを自動生成したい場合は今回の記事を思い出して見てください。
- Ruby初心者に向けた学習ロードマップ!挫折しないための学習方法!
- 【初心者向け】MacでRailsを使えるようにするための環境構築方法を徹底解説!
- 【初心者向け】RailsでMySQLを使うための手順をコマンド付きで解説!
- Railsが難しい理由を現役エンジニアが解説!学習効率を上げるには○○を高めるべき!
- Rails初心者に向けたコマンドまとめ!newやgenerateコマンド、簡単に使える便利関数を紹介!
- Railsでルーティングを作成!ネストやパラメーターを取得する方法も解説!
- Railsの部分テンプレートの書き方をコード付きで解説!引数の渡し方やディレクトリ名の悩みとはおさらば!
- Railsでリンクヘルパー(link_to)を使ってサクッとリンクを生成する方法を解説!