RailsのERBビューからインスタンス変数の名前一覧を抽出するスクリプト

スポンサーリンク

Rails の ERB ビューで使われているインスタンス変数(@hoge など)の名前一覧を取得したいケースがあったのですけど、そういうAPIはRails側では用意してなさそうだったので、ちょっとしたRubyスクリプトを書きました。

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

コントローラーからインスタンス変数を取得する場合は、以下の stackoverflow ページのように instance_variable_names で取得できます。

ruby – list Rails controller instance variables – Stack Overflow

コントローラーがまだ未完成で、ERBビューファイルをパースしてインスタンス変数の名前一覧を取得したい場合などの想定です。

ERBビューからインスタンス変数の名前一覧を抽出するRubyスクリプト

ERBビューからインスタンス変数、@hoge のように頭に @ の付く変数の名前一覧を抽出するRubyスクリプトです。

variable_extractor.rb

※注意点として、シングルクォーテーション/ダブルクォーテーション内のエスケープ文字列を考慮していません。なので、”hello \”#{@hoge}\” !”, ‘hello \’@fuga\’ !’ のようなエスケープ文字列が含まれると、正確に抽出できません。

とりあえず書き捨てのコードで、正規表現を考えるのが面倒だったのでこのまま。自分の今回の用途では、ERBビューにエスケープ文字列を含む文字列がなかったこともありまして…。気が向いたら直します。

スクリプトの使い方

実行権を与えて、ビューファイルを引数で渡す。

以上のように、インスタンス変数の名前一覧を抜き出したいERBビューファイルを引数で渡して使う。これで…

と、/path/to/view_file.erb に含まれるインスタンス変数の名前一覧が出力されます。なんか、もっと簡単にできる方法がある気がするのですけど… とりあえず目的が達成されたのでいいか。

以下 stackoverflow に書いてあった方法でも同じこと実現できるかもですが、試してはいません。

Is there a way to list the available variables in an Ruby ERB template? – Stack Overflow

スポンサーリンク
パーフェクト Ruby on Rails は、最近読んだ Rails 本の中では一番役に立った本です。Chef や Capistrano など Rails と共によく使用される技術にも触れてあります。Ruby on Rails 4 アプリケーションプログラミングは、入門的な内容で Rails の機能全体を網羅されています。
 
スポンサーリンク

Leave Your Message!