[QtRuby] QtRubyで作ったをスクリプトのEXE化に挑戦してみた2

前回の“カレントディレクトリをQtRubyにしてしまう方法”はあまりにもアレすぎたので、英語苦手だけど仕方なく本家を見てみた。

OCRA executables clear the RUBYLIB environment variable before your script is launched.

前回、$LOAD_PATHなんか調べちゃったけど、わざわざそんなことしなくてもクリアされるってきっちり書いてくれてた罠。

さらに、

OCRA executables set the RUBYOPT environment variable to the value it had when you invoked OCRA. For example, if you had “RUBYOPT=rubygems” on your build PC, OCRA ensures that it is also set on PC’s running the executables.

ってことで、なんかよくわからないけど、環境変数RUBYOPTにrubygemsを設定しろってさ。書いてるやーん。

1. 念のために試す

環境変数RUBYOPTを設定したくなかったので、require文を書くことで対応した。

helloworldGUI2.rb
require 'rubygems'  # この行を追加
require 'qt4'
exit if defined?(Ocra)

app = Qt::Application.new(ARGV)
w = Qt::Label.new("Hello World.")
w.show
app.exec

で、変換。

$ ocra helloworldGUI2.rb

えぇえぇ。上手くいきましたさ・・・

2. 最後に・・・

実際に使う場合は、オプションを設定した方が良い感じになる。

$ ocra helloworldGUI2.rb --windows

"--add-all-core"や"--no-autoload"はつけるべきかよくわかってないので、この辺りは環境に合わせて試行錯誤でいいんじゃないかな。



はあ、長かった・・・
英語出来ないのつらい・・・


[QtRuby] QtRubyで作ったをスクリプトのEXE化に挑戦してみた

Rubyで作ったスクリプトを実行ファイルにする場合、今まではExerbというツールを使ってexe化していた。ただ、Exerbには欠点があって、

  • 実行ファイルなのに、コードが容易に見られてしまう(ハズカシイ(/ω\))
  • 外部ライブラリを使うと(設定がまずいだけな気がするが)上手くexe化出来ない。

案の定、QtRubyで作ったスクリプトをExerbで変換すると、上手くexe化出来なかったので、別のツールを試してみることにした。

1. Ocraのインストール

Ocraというツールで実行ファイルを作れるらしいので試してみた。

インストールはいつものようにgemで行う。

$ gem install ocra

使い方も簡単で、こんな感じにスクリプトファイルを指定するだけ。

$ ocra helloworld.rb

"Hello World."を標準出力に出力する程度でも、実行ファイルの容量は450KB程度になるが、そこは致し方なし。

2. まずは普通にやってみる

Ocraのインストールが終わったので本題。
やりたいのはQtRubyで作ったスクリプトのexe化ってことで、サンプルは次のスクリプト。

helloworldGUI.rb
require 'qt4'
exit if defined?(Ocra)

app = Qt::Application.new(ARGV)
w = Qt::Label.new("Hello World.")
w.show
app.exec

Ocraはexe化の際、使用しているライブラリ等を判別するため、一度スクリプトを実行させているらしい。
変換前にスクリプトを実行するので、GUIがあると変換の際ウィンドウを閉じる必要がある。

2行目は、このメンドクサイ作業をやらなくてすむようにしている。

これを先と同様にOcraで実行ファイルと作って実行すると次のようなエラーが出る。

$ ocra helloworldGUI.rb
$ helloworldGUI.exe
xxxxx/src/helloworldGUI.rb:1:in `require': no such file to load -- qt4 (LoadError)

つまり、QtRubyが見えていないっぽい・・・
QtRubyにパスが通ってないとかそんな初歩ミスはやらかしていない。

3. $LOAD_PATHを確認する

ってことで、$LOAD_PATHを確認してみる。
特に上手い方法も知らないので、普通にやる。

confirm_LoadPath.rb
exit if defined?(Ocra)
puts $LOAD_PATH

まずはこれを普通に実行して、念のため、QtRubyへのパスが通っていることを確認する。

$ ruby confirm_LoadPath.rb
[Rubyフォルダ]/lib/ruby/gems/1.8/gems/qtruby4-2.1.0-x86-win32/lib
:

って感じで、QtRubyへのパスが通っていることが確認できる。

次のこれをOcraでexe化して、作成された実行ファイルを実行してみる。

$ ocra confirm_LoadPath.rb
$ confirm_LoadPath.exe
[TMPフォルダ]/lib/ruby/site_ruby/1.8
[TMPフォルダ]/lib/ruby/site_ruby/1.8/i386-msvcrt
[TMPフォルダ]/lib/ruby/site_ruby
[TMPフォルダ]/lib/ruby/vendor_ruby/1.8
[TMPフォルダ]/lib/ruby/vendor_ruby/1.8/i386-msvcrt
[TMPフォルダ]/lib/ruby/vendor_ruby
[TMPフォルダ]/lib/ruby/1.8
[TMPフォルダ]/lib/ruby/1.8/i386-mswin32

こんな感じで表示される。
パスがTMPフォルダ内に変わっているのはOcraの仕様として、QtRubyへのパスが含まれていないのがわかる。

$LOAD_PATHにQtRubyが含まれていないので、require 'qt4'でLoadErrorになるという塩梅・・・

4. さて、どうしよう・・・

無い知恵絞ってみたけど、Rubyに精通しているわけでもないので、泥臭い方法しか思いつかなかった・・・

つまり、requireされる'qt4'をカレントにしてしまえばいいんだよってことで、
"[Rubyフォルダ]/lib/ruby/gems/1.8/gems/qtruby4-2.1.0-x86-win32/lib"フォルダにhelloworldGUI.rbを移動し、ここで、

$ ocra helloworldGUI.rb

を実行。

当然、exe化は成功しましたとさ・・・

5. おわり

実行ファイルは作れたけど・・・なんか違う・・・
もっとスマートなやり方があれば・・・

ちなみに実行ファイルのサイズは20MBと悲惨なことになるけど、これはどうしようもない・・・


[QTestLib] QTestLib用テストランナーをつくったったー2

前回、Qtでの作成を投げ出したC#で作ってしまったので、気を取り直してググりながらQtで作り直した。

f:id:izumisannoid:20130213231403j:plain

C++という言語仕様上のメンドクサさ & Qt Creatorのデバッガが上手く動かないこともあって、うごかねーうごかねーおちるー言いながらも、今回は途中で投げ出さなかった自分を誉めてつかわせたい。

さてさて、いろいろガチャガチャと機能追加してみて、Qtに慣れていきますかね。

QTestLib用テストランナーを作ったったー

Qt勉強しようかな(数か月前からずっと言ってる)
 + QTestLib用のテストランナーがほしい
  = じゃあ自作するか(勉強にもなるし)。

ってことで、Qtで作り始めた。

ツールのイメージは既に出来上がってた。

まずは最低限の機能のみを備えたプロトタイプから作ろうとした。

プロトタイプ仕様もイメージは固めた。

  • QTestLib用テストファイルをロードする。
  • テストファイルからテストメソッド一覧を取得する。
  • 取得したテストメソッド一覧をツリー形式で表示する。
  • テストを実行する。
  • テスト結果を表示する。

うん。思ったより簡単そうだ。



Qt全く使ってないので一つ一つ調べる必要があったけど、なんとかなるだろうと思っていた。

1~2時間経過後に出来上がったのがコレ。

f:id:izumisannoid:20130204212721j:plain

外見だけで、中身は未実装。

よく考えたらQtのデザイナほとんど使ったことなかったから、自分の思うような作りが出来ない。

ウィンドウサイズ変えても中身が伸び縮みしてくれない。

デザイナ使わずに全部コード書いてやろうかとも思ったけど、もうフラストレーション溜まりまくってので、ぷっちーんきて、C#でつくった。

f:id:izumisannoid:20130204212927j:plain


すんなり完成した。

一応普通に動きます。少なくとも自分のPCでは動きます(笑)

テストファイルをLoadする前にRunボタン押すと余裕で落ちます。

落ちるの知ってるから、Loadする前にRunボタンは押しません。

いわゆる「運用で対処」ってやつですwww


さてさて、出来ちゃったのでモチベ下がり気味だけど、考えてた機能とか保留しまくってるので、とりあえずこれをQtで作り直してみますか。

2012年にやったゲームでもまとめてみようじゃなイカ

ここ数年、年に1~2本くらいしかゲームやってなかったけど、今年は自分なりに結構やった気がするのでまとめてみる。

[PSP] 初音ミク Project DIVA 2nd お買い得版

f:id:izumisannoid:20121230163745j:plain

2011年の年末、友人が持ってたのでやってみたらみごとにハマった。
帰省から戻ってすぐにアマゾンで注文したのを覚えてる。
リズムゲームとか全くやったことなかったけど、すごく面白く今でもたまにやってる。

extendを買おうかどうか迷ってる今日この頃。

[3DS] マリオカート

マリオカート7

発売日に買ったけど、オンラインは全くやらず、150cc制覇してそのまま放置。
1月末くらいに再開しオンラインに参戦。すごいはまった。うん。下手だけど自分なりにがんばってレート上げてたよ。
すれ違いで自分より高レートの人とすれちがったことがないくらいにはレート上がった。VRは4万台だった気がする。

基本タイムアタックやらない、下画面見ない、トゲ回避率5割以下、軽量派でメリオBダレが使えない派だったので実力的にはレート2万台くらい。

残念ながらボッチなんでフレンド合流とかほとんどやらず、ずーっと世界戦ばかりやってた。
世界戦だと高レート部屋に当たることもほとんどなく、妨害厨も多すぎてイヤになって現在休止中。

お気に入りのMiiが5体くらいいたけど、このゲームやってるとたまに自分と似たようなMiiに出くわすことがあり、そのたびにそのMiiを封印していったら使うMiiが無くなった罠。

クリエイター的才能がないので、お気に入りのMiiが全く作れていない状況。

妨害厨が少なくなった頃にまた適当に再開しようと思案中。

[3DS] マリオテニスオープン

MARIO TENNIS OPEN (マリオテニスオープン)

基本的にスポーツゲームは買わないんだけど、よく考えず勢いだけで買ってしまった一品。
オンライン対戦は全くやらなかったけど、ひとりでそれなりに遊んだ。

[3DS] カルドセプト

カルドセプト

友人が買うと言ってたので、じゃあってことで買ってみた。
カルドセプトはDS版からのプレイ2作目。カードの種類とか全く覚えていないライトプレイヤー。
友人とオンライン対戦しようとしたけど、エラーで出来ず。
オンライン対戦の実況動画を見てみると、明らかにレベルが違いすぎてカモられるのが目に見えてたので、オンライン対戦には参加しなかった。
ストーリーはサブシナリオもほとんど進めて、カードも全種類集めるくらいはやった。

ただ、協力戦とかいうボッチ差別のローカル通信用のシナリオは進められず・・・

[3DS] Newスーパーマリオブラザーズ2

New スーパーマリオブラザーズ 2

現時点で買っただけでほとんどやってない。
発売当初、カルドセプトマリオカートもやってたから、そっちばかりやってしまったという感じでそのまま放置気味。
まあ、そのうちやると思うよ。

[PSVita] 初音ミク Project DIVA-f

初音ミク -Project DIVA- f

これをやるためにPSVitaを購入した。
DIVAはゲームとしてはほぼ完成されてる気がするので、新作が出ても安心できる。
出来ない人のただの言い訳だけど、正直、☆スクラッチはいらなかったと思う・・・あれ判定甘いし、たまに反応しない時あるし・・・

Hardは半分くらいパーフェクトとった。
Extreamは未クリア曲が数曲残っている程度の実力。

十字キーを使った連打が出来ないので右手連射速度に限界がある残念DIVA-er。

[3DS] ブレイブリーデフォルト

ブレイブリーデフォルト

FF5のようでどこかが違う、古き良き昔ながらの正統派RPG。
シナリオもよく、まさにこういうRPGを待っていた!!!

と言いながら、実はクリアしていない。

ダメカンストが早く、雑魚・ボスが弱すぎな気がしないでもない・・・

イデアかわいいよイデア

[PSVita] トトリのアトリエ Plus ~アーランドの錬金術士2~

トトリのアトリエ Plus ~アーランドの錬金術士2~ (通常版)

新規開拓ってことで、やったことがないシリーズ物のRPGに手を出してみようと思いたち、

からアトリエシリーズを選んでみた。
選定理由は、ちょうどこれの発売日が数日後に控えてたから。

RPGをやりたかったけど、やってみたら全然RPGっぽくなかったという罠。あまり出来てないけど、気が向いた時にちょこちょこプレイ中。

トトリかわいいよトトリ

[PSP] みんなのGOLF ポータブル2 [PSP the Best]

みんなのGOLF ポータブル2 PSP the Best

「そういやみんゴル好きだったな~」

と、ふと昔を思い出したので11月末に購入。
相変わらず4m以上のパットは入る気がせず、2mパットはずすのもシリーズ通して変わらず・・・

現在進行形でプレイ中。

やっぱり、私はみんゴルが好きだと実感した。

おわり

どうぶつの森が人気あったけど、何が面白いのか全く想像出来ずに興味がわいてきて買おうとしたら品切れで買えない始末。

そんなこんなしてると、ファンタジーライフなるものが出ると聞いて、「これでいいや」と思ったけれど、少し調べてみるとオンライン対応してなくてローカル通信のみのボッチ非推奨ゲームだったので買わないことを決めた。

でもよく考えると、オンライン対応しててもオンライン機能使ってなかったりするので、そんなのどうでもいい気がしてきたりしなかったり・・・

とりあえず、今気になってるのはこんなところか。

来年はモンハンデビューかな。