この記事の概要
rails newコマンドでアプリを新規に作成したあと、モデル、コントローラ、ビューファイルなどはコマンドを一回一回入力して作成すると思うのですが、コマンドを打つ際に実行漏れがあったり、スペルミスがあったりそして何より面倒だったりしていました。
本記事では、バッチファイルを用いて、各種MVCファイルを一括で作成する方法について解説します。(検索してもあまり情報がなかったので、もしかすると邪道な方法なのかもしれません…。)
やり方
1.バッチファイルを作成する
libフォルダ内にbatchフォルダを作成し、バッチファイルを作成する。(ファイル例:create_mvc.rb)
2.バッチファイルを読み込めるように設定を変更する
config/application.rbにbatchフォルダを読み込めるようにする設定を追記する。
module Portfolio
class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
config.load_defaults 5.2
# libフォルダ内のファイルを読み込み可にする
config.paths.add 'lib', eager_load: true
# Settings in config/environments/* take precedence over those specified here.
# Application configuration can go into files in config/initializers
# -- all .rb files in that directory are automatically loaded after loading
# the framework and any gems in your application.
end
end
3.バッチファイル内に一括で実行するコマンドを追記する
スクリプトでrailsのコマンドを実行するためには、system "実行するコマンド"という風に書けばOKです。
class Batch::CreateMvc
# ファイルの一括作成
def self.create_file
system 'rails g model Post'
system 'rails g model PostFavorite'
system 'rails g model PostComment'
system 'rails g model TagMap'
system 'rails g model Tag'
system 'rails g model Relationship'
・・・以下、作りたいファイル分のコマンドを記載する
end
end
4.バッチファイルを実行する
バッチファイルの実行自体はコマンドを直接コンソールに入力して行います。
実行コマンド:bundle exec rails runner Batch::[バッチファイルのクラス名].[実行したいメソッド名]
例:bundle exec rails runner Batch::CreateMvc.create_file
これによりバッチファイルが読み込まれ、ファイルに記載されているコマンドが上から順に実行されます。
そのため、rails gコマンドのようなファイル作成コマンドを一括で行うことができます。
バッチファイルで一括登録できると何がいいの?
正直、このバッチファイルを作る工数と、コンソールに一回一回rails gコマンドを入力する場合の工数に大きな差はありません。
ただ、下記の点でメリットがあるかなと思っています。
- 実行コマンドを予め用意するため、事前にスペルミスや漏れの確認ができる
- 一度作ったバッチファイルは今後新規にアプリを作成する際に使い回せる
特に二つ目のメリットが個人的には大きいかなと思っています。
どのアプリもrails gは必ず実行すると思うので、バッチファイル内の各コマンドのファイル名だけメンテナンスすれば、より少ない工数でファイル作成ができるようになるのではないでしょうか。
ただ、本来バッチファイルは定期的に実行する処理を書くものなので、今回のように1アプリに1度しか使わないバッチファイルはあまり効果があるとは言えないかもしれません…。