Railsのカスタムgeneratorの、グループ分けをする
今回のお題
Railsのカスタムgeneratorは、以下のように「Rails」「Rspec」といったグループに分けられています。このグループ分けはどのようにするのでしょうか?
$ rails generate --- 以下、実行結果 --- Usage: rails generate GENERATOR [args] [options] General options: -h, [--help] # Print generator's options and usage -p, [--pretend] # Run but do not make any changes -f, [--force] # Overwrite files that already exist -s, [--skip] # Skip files that already exist -q, [--quiet] # Suppress status output Please choose a generator below. Rails: <- ここ controller generator helper integration_test mailer migration model observer performance_test plugin resource scaffold scaffold_controller session_migration stylesheets Initializer: <- ここ initializer Rspec: <- ここ rspec:controller rspec:helper rspec:install rspec:integration rspec:mailer rspec:model rspec:observer rspec:scaffold rspec:view
試行錯誤
試しに、rails generate generatorで自動生成したgenerator(ここではrails generate generator initializerしたものを想定)を修正して、名前空間を分けてみましょう。
module AppName class InitializerGenerator < Rails::Generators::NamedBase (省略) end end
すると、どうでしょう。rails generateとしても「Initializer:」すら表示されなくなりましたorz
単純に名前空間を分けただけではだめなんですね。
続いて、initializerディレクトリをapp_nameディレクトリ以下に移動してみましょう。つまり、以下のようなディレクトリ構成にします。
lib `-- generators `-- app_name `-- initializer
今度は、rails generateで期待通りに表示されます。
(以下、rails generateの実行結果) AppName: app_name:initializer
いいね。さっそく実行してみます。
$ rails generate app_name:initializer Usage: rails generate initializer NAME [options] Runtime options: -f, [--force] # Overwrite files that already exist -p, [--pretend] # Run but do not make any changes -q, [--quiet] # Supress status output -s, [--skip] # Skip files that already exist Description: Explain the generator Example: rails generate initializer Thing This will create: what/will/it/create
うんうん、いいですね。
まとめ
Railsのカスタムgeneratorのグループ分けは、
- lib/generators/<グループ名>/
に配置 - <グループ名>名前空間にgeneratorを定義
といった手順でできます。
--- PR広告
記事を読んでくださり、ありがとうございます。もしよろしければ、この記事の著者が提供している無料のサービス「かくってる?」をお試しください。
- かくってる?: http://cocktailq.herokuapp.com/