Processing を好きなエディタでコーディングしてコマンドラインから実行する
前置き
Processing でスケッチを作成する場合、PDE (Processing Development Environment) と呼ばれる専用の統合開発環境に含まれるエディタでコードを書いて、Run (実行)ボタンをクリック(もしくはショートカットキーで実行)、というのが一般的な流れですよね。
PDE はよくできた開発環境だけれども、やっぱり使い慣れたエディタでコード書いたりしたくなるわけです。
Processing 2.0 未満(正確には Processing 2.0 Beta 3 以前)であれば、PDE の設定 (File -> Preferences) から "Use external editor" にチェックを入れることで、別のエディタで書いたコードを PDE から実行することができました。
正確には、
- 外部エディタでスケッチを作成/修正。
- PDE で該当ファイルを開く(Use external editor が ON のため、PDE からは編集できない)。
- run ボタンクリックで、スケッチを実行。
- 外部エディタでスケッチを修正。
- 立ち上げっぱなしの PDE でスケッチを実行。
- 以後、4 と 5 の繰り返し。
というような感じで作業ができました。
しかし、Processing 2.0 (正確には Processing 2.0 Beta 4 以降) から、"Use external editor" の設定は廃止されてしまいました。
http://wiki.processing.org/w/Using_an_External_Editor
一瞬「どんな判断だ」と思ったのですが、これに伴ってコマンドラインからの実行がサポートされるようになったようです。*1(ただし java モードに限る。)
コマンドラインツールの使い方
ダウンロードしたファイル郡の中に含まれるprocessing-java という実行ファイルを使うと、作成したスケッチがコマンドラインから実行できるようです。*2
--help オプション付きで実行すれば使い方が表示されます。
$ processing-java --help
以下、ヘルプ表示をざっと翻訳。
オプション | 説明 |
---|---|
--help | ヘルプを表示。 |
--sketch=<name> | スケッチフォルダを指定。(必須) |
--output=<name> | 出力フォルダを指定。(必須) スケッチフォルダと同じ name は指定できない。 |
--force | 通常、ouptput オプションで指定したフォルダが既に存在していた場合、内容が置き換わってしまわないよう、スケッチはビルドされない。 force オプションを指定した場合、既存フォルダを削除してからビルドを実行する。使用には細心の注意を払うこと。 |
--build | プリプロセス、コンパイルを行い、スケッチから .class ファイルを生成する。 |
--run | プリプロセス、コンパイルを行い、スケッチを実行する。 |
--present | プリプロセス、コンパイルを行い、スケッチをフルスクリーンで実行する。 |
--export | アプリケーションをエクスポートする。 |
--platform | プラットフォームを指定する。(export 時のみ) 'windows'、'macosx'、'linux' のいずれかを指定する。 |
--bits | OpenGL のような、32 または 64 ビット特有のライブラリを使用している場合は、32/64 を指定する。 |
スケッチの準備
では早速使ってみます。
まずはスケッチ用のディレクトリを作成。ここでは MySketch ディレクトリを作りました。
そして各々好きなエディタで MySketch.pde を作成します。
$ cd /path/to/sketchbook/ $ mkdir MySketch $ vi MySketch/MySketch.pde
このとき、ディレクトリの名前とファイルの名前 (*.pde) は同じにする必要があります。
ディレクトリ名と同名のファイルがスケッチのメインファイルとみなされ、このファイルの中にスケッチの根幹となる setup() と draw() が書いてあるものとして扱われるようです。
ちなみに上の例では vi を使いましたが、自分は Emacs 派なので Emacs で書きます。
その場で実行 (run)
--run オプションで、その場で実行します。
スケッチがあるディレクトリとして MySketch を指定、ビルドしたファイルの出力先として MySketch/output を指定しました。
$ processing-java --run --sketch=MySketch --output=MySketch/output
実行できました!
2回目以降は MySketch/output を置き換えられるよう、--force オプションを追加します。
$ processing-java --run --sketch=MySketch --output=MySketch/output --force
このとき、以下のようなファイルが生成されています。
$ ls --recursive MySketch/output MySketch/output: MySketch.class source MySketch/output/source: MySketch.java
エクスポートして実行 (export)
エクスポートした実行ファイルから実行する方法もあります。
それぞれの環境に合わせてオプションを指定します。
(--run と --export を同時に指定すると、--run は無視されます。)
$ processing-java --sketch=MySketch --output=MySketch/output \ --export --force --platform=linux --bits=32
以下のようなファイルが生成されます。
$ ls --recursive MySketch/output MySketch/output: MySketch lib source MySketch/output/lib: MySketch.jar gluegen-rt.jar core.jar jogl-all-natives-linux-i586.jar gluegen-rt-natives-linux-i586.jar jogl-all.jar MySketch/output/source: MySketch.java MySketch.pde
出力先に指定したディレクトリ直下に実行ファイルが生成されており、コレを実行することでスケッチが走ります。
$ ./MySketch/output/MySketch
ちなみにエクスポートしたファイルから java で実行することもできるみたいです。
$ processing-java --sketch=MySketch --output=MySketch/output \ --export --force --platform=linux --bits=32 $ java -cp MySketch/output/lib/core.jar:MySketch/output/lib/MySketch.jar MySketch
コマンドラインからスケッチを実行可能なことが確認できました。