Rubeusのシンプルさに感動!

JRubyでswingをやっていて思うことは、どうしても記述がJavaっぽさが抜けず、少なからずモチベーションが下がることです。
せっかくRubyを使ってるのになんだか活かしきれていない歯がゆさを感じます。

で、調べてたらRubeusっていうライブラリがなんだかよさそうなので、メモしておきます。

https://github.com/akm/rubeus

Rubeusインストール

 % jruby -S gem install rubeus

はじめてのRubeus

手始めにJButtonとJLabelを使ったサンプルを書いてみました。
ボタンを押したらラベルに文字を表示させてみます。

require 'rubygems'
require 'rubeus'

Rubeus::Swing.irb

JFrame.new("Rubeus Sample") do |frame|
  frame.default_close_operation = JFrame::EXIT_ON_CLOSE
  frame.layout = GridLayout.new(2, 1)

  @label = JLabel.new
  JButton.new("Click Me") do |e|
    @label.text = "pushed button!!!"
  end

  frame.location_relative_to = nil
  frame.pack
  frame.visible = true
end

ポイントは、

  1. ブロックで階層構造的に書ける
  2. レイアウトは明示的にadd必要なし
  3. 長ったらしいaddActionListenerメソッドなくダイレクトにブロックが書ける

かなり思い切ったDSL仕様です。

まとめ

個人的には、この Rubeus かなりイケてると思っています。
JFrameとJButtonとJLabelを同じ層でベタ書きで書いていたあの気持ち悪さから開放されたのが嬉しいです。

ほかにどんな使い方ができるのか、今後調べてみたいと思います。