骨のダイスを転がそう

2009|01|02|03|04|05|06|07|10|12|
2010|01|02|03|04|05|06|07|08|09|10|11|
2011|02|03|05|06|07|08|09|10|11|12|
2012|01|02|04|05|09|10|11|12|
2013|01|02|04|
2014|11|
2015|01|04|05|
2016|06|07|08|09|11|
2017|01|02|03|04|
2018|03|

2010-10-10

_ [Ruby][Windows] Jruby と Windows でカラー端末

nanoc3 という静的HTMLを生成するCMSがある。面白そうなので手元のWindows上で、jruby で試してみたら……

C:\home\hoge\sample>nanoc3 create_site test
[1m [32m      create [0m  config.yaml
[1m [32m      create [0m  Rakefile
[1m [32m      create [0m  Rules
[1m [32m      create [0m  content/index.html
[1m [32m      create [0m  content/stylesheet.css
[1m [32m      create [0m  layouts/default.html
Created a blank nanoc site at 'test'. Enjoy!

化けた。これは、cmd.exe が、ANSI端末のカラー化に対応していないためだ。では、win32console を入れると良いらしい。ところが、win32console は、Cの拡張ライブラリを使ってるので、jruby では使えない。困った。

で、いろいろとググったところ ansicolor というのを発見。

ANSI color support for Java/JRuby on Windows

これじゃあ!! というわけで

jgem sources -a http://gems.github.com
jgem install aslakhellesoy-ansicolor

で導入。jruby 1.5.3 で起動したところテストスクリプトが落ちる。ライブラリに

require 'java'

を追記してやる必要があった。で、nanoc3 で、端末に出力してる部分に

vi nanoc3/cli/logger.rb
     begin
       #require 'Win32/Console/ANSI' if RUBY_PLATFORM =~/mswin|mingw/
       require 'ansicolor'
     rescue LoadError
       @color = false
     end

としたらカラー出力成功!!せっかくだから本家にも報告したいんだがどうすりゃ良いんだろう。