mieki256's diary



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 2.2.6 x86 の場合。 :

Windows10 x64 21H2 + Ruby 2.2.6 p396 x86-mingw32 では、以下の組み合わせで動作した。

  • 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 の時点では、以下の組み合わせでも動いていたらしいのだけど…。

  • 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 の場合。 :

昨日メモしたのでそちらを参考に。

_2022/07/31 何が何でもruby-gtk2を動かす。

余談。 :

それにしても、昔は Ruby の各バージョンで動いてたのに、どうして動かなくなってしまったのか…。Windows10 x64 21H2 側に原因があるのだろうか。それとも自分の環境に起因している不具合なのだろうか。

どうも Windows上でGTK関係は鬼門だなと…。

#2 [ruby] ruby-gtk2は殺されていた

関連情報をググっていて今頃知ったのだけど、gtk2 (ruby-gtk2) は 3.4.3 が最終版で、3.4.4 以降は存在していない模様。

_mikutter GTK3対応(4) ?そして 5.0リリースへ? - tsutsuiの作業記録置き場
_News (2021-04-22 No.1) - Ruby-GNOME2 Project Website (WebArchive)
_ruby-gnome/NEWS at master - ruby-gnome/ruby-gnome

Ruby-GNOME (かつては ruby-gtk2 と ruby-gtk3 の両方を含んでいた) は、3.4.4 で色々なサポートを打ち切っていたらしい。
Windows版 Ruby 2.6.10 (x86-mingw32) 上で gtk2 をインストールしようとしてもエラーになるのはそのせいだった。
つまり、Windows版 Ruby 2.6.x でビルドが通る gtk2 のソースはそもそも存在してなかった、というオチだった。道理で、何度インストールを試みてもビルドエラーになってしまうわけで…。

ruby-gtk3は生きている。 :

ちなみに、Ruby 2.6.10 x86-mingw32、及び、Ruby 3.0.4 x86-mingw32 上で gtk3 をインストールしたら(gem install gtk3)、cairo 1.17.1 + gtk3 3.5.1 のビルドが通って gtk3 を使うことができた。

ruby-gtk2 は削除されてしまったけれど、ruby-gtk3 は今もメンテナンスされているし、一般的なGUIアプリを作りたいなら ruby-gtk3 を使えば済むはず、という状況ではあるらしい。

将来的な不安。 :

しかし、困った…。Windows上ではともかく、Debian Linux上では、まだ ruby-gtk2パッケージが用意されているから、ruby-gtk2 を使ったアプリも作れるだろうし、xscreensaver用のスクリーンセーバを Ruby + ruby-gtk2 で書くことだってできるのかもしれないけれど。公式には ruby-gtk2 が殺されてしまったわけだから、将来的には Debian Linux 上でも ruby-gtk2パッケージが消滅してしまいそうな気がする。そうなると、xscreensaver用スクリーンセーバを Ruby で書くこともできなくなるわけで…。ノリとしては、今から Flash を使ってスクリーンセーバを書くぞ、みたいなソレに結構近い可能性もありそうだなと。

ruby-gtk2 ではなく、ruby-gtk3 を使って xscreenaver用のスクリーンセーバを書くことができればいいのだろうけど、そのあたりは gtk3 に詳しい人じゃないとできないことだよな…。しかし、gtk3 でそんなことができるのかどうか…。

この記事へのツッコミ

Re: ruby-gtk2は殺されていた by gtk3に移行したくない人    2022/10/11 20:09
こんにちは!
Ruby 2.6.10 x86-mingw32 + cairo 1.17.x x86-mingw32 + gtk2 3.4.3 x86-mingw32 + popplerで動かしています!
いつの間にかmsysのgccが上がってそのままではRuby/Gtk2 gemでインストール時にビルドに失敗しますね。
上記の環境では、gcc 7.xだとRuby/Gtk2(3.4.3)すんなり入りました!

以上、1 日分です。

過去ログ表示

Prev - 2022/08 - 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