Rails本体の、generatorのgeneratorを変更したい!!
最近、Railsのカスタムgeneratorが銀の弾丸(開発効率を飛躍的に上げるもの)にならないかと思っていろいろ試しています。いまのところ、成果は上げっていませんwww駄菓子菓子(だがしかし)、generatorを作成することに対する敷居がとても下がりました。まだ、Railsのカスタムgeneratorを作ったことがない方は こちらの記事(http://d.hatena.ne.jp/kouji0625/20130523/p1) を参考にして作ってみてくださいね。
さて、ここからが本題です。
今回のお題
Rails本体のgeneratorのgeneratorを変更したい!!
ややこしいな。つまり、「rails generate generator foo」で生成されるUSAGE、foo_generator.rbを修正したいってことです。
手順
まずは、Ralis本体からgeneratorのテンプレートをコピーします。
$ mkdir -p lib/templates/rails/generator $ cp -r ~/.rvm/gems/<ruby_version>@<gemset>/gems/railties-<version>/lib/rails/generators/rails/generator/templates/* lib/templates/rails/generator
あとは、lib/templates/rails/generator以下のファイルを修正するだけです。
すると、rails generate generator fooで自動生成されるファイルが、上記のコピーしたファイルを元にしたものになります。
簡単ですね♪
おまけ
ammeterを使っていれば(http://d.hatena.ne.jp/kouji0625/20130524/p1)、以下の内容のファイルをspec/generators/rails/generator/generator_generator_spec.rbに配置することで、カスタマイズしたGeneratorGeneratorのspecが書けます。generatorのspecがあれば、Railsをバージョンアップしたときに、いちいちrails generateを実行して動作確認しなくてもいいというのがうれしいですね。
require 'spec_helper.rb' require "rails/generators/rails/generator/generator_generator" describe Rails::Generators::GeneratorGenerator do destination_root = File.expand_path("tmp/spec/generators", Rails.root) before do Rails::Generators::GeneratorGenerator.instance_eval do source_root File.expand_path('lib/templates/rails/generator', Rails.root) end run_generator %w(foo) end describe "lib/generators/foo/foo_generator.rb" do subject { file("lib/generators/foo/foo_generator.rb") } it { should exist } end end
--- 参考情報
- Creating and Customizing Rails Generators & Templates - 6 Customizing Your Workflow by Changing Generators Templates: http://guides.rubyonrails.org/generators.html#customizing-your-workflow-by-changing-generators-templates
--- PR広告
記事を読んでくださり、ありがとうございます。もしよろしければ、この記事の著者が提供している無料のサービス「かくってる?」をお試しください。
- かくってる?: http://cocktailq.herokuapp.com/