はじめに
Processing をRubyでラップした Ruby-Processing というライブラリがある。
Rubyによる簡潔な表現で記述できるため生産性が高まるし書いていて楽しい。
ここではMacにRuby-Processingを導入する方法を紹介する。
基本的には本家のwikiに書いてあることの翻訳です。
Ruby-processingのインストール手順
- (大多数の人はすでにインストール済みだと思いますが)homebrew, wget, rbenv をインストールする。
- Oracleのjavaを入れる
- jrubyとruby-processingを実行するのに必要とのこと。
-
http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html
- ページ上部の"Java SE Downloads"にある大きなアイコンをクリックしてインストーラ("Java SE Development Kit 8u25"みたいなやつ)をダウンロードする
- processingをインストールする
- https://www.processing.org/download/?processing からダウンロード
- Processingアプリケーション(アイコン)を自分のアプリケーションフォルダへ移動させればOK
- jrubyをインストールする
rbenv install jruby-1.7.13
- jruby用のディレクトリを作る
- 例
-
mkdir jruby-dev
(ディレクトリ名は任意) cd jruby-dev
rbenv local jruby-1.7.13
-
ruby -v
でjruby 1.7.13 (1.9.3p392)
になっていることを確認
-
- ruby-processingのインストール
-
gem install ruby-processing && rbenv rehash
を実行
-
~/.rp5rc
の作成と編集
-
本家のwikiページには https://gist.github.com/monkstone/7438749 をProcessingで実行すればよいと書いてあるが、うまくrp5rcを作ってくれなかった。
- ちなみにp5というのはProcessingの通称みたいなものらしい。昔processingのドメインが取れなかった時に、proce55ingというドメインを使っていたのが名前の由来とか。rp5はruby-processingのこと。
-
touch ~/.rp5rc
でファイル作成後、以下のように手動で編集する。.rp5rcPROCESSING_ROOT: "/Applications/Processing.app/Contents/Java" JRUBY: 'true'
- jruby-complete をインストールする。(jruby-completeってなんなのかよくわかってない...)
rp5 setup install
- sampleを展開する
rp5 setup unpack_samples
- sampleを実行してみる
cd rp_samples && rake
- 次々にサンプルが実行されるはず
- サンプルの終了は Command+Q
- いくつかうまく実行されないものもあるかも。レインボーマークがぐるぐるし続けるサンプルはCommand-Qで終了させる
- サンプルの数が多いので、途中で終わらせたいときはコンソール上で Ctrl-C する
- サンプルがうまく動けば完了です!
自作のプログラムを動かしてみる
- スクリプトのひな形を作る
-
rp5 create my_sketch 800 600
を実行。my_sketch.rb
が作られる。(もしくはrp5 create my_sketch 800 600 --wrap
でもよい。)
-
my_sketch.rb
def setup
size 800 600
end
def draw
end
- この
setup
とdraw
メソッドを実装していくのが、Ruby-Processingプログラムの基本 - 以下のページに振り子のサンプルプログラムがあるので、今回はこれをコピー&ペーストする
- 実行するときには
rp5 run my_sketch.rb
を実行する- 普通のRubyスクリプトに比べるとだいぶ起動が遅いかも。jvmの起動に時間がかかっているから?
- ウインドウ内で振り子が動けばOK!
ProcessingプログラミングのTips、注意点等
-
setup
とdraw
という二つの関数を実装するのがProcessingの基本仕様- アプリの起動時に
setup
メソッドが呼ばれて、各フレームごとにdraw
メソッドが呼ばれる。
- アプリの起動時に
- Processingの関数は snake_case に変換して呼び出すことができる
- 例えば Processing の
frameRate()
という関数は、Rubyからだとframe_rate
で呼ぶことができる。(この関数名のマッピングはjrubyの機能)
- 例えば Processing の
- 自作のクラスの中でProcessingのAPIを呼ぶ場合は、
$app
というグローバル変数を経由して実行する- 例えば幅を取得したい場合は、
$app.width
とする。
- 例えば幅を取得したい場合は、
- スクリプトを編集するたびに
rp5 run
を実行していると時間がかかりすぎるのでrp5 watch
コマンドを使うと良い- スクリプトの変更を監視して、スクリプトが変更されるたびにアプリを起動し直す
-
rp5 watch my_sketch.rb
を実行しておきながら、my_sketch.rb
を編集するのが良い
- ProcessingのAPIはこちらのページで参照できる