GUIツールキットShoesをUbuntuで動かしてみる

このエントリは「Ruby Advent Calendar jp: 2010」の20日目です。前日の記事はkwappa.856さんの「冗談で作ったrubygemsを「Pebbles」モジュールに押し込める」でした。明日はyuunyanさんの予定です。

はじめに

RubyGUIアプリケーションを書くのは比較的マイナーなのか情報が少なく、かつこれといった定番ライブラリが存在しないようです (特にクロスプラットフォームを志向した場合)。

比較的学習コストが小さく、かつクロスプラットフォームGUIツールキットとして、この辺 (MOONGIFT)で紹介されている「Shoes」が良さげだったので、手元のUbuntu Linux上で試してみました。導入が若干面倒ではありますが、非常にシンプルな記述でGUIアプリが書けそうではあります。
Ubuntuを前提に書いていますが、おそらくFedoraなど他のディストリビューションでも、前提パッケージの導入以外はほぼ同じ手順で行けると思います。

動作環境

以下の環境でShoesの動作を確認しました。

ShoesにはWindows, MacOS用には公式バイナリパッケージがありますが、Linux版はソースのみでの配布になっています。一応Ubuntu版バイナリパッケージも存在するようですが、バージョンが古いので、今回はRuby本体と合わせてソースからビルドしました。

GitHubリポジトリ上のShoes最新版ではRuby 1.9.1が指定されていますが、少し試した限りでは1.9.2で問題なく動きました。

Ruby本体のビルドにおける注意点

ShowsのビルドにはRubyの動的ライブラリ版 (libruby.so) が必要なので、configureオプションで --enabled-shared を指定する必要があります。

~/ruby-1.9.2-p0> ./configure --enable-shared
~/ruby-1.9.2-p0> make
~/ruby-1.9.2-p0> make test
~/ruby-1.9.2-p0> sudo make install

なお、configureの--prefixオプションで、Ruby本体をデフォルトの /usr/local/ 以外、例えば /usr/local/ruby192/ のようなディレクトリにインストールした場合、Shoesが正常にビルドできない場合があるようです。今回はデフォルトのディレクトリ以外のRubyと組み合わせる手段については追求しませんでした。

前提パッケージのインストール

インストール手順に指定されている前提パッケージを、とりあえず何も考えずに (ただし、Rubyをソースからビルドした都合上、Ruby関連のパッケージ以外) をインストールします。

~> sudo apt-get install git-core libcairo2-dev libpixman-1-dev libpango1.0-dev \
libungif4-dev libjpeg62-dev libgtk2.0-dev vlc libvlc-dev portaudio19-dev \
libsqlite3-dev libcurl4-openssl-dev makeself curl

Shoes本体のビルド&インストール

インストール手順に記載されている通りに、

~> git clone git://github.com/shoes/shoes.git 
~> cd shoes 
~/shoes> rake

無事ビルドが完了すると、shoes/dist/ の下にshoesというコマンドができます。これを起動すると以下のような起動画面が現れます。

このまま使い続けることもできますが、/usr/local/ などの下にインストールした方が使いやすいと思います。
Rakefileにはインストール用のターゲットはないようなので、ここでは安直に手作業でコピーします。

~/shoes> sudo cp -R dist /usr/local/shoes
~/shoes> cd /usr/local/bin
/usr/local/bin/> sudo ln -s ../shoes/shoes shoes

なお、rakeのビルドターゲットでinstallerを指定すると、Shoesの動作に必要なファイル群が1つの自己展開アーカイブとしてパッケージ化されるようです。

Hello, world

とりあえず最小限のShoesアプリケーションを試してみます。

hello.rb:

Shoes.app :width => 150, :height => 50 do
  para "Hello, world."
end

rubyコマンドではなく、先ほどインストールしたshoesコマンドを使うことに注意してください。

~/work/shoes/> shoes hello.rb

成功すると、以下のようなウィンドウが現れます。

次に、もう少し複雑な例を試してみます。テキストボックスに適当な文字列を入れて "Say Hello" のボタンを押すと、"Hello, <文字列>" という形で表示します。buttonメソッドに与えるブロックとして、ボタンが押されたというイベントに対する処理を記述することになります。

このサンプルは、About.comのShoes入門ページに載っていた例を改造したものです。

hello2.rb:

Shoes.app :width => 400, :height => 100 do
  flow do
    @e = edit_line
    button "Say Hello" do
      @p.clear { para "Hello, " + @e.text + "!" }
    end
  end

  @p = flow do
    para ""
  end

  flow do
    button("Quit") { quit }
  end
end

実行例

より本格的なアプリケーションに向けて

The Shoes Manualとしてマニュアルが提供されています。私自身まだちゃんと理解できていませんが、ひととおり必要な情報は提供されている印象です。