Ultraviolet Syntax Highlighting Engineをさくらインターネットのサーバにインストールする

UltravioletはRubyによって書かれた様々なSyntax(文法)に対応したSyntax Highlighting Engineです。
今回はこれをさくらインターネットのサーバにインストールしてみましょう。

RubyGemsを使ってインストールをするのですが、以前RubyGemsのインストール方法については書きました。
cocoa*life – ブログをさくらインターネットへ移行しました。

ということで、RubyGemsのインストールが終わっている状態で書き始めます。

Ultravioletのインストール

正規表現ライブラリOniguruma(鬼車)のインストール

まずは正規表現ライブラリであるOnigurumaをインストールします。
普通にconfigureしてmakeしてinstallすれば良いだけです。

wget http://www.geocities.jp/kosako3/oniguruma/archive/onig-5.9.1.tar.gz
tar zxf onig-5.9.1.tar.gz
cd onig-5.9.1
./configure --prefix=$HOME/local
make
make install

RubyGemsを使ってUltravioletのインストール

一直線に答えを書いてしまってもいいのですが、問題解決法を書くのも忘れてしまう自分のためになると思うので、書きます。

gem install -r ultraviolet

とすればいいと思いきや、こんなエラーが出て止まります。

oregexp.c:2:23: oniguruma.h: No such file or directory

どうも標準ではない/home/hoge/local/以下にインストールしてあるので、oniguruma.hなどが見つからないようです。
さらに、エラーの最後を見ていると

Stop in /home/hoge/local/gems/oniguruma-1.1.0/ext.

なんて書いてあって、 どうも依存関係によりまず他のライブラリをインストールしているよう。
調べてみるとOniguruma for Rubyというものらしい。

そこでまず~/local/gems/oniguruma-1.1.0というフォルダを見てみると、Rakefileがある。
さらに中身を読んでみると、30 〜 36行目に以下のような記述があります。

if ENV['PLATFORM'] =~ /win32/
   p.lib_files = ["win/oregexp.so"]
   p.spec_extras[:require_paths] = ["win", "lib", "ext" ]
   p.spec_extras[:platform] = Gem::Platform::WIN32
else
   p.spec_extras[:extensions] = ["ext/extconf.rb"]
end

どうも、ext/extconf.rbがくさそうだという気がしたので、ext/extconf.rbを見てみます。

require 'mkmf'
have_library("onig")
$CFLAGS='-Wall'
create_makefile( "oregexp" )

たった4行!
ですがcreate_makefileでMakefileを作成しているというのは読み取れますので、何かありそうです。
そしてどうも、require ’mkmf’というのが鍵を握っている様な気がしました。
mkmf – Rubyリファレンスマニュアル

Ruby の拡張ライブラリのための Makefile を作成するライブラリです。

mkmf – Rubyリファレンスマニュアル

ということで、ビンゴでしょうか?
さらに読み進めると 

–with-opt-dir=directory
ヘッダファイル、ライブラリファイルを探索するディレクトリ directory/include、directory/lib をそれぞれ追加します。  

mkmf – Rubyリファレンスマニュアル

と書いてあるので、これを指定できればいいということになります。
ということで、

gem install -r oniguruma -- --with-opt-dir=$HOME/local
gem install -r ultraviolet

として、これでめでたくインストールが完了します。1

RubyGemsに慣れている人であれば当たり前のことなのかもしれませんが、自分は初めてだったので良い経験になりました。

Ultravioletの使い方

uvというコマンドがUltravioletのコマンドになりますが、uv –helpでヘルプを見てみると

uv -t amy -h ~/.bashrc > bashrc.html

なんてのがサンプルとして書いてあります。
amyというのはテーマの名前のようです。

テーマはUltraviolet Theme Galleryで見ることができます。
-sでSyntaxを指定することができますが、ある程度は自動的に認識されるのかもしれません。

uv -l syntax

で利用可能なSyntax一覧を表示することが可能です。 

自分は.zshrcをやってみました。
Syntaxが認識されないので、-s shell-unix-genericというのを指定しました。

uv -t blackboard -s shell-unix-generic -h ~/.zshrc > zshrc.html

生成されたzshrc.htmlはcssを参照しているところがあるのですが、そのcssは
/home/hoge/local/gems/ultraviolet-0.10.2/render/xhtml/files/cssにあります。

Rubyからもライブラリとして使うことができるようです。
Usageのところを見ると書いてあります。

  1. 試してはいないけれど、gem install -r ultraviolet — –with-opt-dir=$HOME/localでうまくいくのかなぁ? []