スクリプト言語の面倒なところは実行時にエンジンを必要とするところではないでしょうか(Javaも必要ですが)。Rubyなどでスクリプトを書くのは簡単でも、それを配布するとなると書く実行マシンに環境を整える必要があります。 そこで使ってみたいのがTraveling Rubyです。RubyスクリプトをMac OSXやLinux上で自由に実行できるようにするソフトウェアです。

Traveling Rubyの使い方

Traveling RubyでHello Worldを行う際には次のように実行します。

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

mkdir -p hello-1.0.0-linux-x86/lib/app
cp hello.rb hello-1.0.0-linux-x86/lib/app/

mkdir -p hello-1.0.0-linux-x86_64/lib/app
cp hello.rb hello-1.0.0-linux-x86_64/lib/app/

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

mkdir packaging
cd packaging
curl -L -O --fail http://d6r77u77i8pq3.cloudfront.net/releases/traveling-ruby-20141215-2.1.5-linux-x86.tar.gz
curl -L -O --fail http://d6r77u77i8pq3.cloudfront.net/releases/traveling-ruby-20141215-2.1.5-linux-x86_64.tar.gz
curl -L -O --fail http://d6r77u77i8pq3.cloudfront.net/releases/traveling-ruby-20141215-2.1.5-osx.tar.gz
cd ..

mkdir hello-1.0.0-linux-x86/lib/ruby && tar -xzf packaging/traveling-ruby-20141215-2.1.5-linux-x86.tar.gz -C hello-1.0.0-linux-x86/lib/ruby
mkdir hello-1.0.0-linux-x86_64/lib/ruby && tar -xzf packaging/traveling-ruby-20141215-2.1.5-linux-x86_64.tar.gz -C hello-1.0.0-linux-x86_64/lib/ruby
mkdir hello-1.0.0-osx/lib/ruby && tar -xzf packaging/traveling-ruby-20141215-2.1.5-osx.tar.gz -C hello-1.0.0-osx/lib/ruby

そして次のようなファイルを packaging/wrapper.sh というファイル名で作成します。

chmod +x packaging/wrapper.sh
cp packaging/wrapper.sh hello-1.0.0-linux-x86/hello
cp packaging/wrapper.sh hello-1.0.0-linux-x86_64/hello
cp packaging/wrapper.sh hello-1.0.0-osx/hello
tar -czf hello-1.0.0-linux-x86.tar.gz hello-1.0.0-linux-x86
tar -czf hello-1.0.0-linux-x86_64.tar.gz hello-1.0.0-linux-x86_64
tar -czf hello-1.0.0-osx.tar.gz hello-1.0.0-osx

これで完了です。後はhello-1.0.0-osx.tar.gzなどを配布します。受け取った方は、これを解凍します。そして、

./hello-1.0.0-osx/hello
# => hello world

と出る仕組みです。

実行ファイルとライブラリで、約22MB程度増加します。Rubygemsの解決やネイティブ拡張系のライブラリにも対応しているようです。また、Windows向けにも若干のテクニックが必要ですが、対応しているようです。

Traveling Rubyを使えばRubyスクリプトの配布が手軽になりそうです。バイナリとは異なり、ソースコードは見えている状態なので、その点には注意が必要です。

Traveling RubyはMac OSX/Linux用のオープンソース・ソフトウェア(MIT License)です。

phusion/traveling-ruby