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

--- 参考情報

--- PR広告
記事を読んでくださり、ありがとうございます。もしよろしければ、この記事の著者が提供している無料のサービス「かくってる?」をお試しください。