ruby+html+javascriptでデスクトップアプリケーション開発

記事タイトルとURLをコピーする

こんにちわ、技術ブログ担当の川口です。

今回はちょっと変化球で勝負、ということでRuby+HTML+JavaScriptで デスクトップアプリケーションが簡単に作れる「bowline」ライブラリを 紹介してみたいと思います。

bowlineは「titanium(クロスプラットフォーム環境)」を元に作られた Ruby GUIフレームワークで特徴としては下記のような点が挙げられます。

  • gemパッケージ
  • MVCモデルフレームワーク
  • Webベース(WebKit)による画面設計

現状では動作するのはMaxOS XとUbuntuのようですがこれから先 マルチプラットフォーム対応も見込まれているそうなので将来的には windows上で動作するアプリケーションもコードの変更を行わずに 作成できる様になるかもしれません。

bowlineの公式ページ

公式でサポートしている開発環境は下記の通りです。

  • Mac OSX 10.5以上 or Ubuntu
  • Ruby 1.9
  • Bowline gemライブラリ

※今回はMac OSX 10.5.8 , ruby 1.9.1環境で検証しています。 ※webkitのアーキテクチャが32bitでなければ動作しません。 ※このライブラリは32bitモードでコンパイルされたrubyが必要です。  (Snow Leopardデフォルトのrubyでは正常に動作しない可能性が高いです)

bowlineインストール

bowline自体はgemコマンドで簡単にインストール可能です。 (rubyとgemのインストールは各自で行っているものとします)

$ sudo gem install bowline

テストアプリケーションの作成

インストールが完了したらお決まりの「hello world」アプリを作ってみましょう! 公式のInstallページに手順がありますのでそれに沿って作成していくことにします。

※今回は「/User/kawaguchi/bowline」の下に「helloworld」を作成して検証します。

$ cd /User/kawaguchi
$ mkdir bowline
$ cd bowline
$ bowline-gen app helloworld
Generating with app generator:
[ADDED]  vendor
[ADDED]  lib
(中略)
[ADDED]  config/boot.rb
[ADDED]  README

これで「/User/kawaguchi/bowline/helloworld」が作成され、ディレクトリ内には アプリケーションの雛形が作成されています。 しかしこれだけでは動作することはできません。 必要なライブラリを「helloworld」アプリへ組み込む必要があります。

$ cd helloworld
$ bowline-bundle
Calculating dependencies...
Updating source: http://rubygems.org
Updating source: http://gems.rubyforge.org
/opt/local/lib/ruby/gems/1.9.1/gems/bowline-bundler-0.0.4/lib/bowline/bundler/resolver.rb:115
Caching: activemodel-3.0.0.beta4.gem
(中略)
Installing bowline (0.9.3)
**************************************************

Thank you for installing Bowline.

If you're on Linux, please install the WebKit library:
sudo apt-get install libwebkit-dev

**************************************************
Done.

最後に注意として「もしLinux使ってるならWebkitライブラリもインストールしてね」 メッセージが出ますがMac OSX上では標準で組み込まれているので問題有りません。

これでアプリケーション起動用スクリプトを実行してすれば動作する筈ですが・・・・

$ ./script/run
You don't have tzinfo installed in your application. Please add it to your Gemfile and run bundle install
no such file to load -- tzinfo
・・・

どうやら'tzinfo'ライブラリが必要ですがインストールされていない模様。 gemコマンドで'tzinfo'ライブラリをインストールします。

$ sudo gem install tzinfo

これでバッチリ動・・・きません。 実はgemとしてインストールしてもbowlineアプリケーションが参照している gemライブラリディレクトリは[helloword/vendor/gems/1.9.1/gems/]以下であり、 [bowline-bundle]コマンドによってダウンロードしてきたものだけとなっています。

よってbundleコマンド実行時に'tzinfo'ライブラリもgemライブラリとして インストールするように設定ファイルに設定します。

$ vi Gemfile
# Edit this Gemfile to bundle your application's dependencies.
source 'http://rubygems.org'

gem "bowline"
gem "tzinfo"            <=================== これを追記
## Bundle the gems you use:
# gem "bj"
# gem "hpricot", "0.6"
# gem "sqlite3-ruby", :require_as => "sqlite3"

これで準備は完了です。もう一度bundleしなおして実行してみましょう。

$ bowline-bundle
$ ./script/run

これだけではメリットが分かりづらいかもしれません。 公式のインストールページの下部にgithubへのリンクがあり、サンプルコードとしてtwitterクライアントアプリケーションが公開されていますのでそれを実行してみましょう。

gitコマンドを利用してダウンロードします。 (gitコマンドやgithubに関する説明は割愛させていただきます)

$ cd /User/kawaguchi/bowline
$ git clone git://github.com/maccman/bowline-twitter ./twitter
$ cd twitter

「/User/kawaguchi/bowline/twitter」ディレクトリが作成され、 ファイルが展開されていることを確認してください。 このままでは動作しませんので2つ程設定を変更します。

(application.ymlファイル作成) デフォルトでは「config/application.exmple.yml」ファイルしかないのでリネームして 「config/application.yml」ファイルとして保存してください。

$ mv config/application.example.yml config/application.yml

(tiwtterアカウントを設定) 先程のapplication.ymlファイルにtiwtterアカウント情報を設定します。

$vi config/application.yml
username: (twitterアカウント)
password: (twitterパスワード)

設定が完了したら早速bundleして実行してみましょう。 こちらのGemfileにはちゃんと'tzinfo'が追記されているので編集しなくても良いです。

$ bowline-bundle
$ ./script/run</code></blockquote>

無事に起動したでしょうか? ちなみにこのクライアントアプリの仕様はこんな感じです。

  • 60秒毎に更新
  • 更新は最新データ20件ずつ
  • 既存データの下部に追記されていく
  • つぶやいた際にも更新

まだまだ情報が少ないので大変ですが、今後のマルチプラットフォーム化やバージョンアップに期待がかかるライブラリとして今回紹介させていただきました。