2014-08-30

JRubyCompleteを使ったデスクトップアプリケーションの作成

Categories: JRuby Rake
jruby-complete.png

[ PR ]


久しぶりのブログです。長く間が空いてしまってすみません。

さて、今回はJRubyでデスクトップアプリケーションを作る方法を取り上げます。

JRubyで作るデスクトップアプリケーション

あなたは、「Rubyでデスクトップアプリケーションを作る」ことを考えると、どうやって作りますか?

方法はいくつかありますが、配布などを考えると、一番に思いつくのはJRubyを使う方法じゃないでしょうか。

例えばJarファイルで配布できれば、単体でも実行できる上に、Windowsならexeファイル、Macならappファイルに変換することも簡単です。

そこで、今回はjruby-complete.jarというJarファイルを使って、実行可能Jarファイルとしてアプリケーションを作成する方法を紹介します。

jruby-complete.jar

今回は、jruby-complete.jarというJRuby本体 + 標準ライブラリが丸々一つのファイルになっているJarファイルを使います。http://www.jruby.org/download からダウンロードできます。

jruby-completeは、JRubyそのものなので、

java -jar jruby-complete.jar -e "puts 'hello, jruby!'"

# hello, jruby!

といった使い方ができます。これだけでも十分便利ですね。

エントリポイントを作成

jruby-completeは、jarコマンドを使って以下のようにエントリポイントを作れば、実行可能Jarファイルとして使えるようになります。

## jruby-completeをコピー
cp jruby-complete.jar myapp.jar

## jar-bootstrap.rbというファイルを作成
echo "puts 'hello, jruby!'" > jar-bootstrap.rb

## エントリポイントを書き込み
jar ufe myapp.jar org.jruby.JarBootstrapMain jar-bootstrap.rb

## 実行してみる
java -jar myapp.jar

# hello, jruby!

この方法を使ってスタンドアローンアプリを作ります。

ソースコードの書き込み

今度は、複数のファイルを書き込みしてみましょう。以下の2つのファイルを準備します。

# jar-bootstrap.rb

require "./hello.rb"

hello()
# hello.rb

def hello()
  puts "hello!"
end

上記2つのファイルを、以下のようにして書き込みます。

cp jruby-complete.jar myapp.jar
jar uf myapp.jar hello.rb
jar ufe myapp.jar org.jruby.JarBootstrapMain jar-bootstrap.rb

実行してみましょう。

java -jar myapp.jar

# hello!

実行は出来ました。ただ、一つ一つ書き込むのは面倒ですね。

例えば、ソースがsrcというフォルダに全て入っているとすれば、

jar uf myapp.jar -C src .

これでsrc内の全てのファイル(フォルダ含む)が書き込まれます。これなら楽ですね。

RubyGemsの扱い

実は、RubyGemsもソースコードと同じ方法で書き込めます。

まずgemをまとめるフォルダを「gems」とします。そこにgemをインストールするには以下のようにします(例ではnokogiriをインストール)。

mkdir gems # 初回のみ

java -jar jruby-complete.jar -S jgem install nokogiri -i gems (※)

(※)

(※)のコマンドはjrubyのissues#1218で議論されているように上手く動作しない場合があるので、その場合は別にJRubyをインストールして、

jgem install nokogiri -i gems

でOKです。

すると、gemsフォルダにgemが入っているので、

jar uf myapp.jar -C gem .

とするとgemsが使えるようになります。

まとめ:Rakefileを作る

さて、以上の方法でスタンドアローンアプリが作れます。

実際には、開発ではjruby-completeを単にJRubyとして使って、デプロイでJarファイルを作るのが便利です。

そのようなタスクをRakefileにまとめてみました。

JRUBY_COMPLETE = "/path/to/jruby-complete-1.7.14.jar"
JRUBY = "java -Xmx500m -Xss1024k -jar #{JRUBY_COMPLETE}"

APP_NAME = "myapp"
SOURCES = FileList.new("src/**/*.rb")
ENTRY_FILE = "jar-bootstrap.rb"

COLOR = "\033[33m"
RESET = "\033[39m"

def log(s)
    puts COLOR + "--- " + s + RESET
end

task :default => [:run]

task :run do
    sh "export GEM_PATH=gem; #{JRUBY} -Csrc #{ENTRY_FILE}"
end

task :deploy do 
    log "clean"
    sh "rm -rf dist/*"

    log "duplicate jar"
    sh "cp #{JRUBY_COMPLETE} dist/#{APP_NAME}.jar"

    log "write gems"
    sh "jar uf dist/#{APP_NAME}.jar -C gem ."

    log "write sources"
    sh "jar uf dist/#{APP_NAME}.jar -C src ."

    log "set entry point"
    sh "jar ufe dist/#{APP_NAME}.jar org.jruby.JarBootstrapMain src/jar-bootstrap.rb"

    log "clean up"
    sh "rm -rf dist/*.tmp"
end

task :init do
    mkdir src gem dist
end

task :clean do
    sh "rm -rf dist/*"
end

rake initとすると、src、gem、distの3つのフォルダが作られます。

ソースコードはsrcフォルダにまとめ、gemはjgem install xxx -i gemsとしてgemフォルダにまとめます。

実行はrake run、デプロイはrake deployです。Jarはdistフォルダに作られます。

このRakefileに今まで説明したものがまとめてあるので、是非使ってみてください。

JRuby 徹底入門
JRuby 徹底入門
posted with amazlet at 14.09.14
株式会社イーシー・ワン
ソーテック社
売り上げランキング: 125,438

コメントはTwitterアカウントにお願いします。

RECENT POSTS


[ PR ]

.