2015/12/10(木) [n年前の日記]
#1 [ruby] Ruby/Tkで拡張Tkを使えるようにするために少し試したり
Rubyを使ってGUIの何かしらを作れる Ruby/Tkというライブラリがあるのだけど。これは、Tcl/TkのTkを、Rubyから呼び出して使えるようにしたもの、という説明で合ってるのか合ってないのかちょっと分からんけど大体そんな感じのもので。
Windows環境なら、 _RubyInstaller を使って Ruby をインストールする際、「Ruby/Tkもインストールする?」と聞かれるからチェックを入れとけば Ruby/Tk が使えるのだけど。しかしこの Ruby/Tk は、拡張Tkとやらが含まれてない版らしく。
せっかくだから拡張Tkを使えるようにできないか少し試してみたり。
Windows環境なら、 _RubyInstaller を使って Ruby をインストールする際、「Ruby/Tkもインストールする?」と聞かれるからチェックを入れとけば Ruby/Tk が使えるのだけど。しかしこの Ruby/Tk は、拡張Tkとやらが含まれてない版らしく。
せっかくだから拡張Tkを使えるようにできないか少し試してみたり。
◎ Ruby 1.9.3の場合。 :
Ruby 1.9.3 なら、以下の解説記事通りにやったら使えるようになった。
_島ぶくろ [Ruby] Ruby/Tk、拡張Tkをインストールする方法 (2012年7月現在)
_RubyTk - Ruby/Tk-Kit から、「include some Tcl/Tk extensions : tcltklib.so-w-exts-20100523-ruby191-mingw-for-RubyInstaller191」をDLして、tcltklib.so にリネーム。
Ruby1.9.3インストールフォルダ\lib\ruby\1.9.1\i386-mingw32\ 内の tcltklib.so を tcltklib.so.org にリネームしてバックアップ。先ほどDLした tcltklib.so を上記フォルダにコピー。
これで、拡張Tkが使えるようになった模様。
_島ぶくろ [Ruby] Ruby/Tk、拡張Tkをインストールする方法 (2012年7月現在)
_RubyTk - Ruby/Tk-Kit から、「include some Tcl/Tk extensions : tcltklib.so-w-exts-20100523-ruby191-mingw-for-RubyInstaller191」をDLして、tcltklib.so にリネーム。
Ruby1.9.3インストールフォルダ\lib\ruby\1.9.1\i386-mingw32\ 内の tcltklib.so を tcltklib.so.org にリネームしてバックアップ。先ほどDLした tcltklib.so を上記フォルダにコピー。
これで、拡張Tkが使えるようになった模様。
◎ Ruby 2.0以降の場合その1。 :
Ruby 2.0以降は、別途 ActiveTclをインストールして、そちらの拡張Tkを使う方法があるらしい。
_ActiveTcl Downloads - ActiveState から、ActiveTcl8.6.4.1.299124-win32-ix86-threaded.exe をDLしてインストール。今回は D:\Tcl にインストールした。
Ruby2.0インストールフォルダ\lib\ruby\2.0.0\tkextlib\ 内に setup.rb というファイルがあるので、これもリネームしつつコピーしてバックアップ。その後、setup.rb を編集。以下を追加した。
ただ、このやり方では ocra を使ってスクリプトを exe化しようとした時にハマる。
_2010/12/22の記事 のコメントで教えてもらった、以下の指定で exe化してみたものの。
この指定で生成された exe を他のPCに持っていっても起動しなかった。「--windows」指定を外して、DOS窓が表示されるexeを生成して確認してみたら、やはり拡張Tkが見つからなくて落ちていた。
つまり、この方法は、あくまで自分の環境で動けばそれでいい、他のPCにスクリプトは持っていかない、といった場面でしか使えないかもしれず。
_ActiveTcl Downloads - ActiveState から、ActiveTcl8.6.4.1.299124-win32-ix86-threaded.exe をDLしてインストール。今回は D:\Tcl にインストールした。
Ruby2.0インストールフォルダ\lib\ruby\2.0.0\tkextlib\ 内に setup.rb というファイルがあるので、これもリネームしつつコピーしてバックアップ。その後、setup.rb を編集。以下を追加した。
[ 'D:\Tcl\lib\teapot\package\tcl\lib', 'D:\Tcl\lib\teapot\package\win32-ix86\lib' ].each do |dir| TkPackage.add_path(File.expand_path(dir)) endこれで、拡張Tkが使えるようになった。
ただ、このやり方では ocra を使ってスクリプトを exe化しようとした時にハマる。
_2010/12/22の記事 のコメントで教えてもらった、以下の指定で exe化してみたものの。
ocra Rubyスクリプト.rb --windows Rubyインストールフォルダ\lib\tcltk\ --no-autoload --add-all-core
この指定で生成された exe を他のPCに持っていっても起動しなかった。「--windows」指定を外して、DOS窓が表示されるexeを生成して確認してみたら、やはり拡張Tkが見つからなくて落ちていた。
つまり、この方法は、あくまで自分の環境で動けばそれでいい、他のPCにスクリプトは持っていかない、といった場面でしか使えないかもしれず。
◎ Ruby 2.0以降の場合その2。 :
ActiveTcl内のファイルをRubyインストールフォルダにコピーすることでも拡張Tkを使えるようになるらしい。おそらくこちらのほうが、ocra で exe化するなら都合がいいはず。ただ、ファイル更新等忘れてしまう可能性がありそうな点はデメリットかもしれず。
まず、Ruby2.0インストールフォルダ\lib\ruby\2.0.0\tkextlib\setup.rb を編集して、方法その1で追加した部分を削除。
ActiveTclインストールフォルダ\lib\teapot\package\win32-ix86\lib\ 以下のフォルダやファイルを、Ruby2.0インストールフォルダ\lib\tcltk\ 以下にごっそりコピー。
Ruby2.0インストールフォルダ\lib\tcltk\ 以下に元々入ってたフォルダ群は以下。
ActiveTclインストールフォルダ\lib\teapot\package\win32-ix86\lib\ 以下に入ってたフォルダやファイル群は以下。
ここまで試したところ、このやり方でも拡張Tkが使えるようになった。
また、ocra で exe化したものを他のPCにコピーしても動いてくれた。
まず、Ruby2.0インストールフォルダ\lib\ruby\2.0.0\tkextlib\setup.rb を編集して、方法その1で追加した部分を削除。
ActiveTclインストールフォルダ\lib\teapot\package\win32-ix86\lib\ 以下のフォルダやファイルを、Ruby2.0インストールフォルダ\lib\tcltk\ 以下にごっそりコピー。
Ruby2.0インストールフォルダ\lib\tcltk\ 以下に元々入ってたフォルダ群は以下。
dde1.3 reg1.2 tcl8 tcl8.5 tk8.5
ActiveTclインストールフォルダ\lib\teapot\package\win32-ix86\lib\ 以下に入ってたフォルダやファイル群は以下。
img_base1.4.3 img_bmp1.4.3 img_gif1.4.3 img_ico1.4.3 img_jpeg1.4.3 img_pcx1.4.3 img_pixmap1.4.3 img_png1.4.3 img_ppm1.4.3 img_ps1.4.3 img_sgi1.4.3 img_sun1.4.3 img_tga1.4.3 img_tiff1.4.3 img_window1.4.3 img_xbm1.4.3 img_xpm1.4.3 Itk3.4 jpegtcl8.4 Memchan2.3 Mk4tcl2.4.9.7.1 pngtcl1.4.12 sqlite33.8.10.2 Tclx8.4 tdom0.8.3 tifftcl3.9.4 Tktable2.11 tls1.6.5 treectrl2.4.1 Trf2.1.4 vfs1.4.2 zlibtcl1.2.8 pkgIndex.tcl
ここまで試したところ、このやり方でも拡張Tkが使えるようになった。
また、ocra で exe化したものを他のPCにコピーしても動いてくれた。
◎ 参考ページ。 :
_Windows 7上でRuby/Tkを使ってPlotchart - ござるのブログ
_Ruby/TkでTk拡張を使っているRubyスクリプトをexe化 - ござるのブログ
_Windows 7 に Ruby 2.0 x64 を その4 〜拡張 tk の問題と対策〜|Ruby と iPhone と UI と
_RubyTk/拡張ライブラリを使う | おこられリーダーのブログ
_Ruby/Tk を含むスクリプトをocraでexe化する方法 - なんだそのカオは -_-
_Ruby/TkでTk拡張を使っているRubyスクリプトをexe化 - ござるのブログ
_Windows 7 に Ruby 2.0 x64 を その4 〜拡張 tk の問題と対策〜|Ruby と iPhone と UI と
_RubyTk/拡張ライブラリを使う | おこられリーダーのブログ
_Ruby/Tk を含むスクリプトをocraでexe化する方法 - なんだそのカオは -_-
◎ 余談。 :
それにしても、Ruby/Tkを使うのは面倒臭いな…。いや、拡張Tkを使おうとさえしなければ問題は起きないのだろうけど。
[ ツッコむ ]
以上、1 日分です。