- Published on
RubyのJRubyを使ってGUIソフトウェア・アプリを作る
- Authors
- Name
- Shou Arisaka / 有坂翔
Ruby言語のJRubyライブラリを使ってグラフィカルユーザーインターフェースのWindows・Mac OSX・Linux対応のクロスプラットフォームおソフトウェア・アプリを作る方法について紹介します。
Windows 10環境でshoes(shoes4)を使ってクロスプラットフォームなRuby製GUIアプリケーションを作っていきたいと思います。
準備
- JavaとJDKをインストールします
JavaがないとJavaが動きません。 JDKというデベロッパー開発環境がないとJrubyが動きません。Javaの開発ができません。
- jrubyをインストールします
Downloads — JRuby.orgから、JRuby 9.2.0.0 Windows Executable (x64) をクリックしてダウンロード。
インストールして、パスを通して、Powershellなどを再起動してjrubyが入っているか確認。
jruby --version
- jruby -S gem install shoes --pre
Gemをインストール。
参考:shoes/shoes4: Shoes 4 : the next version of Shoes
とりあえず動かしてみた
app.rbShoes.app width: 300, height: 200 do
background lime..blue
stack do
para "Welcome to the world of Shoes!"
button "Click me" do alert "Nice click!" end
image "http://shoesrb.com/img/shoes-icon.png",
margin_top: 20, margin_left: 10
end
end
shoes app.rb
これでGUIウィンドウが開いているはず。
パッケージング
PS C:\pg\rubyGuiAppDev> shoes package --help
Usage: shoes-swt [options]
--jar Package as executable JAR file
--mac Package as OS X application
--windows Package as Windows application
--linux Package as Linux application
あれ、エラー…。
PS C:\pg\rubyGuiAppDev\_> shoes package --windows .\app.rb
Packaging windows...
rm -f pkg/tmp/app.jar
Creating pkg/tmp/app.jar
ArgumentError: same file: pkg/tmp/windows-app-template/app.bat and pkg/tmp/windows-app-template/app.bat
block in fu_each_src_dest at C:/jruby-9.2.0.0/lib/ruby/stdlib/fileutils.rb:1557
fu_each_src_dest0 at C:/jruby-9.2.0.0/lib/ruby/stdlib/fileutils.rb:1574
fu_each_src_dest at C:/jruby-9.2.0.0/lib/ruby/stdlib/fileutils.rb:1556
mv at C:/jruby-9.2.0.0/lib/ruby/stdlib/fileutils.rb:516
after_built at C:/jruby-9.2.0.0/lib/ruby/gems/shared/gems/furoshiki-0.6.1/lib/furoshiki/windows_app.rb:34
package at C:/jruby-9.2.0.0/lib/ruby/gems/shared/gems/furoshiki-0.6.1/lib/furoshiki/base_app.rb:41
block in run at C:/jruby-9.2.0.0/lib/ruby/gems/shared/gems/shoes-swt-4.0.0.rc1/lib/shoes/swt/packager.rb:52
each at org/jruby/RubyArray.java:1801
run at C:/jruby-9.2.0.0/lib/ruby/gems/shared/gems/shoes-swt-4.0.0.rc1/lib/shoes/swt/packager.rb:49
run at C:/jruby-9.2.0.0/lib/ruby/gems/shared/gems/shoes-core-4.0.0.rc1/lib/shoes/packager.rb:24
run at C:/jruby-9.2.0.0/lib/ruby/gems/shared/gems/shoes-core-4.0.0.rc1/lib/shoes/ui/cli/package_command.rb:14
run at C:/jruby-9.2.0.0/lib/ruby/gems/shared/gems/shoes-core-4.0.0.rc1/lib/shoes/ui/cli.rb:40
<main> at C:/jruby-9.2.0.0/lib/ruby/gems/shared/gems/shoes-swt-4.0.0.rc1/bin/shoes-swt:37
load at org/jruby/RubyKernel.java:994
名前が被っているファイルがあるって書いてあるので、名前を変えます。
app > firstapp
PS C:\pg\rubyGuiAppDev\_> shoes package --windows .\firstapp.rb
Packaging windows...
rm -f pkg/tmp/firstapp.jar
Creating pkg/tmp/firstapp.jar
できました。
出来たfirstapp-windows.zipを解凍して、中にある.jarファイルを実行するとGUIが開きます。
リファレンス
ここまで確認できたら、Rdocでも見てみましょうか。Top Level Namespace — Documentation for shoes/shoes4 (master)
デバッグ方法
ask_open_file
メソッドが気になったんだけど、これは開いたファイルの中身をオブジェクトに保存でもするのだろうか。どうやって取り出すんだ?と、JavaもJrubyも初めて触るので(Javaは少し触ってはいるのですが)、WindowsサイドのIO的な部分がわからなかったり。
こういう時pry
でデバッグ出来たらなぁ………
Development and Debugging Tools · shoes/shoes4 WikiThe development group in Shoe's Gemfile has pry and pry-nav installed, which should give a solid, basic debugging experience when necessary.
出来ました。 ask_open_fileは選択したファイルの絶対パスを返してくれるようです。
やり方:
- インストール:
jruby -S gem install pry
- デバッグ起動したいところに追記
require "pry"
binding.pry
Gemfileにpry入ってるからすぐ使えますよ、って言う割にはインストールしないと使えない。よくわからない。まぁインストールできるのでおk。
終了するときはquit
、ヘルプはhelp
で見れます。 俺が知ってるpryはcontinue
なんだけど、pryとpry-byebugって違うのだろうか。よくわからない。
ちなみにpry-byebug
はインストールもrequireもできない。jruby -S gem install pry-byebug
するとmake
のエラーERROR: Failed to build gem native extension.
が出ます。使うなってことなのでしょう。
pryの安心感。
GUIからデバッグを起動する
ボタンを押したらpryが起動するようにします。button do |b|
b.text = 'pry'
if b.enabled?
binding.pry
end
end
ボタンを押すとテキストボッスの値をRubyに送信する
テキストを入力するごとにedit_boxメソッドが実行され、@edit_box_textが書き換わります。 sendボタンを押すと、@edit_box_textをputsします。edit_box do |e|
@edit_box_text = e.text
end
button "send" do |b|
puts @edit_box_text
end
他にも、inputBoxのようなクラスを呼び出すメソッドがあります。
参考:
shoes4/element.rb at d16159b94ae8190059e1d596332da1ad9346b0a7 · shoes/shoes4