2026/02/21(土) [n年前の日記]
#4 [ruby] ruby-tkをRuby 3.4.8にインストール
Windows11 x64 25H2 + Ruby 3.4.8 x64 (Rubyinstaller版) に、tk (ruby-tk) をインストールしてみた。
結論を先に書いておくけど、以下でインストールすればいいかもしれない。
結論を先に書いておくけど、以下でインストールすればいいかもしれない。
gem install tk -- --with-cflags="--std=c17"
◎ インストールで試行錯誤 :
まずは素直に以下を打ってみたけれど。
ビルド時にエラーが出てしまってダメだった…。tcltklib.o を作れないと言ってるな…。
_tcltklib.c build issue with Windows 11 + MSYS2 (RubyInstaller) - Issue #72 - ruby/tk
Ruby 3.4.5 の時点でもエラーが出てビルドできなかったっぽい。
試しに MSYS2上で Ruby 3.4.8 をインストールして gem install tk をしてみたけど、別のエラーが出てビルドできなかった。MSYS2上ですらインストールできないのか…。
Cコンパイラに、CFLAGS="--std=c17" を渡してやれ、という話があるな…。
_Compatibility issues with Ruby 3.4.7 - Issue #74 - ruby/tk
むむ? これならビルドが通ったっぽい?
手元にあったサンプルを動かしてみたら、Hello World的なサンプルなら動いてくれた。
> gem install tk
Fetching tk-0.5.1.gem
Temporarily enhancing PATH for MSYS/MINGW...
Using msys2 packages: mingw-w64-ucrt-x86_64-tk
Building native extensions. This could take a while...
ERROR: Error installing tk:
ERROR: Failed to build gem native extension.
current directory: D:/Ruby/Ruby34-x64/lib/ruby/gems/3.4.0/gems/tk-0.5.1/ext/tk
...
make: *** [Makefile:252: tcltklib.o] エラー 1
make failed, exit code 2
Gem files will remain installed in D:/Ruby/Ruby34-x64/lib/ruby/gems/3.4.0/gems/tk-0.5.1 for inspection.
Results logged to D:/Ruby/Ruby34-x64/lib/ruby/gems/3.4.0/extensions/x64-mingw-ucrt/3.4.0/tk-0.5.1/gem_make.out
ビルド時にエラーが出てしまってダメだった…。tcltklib.o を作れないと言ってるな…。
_tcltklib.c build issue with Windows 11 + MSYS2 (RubyInstaller) - Issue #72 - ruby/tk
Ruby 3.4.5 の時点でもエラーが出てビルドできなかったっぽい。
試しに MSYS2上で Ruby 3.4.8 をインストールして gem install tk をしてみたけど、別のエラーが出てビルドできなかった。MSYS2上ですらインストールできないのか…。
Cコンパイラに、CFLAGS="--std=c17" を渡してやれ、という話があるな…。
_Compatibility issues with Ruby 3.4.7 - Issue #74 - ruby/tk
gem install tk -- --with-cflags="--std=c17"
むむ? これならビルドが通ったっぽい?
手元にあったサンプルを動かしてみたら、Hello World的なサンプルなら動いてくれた。
◎ 余談。RubyでGUIアプリは鬼門 :
一応インストールできたけど…。Ruby/Tk で何かを作るということは、自分の場合はまず無いのだよな…。
Tkを使って何かしらを作りたいなら Python + tkinter で作るほうが良い。絶対にPythonを選んだほうが良い。
Python は tkinter が標準で同梱されてるから、Rubyのようにこんな初っ端で無意味に悩まなくて済む。しかも Python ならユーザ数も解説記事も圧倒的に多いからググってコピペしてれば大体なんとかなる。
Ruby/Tkに限らず、Ruby でGUIアプリを作ろうとすると軽く地獄を見るから止めたほうがいい…。遊びや暇潰しなら止めないけど…。
特にストレージの圧迫具合がちょっと…。
それらと比べると、Ruby製GUIアプリを動作させるための2.76GBというファイルサイズは桁違いに大き過ぎる。
そもそもRubyInstallerに同梱されてるMSYS2(DevKit)の中には Python が入ってるので…。だったら最初からPython使えよ!
そんなわけで、LL(Lightweight Language、軽量プログラミング言語)でちょっとしたGUIアプリを作りたいなら Python + tkinter のほうが絶対に良いです。exe化もできるし。
まあ、これはあくまで Windows上の話で…。gtk等があらかじめ入っていて各アプリが共用してるLinux上ならこんなギャグレベルの状態にはならないのだろうなと…。
Ruby で Qt を使えるようにした方も「もうRubyなんて使わずにPythonを使いましょうね」って言っちゃってるし…。
_ryanmelt/qtbindings: An easy to install gem version of the Ruby bindings to Qt
Tkを使って何かしらを作りたいなら Python + tkinter で作るほうが良い。絶対にPythonを選んだほうが良い。
Python は tkinter が標準で同梱されてるから、Rubyのようにこんな初っ端で無意味に悩まなくて済む。しかも Python ならユーザ数も解説記事も圧倒的に多いからググってコピペしてれば大体なんとかなる。
Ruby/Tkに限らず、Ruby でGUIアプリを作ろうとすると軽く地獄を見るから止めたほうがいい…。遊びや暇潰しなら止めないけど…。
- 今動いたとしてもRuby本体のバージョンアップが早いので、サードパーティ製GUIライブラリがRuby本体のバージョンアップに対応できず、下手すると1年後にはそのRubyスクリプトが現行バージョンで動かなくなる。
- ruby-gtk3/gtk4 はexe化できないので、作ったGUIアプリを他のPCに持っていって使うことが難しい。
- 他のPCでもそのGUIアプリを動かせるように RubyInstaller + gtk3/gtk4をインストールすると、全部で2.76GBほどになる。
特にストレージの圧迫具合がちょっと…。
- Delphi や LazarusでGUIアプリを作れば数MBのexeで済む。
- golang で作ったexeでも十数MBで済む。
- C#で作って.NETランタイム込みにしたとしてもせいぜい100MBを超えるぐらい。
それらと比べると、Ruby製GUIアプリを動作させるための2.76GBというファイルサイズは桁違いに大き過ぎる。
そもそもRubyInstallerに同梱されてるMSYS2(DevKit)の中には Python が入ってるので…。だったら最初からPython使えよ!
そんなわけで、LL(Lightweight Language、軽量プログラミング言語)でちょっとしたGUIアプリを作りたいなら Python + tkinter のほうが絶対に良いです。exe化もできるし。
まあ、これはあくまで Windows上の話で…。gtk等があらかじめ入っていて各アプリが共用してるLinux上ならこんなギャグレベルの状態にはならないのだろうなと…。
Ruby で Qt を使えるようにした方も「もうRubyなんて使わずにPythonを使いましょうね」って言っちゃってるし…。
_ryanmelt/qtbindings: An easy to install gem version of the Ruby bindings to Qt
[ ツッコむ ]
以上です。