2022/08/01(月) [n年前の日記]
#1 [ruby] ruby-gtk2をWindows10上で動かしたい
Windows10 x64 21H2 + Ruby で、ruby-gtk2 を動かしたい。昨日動作確認したところ、どのバージョンの Ruby でも動いてくれなかったのだけど、しつこく試していたら動く組み合わせが少しだけ見つかった。
Ruby は、RubyInstaller 版。
_RubyInstaller for Windows
前提知識として、各gem に x86-mingw32 や x64-mingw32 とついているバージョンは、バイナリ(*.soファイル)も含んでいるのでインストール時にビルドしなくて済む。ついてないバージョンはソースからビルドすることになるので、DevKit のインストールも必要になる。
Ruby は、RubyInstaller 版。
_RubyInstaller for Windows
前提知識として、各gem に x86-mingw32 や x64-mingw32 とついているバージョンは、バイナリ(*.soファイル)も含んでいるのでインストール時にビルドしなくて済む。ついてないバージョンはソースからビルドすることになるので、DevKit のインストールも必要になる。
◎ Ruby 2.2.6 x86 の場合。 :
Windows10 x64 21H2 + Ruby 2.2.6 p396 x86-mingw32 では、以下の組み合わせで動作した。
ただし、Ruby 2.2.6 x86 をインストールした直後は、gem が使えなかった。
gem を使うためには、rubygems-update-2.7.11.gem をダウンロードして、ローカルからインストールして、gem (rubygems)をアップデートする必要がある。ちなみに、rubygems-update 2.7.11 の次バージョンは 3.0.0 になるけれど、そこからは Ruby 2.3.0 以上を要求されるので Ruby 2.2.6 では使えない。
gem のアップデートは、以下のページを参考にして作業した。
_Windowsでgem installでSSLのエラーが出た話 - Qiita
gem のアップデートができたら、cairo、glib2、gtk2 を、バージョンを指定してインストール。
そんなわけで、Ruby 2.2.6 x86-mingw32 + cairo 1.15.9 x86-mingw32 + gtk2 3.1.1 x86-mingw32 の組み合わせなら、ruby-gtk2 が一応動いてくれた。
- Ruby 2.2.6 x86-mingw32 + cairo 1.15.9 x86-mingw32 + gtk2 3.1.1 x86-mingw32
> ruby -v ruby 2.2.6p396 (2016-11-15 revision 56800) [i386-mingw32] > gem list | grep -E "gobject|gio2|gdk_pixbuf2|cairo|pango|atk|gtk2|glib2" atk (3.1.1 x86-mingw32) cairo (1.15.9 x86-mingw32) gdk_pixbuf2 (3.1.1 x86-mingw32) gio2 (3.1.1 x86-mingw32) glib2 (3.1.1 x86-mingw32) gobject-introspection (3.1.1 x86-mingw32) gtk2 (3.1.1 x86-mingw32) pango (3.1.1 x86-mingw32)
ただし、Ruby 2.2.6 x86 をインストールした直後は、gem が使えなかった。
gem を使うためには、rubygems-update-2.7.11.gem をダウンロードして、ローカルからインストールして、gem (rubygems)をアップデートする必要がある。ちなみに、rubygems-update 2.7.11 の次バージョンは 3.0.0 になるけれど、そこからは Ruby 2.3.0 以上を要求されるので Ruby 2.2.6 では使えない。
gem のアップデートは、以下のページを参考にして作業した。
_Windowsでgem installでSSLのエラーが出た話 - Qiita
wget https://rubygems.org/downloads/rubygems-update-2.7.11.gem gem install --local ./rubygems-update-2.7.11.gem update_rubygems --no-ri --no-rdoc
gem のアップデートができたら、cairo、glib2、gtk2 を、バージョンを指定してインストール。
gem install cairo -v 1.15.9 gem install glib2 -v 3.1.1 gem install gtk2 -v 3.1.1
- cairo 1.15.9 (2017/06/03) ならインストールできたし、require "cairo" も実行できた。
- しかし、gtk2 3.2.1 をインストールしたら、pango.so がロードできなくてエラーになった。
- cairo 1.15.9 と同時期の pango は 3.1.6 のはずだけど、glib2 3.1.6 や gtk2 3.1.6 をインストールしても pango.so がロードできなくてエラーになった。
- gtk2 3.1.1 をインストールしたところ、require "gtk2" が通った。
そんなわけで、Ruby 2.2.6 x86-mingw32 + cairo 1.15.9 x86-mingw32 + gtk2 3.1.1 x86-mingw32 の組み合わせなら、ruby-gtk2 が一応動いてくれた。
◎ Ruby 2.3.3 x86 の場合。 :
手元のメモによると、2019/04/19 の時点では、以下の組み合わせでも動いていたらしいのだけど…。
2022/08/01現在、上記の組み合わせでは何故か動かなくなっていた。
しかし、バージョンを変えて試していったところ、以下の組み合わせなら動作した。
ただ、インストール時に注意点がある。glib2 3.1.1 その他をインストールしようとした際、何故か cairo 1.15.14 も一緒にインストールされてしまう。cairo 1.15.14 は Ruby 2.3.3 x86 上で動かないので、そのままだと require "gtk2" をした時に「cairo.so が読み込めない」と言ってきて動かない。gem uninstall cairo で 1.15.14 をアンインストールして、1.15.9 だけを残した状態にすれば動く。
ちなみに、Ruby 2.3.3 x86-mingw32 も、インストールした直後は gem が動かない。rubygems-update 最新版を入手してアップデートする必要がある。
_Download RubyGems | RubyGems.org
rubygems-3.3.19.zip を入手して解凍。中に入って、ruby setup.rb を実行すればアップデートされる。
- Ruby 2.3.3 x86-mingw32 + cairo 1.15.14 x86-mingw32 + gtk2 3.2.9 x86-mingw32
- Ruby 2.3.3 x86-mingw32 + cairo 1.15.11 x86-mingw32 + gtk2 3.2.1 x86-mingw32
2022/08/01現在、上記の組み合わせでは何故か動かなくなっていた。
しかし、バージョンを変えて試していったところ、以下の組み合わせなら動作した。
- Ruby 2.3.3 x86-mingw32 + cairo 1.15.9 x86-mingw32 + gtk2 3.1.1 x86-mingw32
> ruby -v ruby 2.3.3p222 (2016-11-21 revision 56859) [i386-mingw32] > gem list | grep -E "gobject|gio2|gdk_pixbuf2|cairo|pango|atk|gtk2|glib2" atk (3.1.1 x86-mingw32) cairo (1.15.9 x86-mingw32) cairo-gobject (3.1.1 x86-mingw32) gdk_pixbuf2 (3.1.1 x86-mingw32) gio2 (3.1.1 x86-mingw32) glib2 (3.1.1 x86-mingw32) gobject-introspection (3.1.1 x86-mingw32) gtk2 (3.1.1 x86-mingw32) pango (3.1.1 x86-mingw32)
ただ、インストール時に注意点がある。glib2 3.1.1 その他をインストールしようとした際、何故か cairo 1.15.14 も一緒にインストールされてしまう。cairo 1.15.14 は Ruby 2.3.3 x86 上で動かないので、そのままだと require "gtk2" をした時に「cairo.so が読み込めない」と言ってきて動かない。gem uninstall cairo で 1.15.14 をアンインストールして、1.15.9 だけを残した状態にすれば動く。
ちなみに、Ruby 2.3.3 x86-mingw32 も、インストールした直後は gem が動かない。rubygems-update 最新版を入手してアップデートする必要がある。
_Download RubyGems | RubyGems.org
rubygems-3.3.19.zip を入手して解凍。中に入って、ruby setup.rb を実行すればアップデートされる。
◎ Ruby 1.8.7 の場合。 :
◎ 余談。 :
それにしても、昔は Ruby の各バージョンで動いてたのに、どうして動かなくなってしまったのか…。Windows10 x64 21H2 側に原因があるのだろうか。それとも自分の環境に起因している不具合なのだろうか。
どうも Windows上でGTK関係は鬼門だなと…。
どうも Windows上でGTK関係は鬼門だなと…。
[ ツッコむ ]
以上です。