Lubuntu 14.04にrbenvとruby-buildで入れたRuby 2.1.5でRuby/Tkを使う
はじめに
ちょっとした数値データを処理してグラフを表示するためにRuby Gnuplotを使っていたのですが、ここを見てRuby/Tkの素晴しさを知り、早速Lubuntu 14.04にrbenvとruby-buildで入れたRuby 2.1.5でRuby/Tkを使おうとしたところ、環境構築にてこずりました。
Tcl/Tk 8.5のインストール
まず、Tcl/Tkをインストールします。apt-get
でtk-dev
をインストールするとtk8.6-dev
が入りますが、現時点でRuby/Tkは8.6には対応してないそうなので(注: パッチを当てると使えます。こちらを参照のこと。11/23/14追記)(注: Ruby 2.2.0ではパッチが必要なくなったようです。こちらを参照のこと。12/02/15追記)、以下のようにtk8.5-dev
を入れます。
$ sudo apt-get install tk8.5-dev
Ruby 2.1.5のインストール
次にRubyとRuby/Tkをrbenvとruby-buildでインストールします。普通は
$ rbenv install 2.1.5
だけでいいと思うのですが、今回はこのままではTcl/Tkのヘッダやライブラリを認識せず、Ruby/Tkがコンパイルされません。ここでだいぶ時間をロスしました。こちらのサイトでは、必要なライブラリにシンボリックリンクを張って対応しています。それでも良いと思いますが、/usr/lib
にパッケージシステム管理外のシンボリックリンクがあるのは何となく気持ち悪いので、以下のようにconfigue
のオプションでどうにかします。32bitの場合はx86_64-linux-gnu
をi386-linux-gnu
などに適宜変更してください。
$ RUBY_CONFIGURE_OPTS="--with-tcltkversion=8.5 \ --with-tcl-lib=/usr/lib/x86_64-linux-gnu \ --with-tk-lib=/usr/lib/x86_64-linux-gnu \ --with-tcl-include=/usr/include/tcl8.5 \ --with-tk-include=/usr/include/tcl8.5 \ --enable-pthread" rbenv install 2.1.5 -v $ rbenv global 2.1.5 $ rbenv rehash
私の環境では、これでRuby/Tkがインストールされました。サンプルを動かしてみます。
$ ruby ext/tk/sample/24hr_clock.rb
うまく動いているようです。
最後に
そもそも拡張TkパッケージPlotchartを使いたくてがんばっているわけですが、まだ使えていません。
$ sudo apt-get install tklib
という感じでPlotchartを入れたのですが、サンプルを実行すると下記のようにエラーになります。
$ ruby ext/tk/sample/tkextlib/tcllib/plotdemos1.rb /home/gzalt/.rbenv/versions/2.1.5/lib/ruby/2.1.0/tk/package.rb:86:in `rescue in require': TkPackage attempt to provide package Plotchart 2.1.0 failed: package Plotchart 2.0.1 provided instead (RuntimeError)
道のりは長い…
Plotchartのバグ(23/11/14追記)
ここによると、どうもPlotchartのバグのようです。下記のように修正します。
--- /usr/share/tcltk/tklib0.6/plotchart/plotchart.tcl.orig 2013-03-14 17:01:30.000000000 +1100 +++ /usr/share/tcltk/tklib0.6/plotchart/plotchart.tcl 2014-11-23 19:11:59.456417506 +1100 @@ -2849,4 +2849,4 @@ # Announce our presence # -package provide Plotchart 2.0.1 +package provide Plotchart 2.1.0
サンプルを動かしてみます。
$ ruby ext/tk/sample/tkextlib/tcllib/xyplot.rb
うまく表示されました。