Traveling Ruby - 単独実行可能なRubyアプリを作成

TravelingRuby

Rubyアプリの開発者にとって悩ましい問題の一つに、エンドユーザーの環境にどうやってRubyの実行環境を導入するかという問題があるかもしれません。Rubyアプリの実行には、RubyのインタプリタやRubyGemsが必要なのに、エンドユーザーの環境ではこれらのソフトウェアがインストールされていない事が多いからです。

この問題を解決するために開発されたツールが「Traveling Ruby」です。RubyインタプリタやRubyGems「全部込み」のRubyアプリの作成を助けてくれるツールです。

サンプルアプリの作成

どのようなものか理解するために、Tutorial 1: hello worldを実行してみるのが分かりやすいです。

現在のところTraveling RubyはMac/Linuxにしか対応していません。以下Macで実行してみました。

前準備

hello_appディレクトリを作成し、その中にhello.rbを作成します。

$ mkdir hello_app
$ cd hello_app
$ echo '#!/usr/bin/env ruby' > hello.rb
$ echo 'puts "hello world"' >> hello.rb
$ ruby hello.rb
hello world

packageディレクトリの作成

package作成の準備を行います。まずhello.rbを以下のフォルダにコピー。

$ mkdir -p hello-1.0.0-osx/lib/app/
$ cp hello.rb hello-1.0.0-osx/lib/app/

packagingフォルダを作成し、専用のRuby実行環境をダウンロードします。その後hello-1.0.0-osx以下に展開します。

$ mkdir packaging
$ cd packaging
$ curl -L -O --fail http://d6r77u77i8pq3.cloudfront.net/releases/traveling-ruby-20141209-2.1.5-osx.tar.gz
$ cd ..
$ mkdir hello-1.0.0-osx/lib/ruby && tar -xzf packaging/traveling-ruby-20141209-2.1.5-osx.tar.gz -C hello-1.0.0-osx/lib/ruby

これは要するに、hello-1.0.0-osx以下に自作のスクリプトとRuby実行環境を配置しただけです。現段階でhello_app以下のディレクトリ階層は次のような構造になっています。

Hello app

テスト

現段階でスクリプトが実行できるかテストします。

$ cd hello-1.0.0-osx
$ ./lib/ruby/bin/ruby lib/app/hello.rb
hello world
$ cd ..

wrapper scriptの作成

hello.rbを簡単に呼び出せるようラッパースクリプトを作成します。

packaging/wrapper.shを以下の内容で作成。

#!/bin/bash
set -e

# Figure out where this script is located.
SELFDIR="`dirname \"$0\"`"
SELFDIR="`cd \"$SELFDIR\" && pwd`"

# Run the actual app using the bundled Ruby interpreter.
exec "$SELFDIR/lib/ruby/bin/ruby" "$SELFDIR/lib/app/hello.rb"

実行パーミッションをつけ、hello-1.0.0-osx/helloとしてコピーします。

$ chmod +x packaging/wrapper.sh
cp packaging/wrapper.sh hello-1.0.0-osx/hello

パッケージの完成

ここまできたらほぼ完成。あとはtarで固めるだけです。

$ tar -czf hello-1.0.0-osx.tar.gz hello-1.0.0-osx
$ rm -rf hello-1.0.0-osx

hello-1.0.0-linux-x86.tar.gzが完成したパッケージです。エンドユーザーはこれを解凍し、以下のように実行できます。

$ /path-to/hello-1.0.0-linux-x86/hello
 hello world

さらにRakeで以上のプロセスを自動化する方法も掲載されています。気になる方は確認してみてください。

まとめ

Rubyの実行環境と自作スクリプトをtarで固めて配布すればどんな環境でも実行可能なRubyアプリが配布できる…という考えてみれば当たり前の発想ですが、手順化されたことで使いやすくなっていて、そこに利用価値があるのかもしれません。

Rubyアプリの配布に頭を悩ましている開発者の方はチェックしてみてください。

スポンサーリンク