Ruby On Rails PR

Railsのgenerateコマンドを徹底解説!rspecとslimファイルの作り方や無駄なファイルを作らないようにする方法

Railsのgenerateコマンドを徹底解説!rspecとslimファイルの作り方や無駄なファイルを作らないようにする方法
記事内に商品プロモーションを含む場合があります

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名の後にindexshowの様にアクション名を指定すると、それらを含んだ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

test_frameworkとしてrspecを使う場合はrspecをGemfile経由でインストールしておかないと、error rspec [not found]のエラーが出るので、必ずrspecをインストールした後に上記の設定を行いましょう。

 

slimのファイルをgenerateコマンドで自動生成する

config/application.rb

class Application < Rails::Application
  # 下記のコードを末尾に追加
  config.generators do |g|
    g.template_engine :slim
  end
  # ------ ここまで ------ 
end

template_engineとしてslimを使う場合はslimをGemfile経由でインストールしておかないと、error slim [not found]のエラーが出るので、必ずslimをインストールした後に上記の設定を行いましょう。

 

config.generatorで指定できる他のオプション

今回紹介したgeneratorのオプションはほんの一部なので、他にどのようなオプションがあるかは下記のサイトを参考にしてみてください。

 

利用していないファイルは無駄に作らない

Railsのgenerateコマンドは便利ですが、時には生成されるファイルを制御したいケースもあると思います。

config/application.rbに変更を加えることで簡単に制御が可能なので、特定のファイルは自動生成の対象外にしたい場合や、slimやrspecのファイルを自動生成したい場合は今回の記事を思い出して見てください。

ABOUT ME
himakuro
新卒で入社したブラック企業から脱出して超ホワイトな会社に転職。エンジニア歴は7年で普段はウェブサービス作ったりブログを書いたり、MENTAで未経験者の方にプログラミングを指導しています。
PR
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール