logo
Published on

RubyのJRubyを使ってGUIソフトウェア・アプリを作る

Authors

Ruby言語のJRubyライブラリを使ってグラフィカルユーザーインターフェースのWindows・Mac OSX・Linux対応のクロスプラットフォームおソフトウェア・アプリを作る方法について紹介します。

Windows 10環境でshoes(shoes4)を使ってクロスプラットフォームなRuby製GUIアプリケーションを作っていきたいと思います。

準備

  1. JavaとJDKをインストールします

JavaがないとJavaが動きません。 JDKというデベロッパー開発環境がないとJrubyが動きません。Javaの開発ができません。

  1. jrubyをインストールします
GettingStarted · jruby/jruby Wiki

Downloads — JRuby.orgから、JRuby 9.2.0.0 Windows Executable (x64) をクリックしてダウンロード。

インストールして、パスを通して、Powershellなどを再起動してjrubyが入っているか確認。

jruby --version
  1. jruby -S gem install shoes --pre

Gemをインストール。

参考:shoes/shoes4: Shoes 4 : the next version of Shoes

とりあえず動かしてみた

app.rb

Shoes.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でデバッグ出来たらなぁ………

The development group in Shoe's Gemfile has pry and pry-nav installed, which should give a solid, basic debugging experience when necessary.

Development and Debugging Tools · shoes/shoes4 Wiki ShareX_ScreenShot_938e9034-0cb6-48b3-a7d6-8959e5f4598e.png (878×427)

出来ました。 ask_open_fileは選択したファイルの絶対パスを返してくれるようです。

やり方:

  1. インストール:jruby -S gem install pry
  2. デバッグ起動したいところに追記
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