2008年6月21日土曜日

xmpfilter で Ruby のコードに実行結果をコメントに表示

1. 自動注釈プログラム xmpfilter とは?

Ruby で、スクリプトに注釈として、実行結果を載せたい場合、xmpfilter を使う。

xmpfilter を知ったきっかけは、Rubyの初心者にたいして「これは読むべき」だと思うコードを教えてください。.. - 人力検索はてな のコメントを読んだこと。

僕の例だとxmpfilterという超強力な自動注釈プログラムに惹かれ、内部を解析しました。

 

2. xmpfilter のインストールと実行

eigenclass - xmpfilter によると、

xmpfilter は rcodetools に含まれている。As of 0.4.0, xmpfilter has been included in rcodetools.

eigenclass - rcodetools に従い、コマンドラインから 、rcodetools をインストール。

gem install rcodetools

これにより、コマンドラインから、xmpfilter を実行できるようになる。

xmpfilter ファイル名

 

3. Code annotation

ブログにソースコードを載せるとき、実行結果や、変数の動きも含めたい場合がある。

例えば、次のようなコードを test.rb というファイル名で保存したとする。

出力させたい変数の右に # => と書く。

10.times do |i|
  i                    # =>
end

a = [1,2,3,4,5]
a.map{|i| i*2}         # =>

puts "ほげ"                    
puts a                         

コマンドラインから、以下を実行すると、

xmpfilter test.rb

次の出力が得られる。

10.times do |i|
  i                    # => 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
end

a = [1,2,3,4,5]
a.map{|i| i*2}         # => [2, 4, 6, 8, 10]

puts "ほげ"                    
puts a                         
# >> ほげ
# >> 1
# >> 2
# >> 3
# >> 4
# >> 5

 

4. Meadow (Emacs) での利用

gem でインストールすると、Ruby をインストールしたディレクトリの中に、

  • C:\ruby\lib\ruby\gems\1.8\gems\rcodetools-0.7.0.0\rcodetools.el

が存在する。これを C:\meadow\site-lisp に入れ、.emacs に

(require 'rcodetools)

を記述した。

これにより、Ruby のスクリプト上で、

M-x xmp

とすると、xmpfilter を適用した結果が表示される。 また、

M-x comment-dwim (M-;)

でコメントを入力することができて便利。

追記 (2009.12.27) : Dropbox に Emacs のライブラリを置いたのに伴い、rcodetools.el も Dropbox に置くことにした。