Coding for Fun

ruby on railsを中心としたウェブ技術つれづれ日記

Rubyコードを他人に使ってもらう

簡単なRubyコードを他人に使ってもらいたいことがしばしばあります。CSVの洗浄だったり、スクレイピングだったりするスクリプトです。そういうときに使えるTips

Rubyをインストールしてもらう

開発者の負担:低
利用者の負担:高
ワンクリックインストーラーがあるとはいえ、CSVの洗浄のためにRubyをインストールするのはちょっと。実行もコマンドプロンプトを立ち上げるのか、あるいはバッチファイルを作るのか、ですが、どちらも初心者には不安が残る方法です。ただ、状況によってはこれが一番いい選択肢のときもあります。かなりITリテラシーが高い人なら、コードを直接編集できますからね。

Rubysscript2exeを使う

https://github.com/ryanbooker/rubyscript2exe
開発者の負担:中
利用者の負担:中
Rubyインタープリタとコードをexeファイルにまとめてくれるものです。まあまあ使いやすいけど、マックとかで使えないのと、GUIがないのがネック。

jRuby & Swingを使う

開発者の負担:高
利用者の負担:低
クロスプラットフォームでつかえると言えばJavaRubyにはjRubyというすばらしいプロジェクトがありますから、それをつかえば、大した手間なくGUIアプリができます。「GO!」ボタンだけがあるGUIアプリでも、バッチのスクリプトよりは初心者にとってずっと安心できるでしょう。
ちなみに、最近はSwingの後継であるJavaFXが流行っていますが、私の環境だと動いてくれなかったので、残念ながらあきらめました。

jRuby & Swingで配布できるような実行ファイルを作るまで。

jRubyのインストール

rvmがあったら簡単。rbenvより私は好きです。

rvm update
rvm install jruby
rawrのインストール

rawrというのは、jRubyをコンパイルするためのgemです。普通にインストールするとRuby 1.8系列用のものが入ってしまうので作者のサイトからインストールします。

gem install rawr --source http://gems.neurogami.com
rawrのセットアップ

GUIのプロジェクトを作ります。

mkdir HelloWorldGui
cd HelloWorldGui
rawr install
アプリ開発

src/main.rb が編集すべきファイルです。以下の通り書いてください。

require "java"

java_import javax.swing.JFrame
java_import javax.swing.JButton
java_import javax.swing.JOptionPane

class HelloWorld < JFrame
  def initialize
    super "Example"
    
    setSize(150, 100)
    setDefaultCloseOperation(JFrame::EXIT_ON_CLOSE)
    setLocationRelativeTo(nil)
    
    button = JButton.new("Say Hello")
    add(button)
    
    button.addActionListener do |e|
      JOptionPane.showMessageDialog(nil, "Hello World")
    end
    
    setVisible(true)
  end
end

HelloWorld.new

コンパイル

以下のコマンドでコンパイルすれば完成です。

rake rawr:bundle:exe
rake rawr:bundle:app