coderayでシンタックスハイライトする
タグ: ruby / 初版公開: 2014-06-29

coderayはピュアRubyのシンタクスハイライト用ライブラリだ。 公式サイトによると現時点で22個の主要な言語に対応している。

シンタックスハイライトの分野ではPythonのpygmentsが有名だ。 pygmentsはBrainFuckなどどうでも良いものを含めて100以上もの言語に対応している。 pygmentsをRubyから使用するためのラッパpygments.rbもある。 しかし、ピュアRubyという点でcoderayを抑えておくのもメリットがあるだろう。

インストール

coderayはgemからインストールできる。

gem install coderay

使い方

coderayによるハイライトは以下2つの操作により行う。

  1. 言語をパースしてトークンの集合を作る
  2. トークンの集合を任意の形式で出力する

1.の操作を行うモジュールをScanner、2.の操作を行うモジュールをEncoderと呼ぶ。

以下はRubyのソースコードを、ターミナルに出力させる例である。 CodeRay.scanでトークンの集合を作り、トークンの集合をterminalでターミナル出力用の文字列にしている。 たった1行であるが、これだけで色付きでRubyのソースコードを表示できる。

require 'coderay'

src = <<RUBY
def hello
  puts 'Hello.'
end
RUBY

puts CodeRay.scan(src, :ruby).terminal

別のバリエーションも見てみよう。 ファイルの内容をハイライトして表示するにはCodeRay.scan_fileを使う。 この場合、言語の種類は拡張子から判断されるので、指定不要である。 さらに結果をHTMLで出力するに、htmlを使う。

require 'coderay'

puts CodeRay.scan_file('hello.rb').html

出力結果は以下のようになる。

<span class="keyword">def</span> <span class="function">hello</span>
  puts <span class="string"><span class="delimiter">'</span><span class="content">Hello.</span><span class="delimiter">'</span></span>
<span class="keyword">end</span>