LoginSignup
4
5

More than 5 years have passed since last update.

Windows ユーザー向けに JRuby で CLI アプリをつくる

Posted at

はじめに

※追記

この記事を書き終わった瞬間に Warbler という JRuby → jar をする gem を見つけました。
まだ試してないですが Warbler のほうがよさそうです。
Warbler については [JRuby][Warbler]Rubyで書いたソースからJARを作成する | Developers.IO が詳しそうでした。

対象となる読者

  • Windows ユーザーに CLI アプリを提供したいが CRuby をインストールしてもらえない。
  • Ruby で作りたい! ←ここ重要

この記事を読んだ後できるようになること

  • Java 環境があれば追加のインストールなく JRuby 製 CLI アプリが提供できる。
  • Ruby を使うチャンスが増える!

この記事を書いたときの環境

  • Windows 7 (x64)
  • jdk-8u144-windows-x64
  • jruby-complete-9.1.12.0.jar

ソースコード

この記事で説明しているソースコードは GitHub に置いてあります。

これはボイラープレートとして作成したので素早く使える状態にできます。

ファイル構成

最終的なファイル構成はこんな感じです。

./sample
  |-- hello.rb
  |-- hello.bat
  |-- Gemfile
  `-- vendor
       |-- jruby-complete-9.1.12.0.jar
       |-- jruby.bat
       |-- bundle.bat
       `-- gem_home

jruby-complete-x.x.x.x.jar をダウンロードする

http://jruby.org/download から jruby-complete-x.x.x.x.jar をダウンロードして vendor に配置します。
これが JRuby の本体です。これを java コマンドに渡すことによって JRuby インタプリタとして動作します。

> jara -jar jruby-complete-9.1.12.0.jar --version
jruby 9.1.12.0 (2.3.3) 2017-06-15 33c6439 Java HotSpot(TM) 64-Bit Server VM 25.144-b01 on 1.8.0_144-b01 +jit [mswin32-x86_64]

毎回 -jar ... オプションをつけるのは面倒なので jruby.bat を作成して jruby コマンドっぽく実行できるようにします。

jruby.bat

@echo off

setlocal
set GEM_HOME=%~dp0gem_home
set GEM_PATH=%~dp0gem_home
java -jar %~dp0jruby-complete-9.1.12.0.jar %*

GEM_HOMEGEM_PATH は gem のインストール先を設定する環境変数です。正確にはマニュアルを見てください。

ここでは、vendoer/gem_home にしています。

Bundler で gem を管理する

やっぱり、Bundler を使って gem を管理したいですね。ということで、インストールします。

> vendor/jruby.bat -S gem install -i vendor/gem_home --no-document bundler

bundle コマンドを簡単にするために bundle.bat を作っておきます。

bundle.bat

@%~dp0jruby.bat -S %~dp0gem_home\bin\bundle %*

Bundler で gem をインストールしてみます

今回はただの Hello, World! サンプルなので必要ないですが Gemfile に設定してインストールしてみます。

Gemfile

source "https://rubygems.org"
gem "nokogiri"

いつもは --path vendor/bundle を指定してインストールしているかもしれませんが、アプリ専用の vendor/gem_home にインストールされるため不要です (--binstubs オプションもいらないな)。

> vendor/bundle.bat install

vendor/gem_home に gem をまとめると、gem を 1つの jar にすることができて、配布が便利になります。

配布

gem を jar にします。

> jar cf gems.jar -C vendor\gem_home .

jruby-complete-9.1.12.0.jargems.jar を配布用のフォルダにコピーします。

そして、実行用 bat ファイルを作成します。

hello.bat

java -jar jruby-complete-9.1.12.0.jar -I./ -r gems.jar hello.rb

最終的な配布用のファイル構造です。

dist
  |-- hello.bat
  |-- hello.rb
  |-- jruby-complete-9.1.12.0.jar
  `-- gems.jar

まとめ

CLI アプリであれば ocra が便利です。今回、この方法を調査したのは ocra では不都合な場面に出会ってしまったからでした。。。
ocra がダメな場合で、それでも Ruby で書きたい場合は当記事を参考にしてみてください。ただし、配布先に java 環境が必要です。

調査中に解決できなかったこと

rawr という gem を使って exe 化できるということなのでやってみましたが print 系のメソッドで標準出力が表示されませんでした。
ちなみに、ocra とは違って 1 ファイルだけの exe になるわけではなく、exe と jar が配布用のフォルダに出力されるようでした。

Java プログラム を exe 化する方法はあるみたいでしたが、そちらは exe 化したくなったときに調査してみます。

参考文献

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5