RailsのView開発用にViewSourceMap.gemつくった

@todesking氏のRails、レンダリングされたHTMLのどこがどのpartialから来たのかをコメントとして埋めるが良かったので、完全にパクって、改良して相対パス名表示するようにして、config/initializers/以下に置いたら開発環境でのみ働くようにしてみた。ここのテキストちょっと弄りたいけどどのファイルに書いてあるの...みたいなケース多いので、ChromeのInspectorとかで見たらHTMLコメントでファイル名分かって便利。render layout: "wrapper" do ... という風にrenderを呼んだときに上手くパス名を取得する方法が分からないので、どなたかよろしくお願いします。



https://github.com/r7kamura/view_source_map
社内チャットで名前募集したら、ishiki-takai-rendererになりかけたんですが、最終的にViewSourceMapになりました。VSMです。考案者達いわくvs. Managerっぽいですねとのことです。本当はパス名を可聴化したかったんですが今回は可視化に留めました。RailsにはRailtieという仕組みがあって、Railtieクラスを継承して、Rails起動時に実行してほしいcallbackを記述できる。Action Mailer, Action Controller, Action View, Active Record and Active Resourceとかは実は全てRailtieを利用してつくられているらしい。算数の9の段っぽい。このGemでもRailtieを継承して、アプリ起動時(config.after_initialize { ... })にrenderの機能を書き換えるという感じで実装した。

RailsのPluginをGemでつくるときは、rails plugin new view_source_map ってやると、Gemの雛形+それをテストするためのサンプルRailsアプリを生成してくれる。適当にroutingとcontrollerとview弄って、controller-specでviewの内容をテストした。TestCaseの代わりにRSpecが使いたいときは、specフォルダをつくって、あああ説明が面倒ああああああこういう感じです。

$ rails plugin new view_source_map --skip-test-unit --dummy-path=spec/dummy
$ cd view_source_map
$ vim view_source_map.gemspec
$ cat !$
...
Gem::Specification.new do |s|
  ...
  s.add_development_dependency "rspec-rails"
end

$ cd spec/dummy
$ ln -s ../../spec
$ rails g rspec:install
$ cd -
$ vim spec/spec_helper.rb
$ diff spec/spec_helper.rb
- require File.expand_path("../../config/environment", __FILE__)
+ require File.expand_path("../dummy/config/environment", __FILE__)

使い方

echo 'gem "view_source_map"' >> Gemfile
rails s