mieki256's diary



2023/10/16(月) [n年前の日記]

#2 [ruby] Ruby/Tk+Tk拡張を動かそうとしてハマった

久々に Ruby を触ったことだし、せっかくだからと、HDD内で眠ってた昔のスクリプトの動作確認をしていたのだけど。cairo + Tk + Tk拡張を使ったスクリプトを動かそうとしてハマってしまった。環境は Windows10 x64 22H2。

cairo について :

cairo を使うと、アンチエイリアスがかかった奇麗な図形描写が簡単にできる。

_cairo: 2 次元画像描画ライブラリ

とりあえず手元の環境では、以下の組み合わせで動いてくれた。
  • Ruby 1.9.3 p551 i386-mingw32 (RubyInstaller) + cairo 1.12.4 x86-mingw32
  • Ruby 2.3.3 p222 i386-mingw32 (RubyInstaller) + cairo 1.15.9 x86-mingw32
  • Ruby 2.6.10 p210 i386-mingw32 (RubyInstaller2) + cairo 1.17.12
  • Ruby 3.0.4 p208 i386-mingw32 (RubyInstaller2) + cairo 1.17.12
  • Ruby 3.2.2 i386-mingw32 (RubyInstaller2) + cairo 1.17.12

Ruby 2.x 以降、かつ、DevKit がインストール済みの環境なら、基本的には以下でインストールできる。その Ruby のバージョン専用のバイナリを、DevKit を使ってビルドしてからインストールされる。
gem install cairo

Ruby 1.9.x は注意が必要。cairo 1.12.4 以前のバージョンしか動かないので、バージョンとプラットフォーム(x86-mingw32、x64-mingw32等)を指定してインストールすることになる。
gem install cairo --platform x86-mingw32 -v=1.12.4

_mieki256's diary - cairo + Ruby Windows版が使えない

こんな具合なので、Ruby + cairo については今でも全然使えそうだなと感じたのだけど。

Ruby/TkをWindows上で使いたい :

cairo + DXRuby を使うスクリプトについては、どのバージョンの Ruby でもスンナリ動いてくれたのだけど、cairo + Tk(Ruby/Tk) + Tk拡張を使ったスクリプトが動かなくて困った。

Windows上の Ruby/Tk は状況が面倒臭くて…。
  • Ruby 2.4 の時点で、標準ライブラリから Tk が外されてしまった。Ruby 2.4 以降は、gem install tk でインストールしないといけない。
  • Ruby 2.3 までは、Windows の場合、RubyInstaller(RubyInstaller2ではない) をインストールすれば Tk も使えていた、らしい。インストール時に「Tcl/Tkも一緒にインストールする」的な指定項目があるので、そこにチェックを入れてインストールすれば Ruby/Tk が使えたのだとか。
  • ただ、RubyInstaller に同梱されている Tk は、基本的な機能しか持っていない。Tk拡張を使ったスクリプトは動かない。
  • Ruby 2.4 以降は、RubyInstaller ではなく RubyInstaller2 になったので、Tcl/Tk を一緒にインストールしてくれなくなった。Windows の場合、別途 ActiveTcl のインストールが必要になるのだとか。
  • しかし ActiveTcl は有償になってしまった(らしい)。また、64bit版はあるけれど、32bit版はなくなった。Ruby 32bit版では Tk が使えない。
  • Rub 1.9.x だけは、Tk拡張を含めた tcltklib.so が存在するので、その tcltklib.so と、元々入っていた tcltklib.so を交換するだけでTk拡張が使える。

そんなわけで、Ruby + Tk + Tk拡張を使いたいと思ったら、Ruby 1.9.x を利用するしかない状況で…。

これがもし、標準的な Tk の機能しか使わないなら、Ruby 2.3 までのどれかを選べば ―― RubyInstaller (RubyInstaller2ではない) をインストールすればそれで済むのだけど…。

Ruby 2.4 以降で Ruby/Tk を使いたい場合は、これはもう一体何をどうしたらいいのかさっぱり不明。昔だったら、ActiveTcl もインストールして、とかやれたんだろうけど。

ちなみに、これが Python なら状況が全然違う。Python をインストールする際に Tk(tkinter)も一緒にインストールできるから、標準で Tk (tkinter) が使えるも同然なので…。そのせいもあるのか、もっと簡単に Tk を扱えるラッパーライブラリも登場していたりして、簡単なGUIアプリならすぐに作れる状態。

_Tkinterを使うのであればPySimpleGUIを使ってみたらという話 #Python - Qiita
_【PySimpleGUI】PythonでカンタンにGUIを作ろう! #Python - Qiita

Ruby が地獄だとしたら Python は天国。

余談。RubyはGUIが鬼門 :

ポエムです。

昔から「RubyはGUIが鬼門」と言われてたりするのだけど、少なくとも Ruby/Tk に関してはこんな感じで、というかどう見ても死んでるけれど。他のGUIライブラリも軒並み開発が止まって死んでるわけで…。

だから、「RubyでGUIアプリを作ってみたい」と言い出す人が居たら、

「それは絶対に、絶対にやめておいたほうがいい」
「今は動いていても Ruby のバージョンが上がったらそのアプリは十中八九動かなくなるよ」
「そもそもライブラリが入手できなくなるから」

とアドバイスしたくなるというか…。いやまあ、さすがにこの状況で「RubyでGUIを」と言い出す人はそもそも居ないか。「今からCOBOL勉強します」と言い出すようなものかも。

もっとも、このあたりは Windows の場合の話で、Linux上ではまたちょっと違うらしいのだけど…。Linux の場合、システムに Tk や GTK が入ってくるので、「どうやって Tk を入れたらいいんだ」と悩まずに済むから Ruby/Tk や Ruby/GTK も比較的スンナリ使えるのかもしれない。

でもまあ、何にせよ、Windows上で動くちょっとしたGUIアプリを今から作りたいなら、Ruby より Python を選んだほうがいいですわな。Python ならGUIライブラリも選び放題だし。

Ruby 1.8 の頃は良かったな…。vruby とか良さそうに見えたっけ。言語本体だけがいくら頑張ってみてもダメなんだよなあ…。考えてみたら Tcl/Tk 自体がそうか。言語部分の Tcl はアレだけど Tk は使われ続けてたりするし。

ポエムです。

以上です。

過去ログ表示

Prev - 2023/10 - Next
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project