mieki256's diary



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

#1 [dxruby] Ruby 3.2.2 x86 上で DXRuby を動かせるか試してみた

Windows10 x64 22H2上で、Ruby 3.2.2 x86 (RubyInstaller2, DevKit付き)をインストールしたけれど。その後、gem を使ってインストールした2Dゲーム制作ライブラリ DXRuby が動かなかった。

> ruby --version
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [i386-mingw32]

> gem install dxruby
Fetching dxruby-1.4.7.gem
Successfully installed dxruby-1.4.7
Parsing documentation for dxruby-1.4.7
Installing ri documentation for dxruby-1.4.7
Done installing documentation for dxruby after 0 seconds
1 gem installed

今現在、gem でインストールできる DXRuby 1.4.7 は Ruby 2.5 - 3.0 x86 までの対応なので ―― Ruby 2.5 - 3.0 x86 の dxuby.so は同梱されているけれど、Ruby 3.2.2 x86 用の dxruby.so は同梱されていないから動かないのは当たり前なのだけど、手元の環境で Ruby 3.2.2 x86 用の DXRuby をビルドしたら動くのだろうかと気になったので、ビルドできるか試してみることにした。

ビルド手順 :

ビルド方法は、公式配布サイトの README.md で説明されてる。

_GitHub - mirichi/dxruby: gem作成用。ソースもここで管理しております。

説明に従って作業してみた。

まず、コンパイラ込み(DevKit付き)の RubyInstaller2 をインストール。これはもうインストール済み。

作業用に、任意のディレクトリを作成して、その中に入る。今回は、D:\Ruby\builds\dxruby\ というディレクトリを作って、その中に入れることにした。
mkdir D:\Ruby\builds\dxruby
cd /d D:\Ruby\builds\dxruby

git がインストール済みで使える環境なら、git clone で dxruby のリポジトリを入手。
git clone https://github.com/mirichi/dxruby.git

もしくは、github から dxruby のリポジトリを zip でダウンロードして解凍してもいい。右上の「Code」というボタンをクリックすれば、「Download ZIP」というリンクがあるので、それをクリックすれば dxruby-master.zip が入手できる。

ソース、というか extconf.rb があるディレクトリに移動する。ext\dxruby\ が対象のディレクトリ。
cd dxruby\ext\dxruby

コンパイラを使える状態にする。以下を入力。大量に色々表示されるけどキニシナイ。
ridk enable

Makefile を自動で生成する。Makefile は、ビルド処理手順が書かれているファイルのこと。
ruby extconf.rb
> ruby extconf.rb
checking for -ldxguid... yes
checking for -ld3d9... yes
checking for -ld3dx9_40... yes
checking for -ldinput8... yes
checking for -ldsound... yes
checking for -lgdi32... yes
checking for -lole32... yes
checking for -luser32... yes
checking for -lkernel32... yes
checking for -lcomdlg32... yes
checking for -lwinmm... yes
checking for -luuid... yes
checking for -limm32... yes
checking for d3dx9.h... yes
checking for dinput.h... yes
checking for rb_enc_str_new()... yes
creating Makefile

「creating Makefile (Makefile を作ったよ)」と言っているので、make と打ってビルドする。
make
色々な警告が表示されるけど、あくまで警告で、エラーではないのでキニシナイ。

ビルドが成功すれば、カレントディレクトリ直下に dxruby.so が生成される。
> dir *.so /b
dxruby.so

Ruby 3.2.2 x86 に DXRuby (dxruby.so) をインストールする。(しかるべき場所にコピーする)
make install
> make install
/usr/bin/install -c -m 0755 dxruby.so /D/Ruby/Ruby32-x86/lib/ruby/site_ruby/3.2.0/i386-msvcrt

dxruby.so が、(Ruby 3.2.2 x86インストールフォルダ)\lib\ruby\site_ruby\3.2.0\i386-msvcrt\ 以下にコピーされた。
> dir D:\Ruby\Ruby32-x86\lib\ruby\site_ruby\3.2.0\i386-msvcrt\*.so /b
dxruby.so

この状態で、手元にある DXRuby のサンプルを動かしてみたところ、大半のサンプルは動いてくれた。

ということで、Windows10 x64 22H2 + Ruby 3.2.2 x86 (RubyInstaller2, DevKitつき) 上でも、自分でビルドすれば DXRuby が動きそうだと分かった。

注意点 :

Windows10 は DirectX 9.0 が標準で入ってないので、そのままでは DXRuby も動かないそうで。別途 d3dx9_40.dll を入手して、しかるべき場所にコピーしないといかんらしい。そのあたりの手順は以下で解説されているので参考に。

_Windows10では、DXRubyを動かすのに d3dx9_40.dllが必要 - Issue #3 - mirichi/dxruby - GitHub

あるいは、以下から入手できそう。

_DXRubyの実行環境構築 - EastBack Archives
_Ruby実行環境のダウンロード - EastBack Archives

#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 は使われ続けてたりするし。

ポエムです。

#3 [ruby] gemの表示が妙なことになってしまった

Windows10 x64 22H2 + Ruby 2.3.3 p222 i386-mingw32 (RubyInstaller) で動作確認していたら、gem の表示がおかしいことに気づいた。

gem -v でバージョンを確認できるらしいのだけど…。
> gem -v
D:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems.rb:11: warning: already initialized constant Gem::VERSION
C:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems.rb:11: warning: previous definition of VERSION was here
D:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems.rb:115: warning: already initialized constant Gem::RUBYGEMS_DIR
C:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems.rb:115: warning: previous definition of RUBYGEMS_DIR was here
D:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems.rb:120: warning: already initialized constant Gem::UNTAINT
C:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems.rb:120: warning: previous definition of UNTAINT was here
D:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems.rb:123: warning: already initialized constant Gem::KERNEL_WARN_IGNORES_INTERNAL_ENTRIES
C:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems.rb:123: warning: previous definition of KERNEL_WARN_IGNORES_INTERNAL_ENTRIES was here
D:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems.rb:129: warning: already initialized constant Gem::WIN_PATTERNS
C:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems.rb:129: warning: previous definition of WIN_PATTERNS was here
D:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems.rb:138: warning: already initialized constant Gem::GEM_DEP_FILES
C:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems.rb:138: warning: previous definition of GEM_DEP_FILES was here
D:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems.rb:148: warning: already initialized constant Gem::REPOSITORY_SUBDIRECTORIES C:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems.rb:148: warning: previous definition of REPOSITORY_SUBDIRECTORIES was here
D:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems.rb:161: warning: already initialized constant Gem::REPOSITORY_DEFAULT_GEM_SUBDIRECTORIES
C:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems.rb:161: warning: previous definition of REPOSITORY_DEFAULT_GEM_SUBDIRECTORIES was here
D:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems.rb:171: warning: already initialized constant Gem::LOADED_SPECS_MUTEX
C:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems.rb:171: warning: previous definition of LOADED_SPECS_MUTEX was here
D:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems.rb:1294: warning: already initialized constant Gem::MARSHAL_SPEC_DIR
C:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems.rb:1294: warning: previous definition of MARSHAL_SPEC_DIR was here
3.3.26

Ruby 2.3.3 + gem 3.3.26 だとこんなことになってしまう…。ちなみに、gem 3.3.19 もこんな感じ。

アレ? C: と D: が混在してる。なんだコレ。元々Cドライブに入っていたものをDドライブに移動して、Cドライブにはシンボリックリンクを置いたのだけど、そのせいだろうか…。

それはともかく、gem (rubygems) を更新するには、2つ方法があるようで。
zip の入手先は以下。現行版のzipのURLから類推してみた。

_RubyGemsをダウンロード | RubyGems.org | コミュニティのgemホスティングサービス

_https://rubygems.org/rubygems/rubygems-3.2.25.zip
_https://rubygems.org/rubygems/rubygems-3.2.26.zip
_https://rubygems.org/rubygems/rubygems-3.2.27.zip
_https://rubygems.org/rubygems/rubygems-3.2.28.zip
_https://rubygems.org/rubygems/rubygems-3.2.29.zip
_https://rubygems.org/rubygems/rubygems-3.2.30.zip
_https://rubygems.org/rubygems/rubygems-3.2.33.zip
_https://rubygems.org/rubygems/rubygems-3.2.34.zip
_https://rubygems.org/rubygems/rubygems-3.3.19.zip
_https://rubygems.org/rubygems/rubygems-3.3.26.zip

また、以下の記事によると、3.1.x は問題があるらしいので、3.2.0以降にしておかないといけない模様。

_業務の中で出会った default gem のアップグレードによる CVE 対応と rubygems 3.2.0 未満の不具合の話 - STORES Product Blog

とりあえず色々なバージョンを試してみたけど、gem 3.2.26 が一番メッセージ表示が少なくて済むようだなと…。
> gem -v
D:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems/user_interaction.rb:546: warning: already initialized constant Gem::StreamUI::ThreadedDownloadReporter::MUTEX
C:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems/user_interaction.rb:546: warning: previous definition of MUTEX was here
3.2.26

シンボリックリンクがマズいっぽい :

Rubyのバージョンを切り替えられるツール、pik で、C:\Ruby\Ruby23-x86\bin を登録していたけど、実際にRuby関連ファイル群が入っている D:\Ruby\Ruby23-x86\bin を登録し直してみた。これなら変なメッセージが出てこないな…。

とりあえず、pik や uru の設定ファイルを書き換えて、C:/ や C:\\ を D:/ や D:\\ にしておこう…。

pik や uru の設定ファイルの場所は以下。
C:\Users\(USERNAME)\.pik\config.yml
C:\Users\(USERNAME)\.uru\rubies.json

以上、1 日分です。

過去ログ表示

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