雑念日記

主に技術的なことをつらとらと(書ければいいな)。

Processing を好きなエディタでコーディングしてコマンドラインから実行する

前置き

Processing でスケッチを作成する場合、PDE (Processing Development Environment) と呼ばれる専用の統合開発環境に含まれるエディタでコードを書いて、Run (実行)ボタンをクリック(もしくはショートカットキーで実行)、というのが一般的な流れですよね。

f:id:hoshi_sano:20130801093108p:plain

PDE はよくできた開発環境だけれども、やっぱり使い慣れたエディタでコード書いたりしたくなるわけです。

Processing 2.0 未満(正確には Processing 2.0 Beta 3 以前)であれば、PDE の設定 (File -> Preferences) から "Use external editor" にチェックを入れることで、別のエディタで書いたコードを PDE から実行することができました。


正確には、

  1. 外部エディタでスケッチを作成/修正。
  2. PDE で該当ファイルを開く(Use external editor が ON のため、PDE からは編集できない)。
  3. run ボタンクリックで、スケッチを実行。
  4. 外部エディタでスケッチを修正。
  5. 立ち上げっぱなしの PDE でスケッチを実行。
  6. 以後、4 と 5 の繰り返し。

というような感じで作業ができました。

しかし、Processing 2.0 (正確には Processing 2.0 Beta 4 以降) から、"Use external editor" の設定は廃止されてしまいました。

http://wiki.processing.org/w/Using_an_External_Editor
f:id:hoshi_sano:20130801093047p:plain

一瞬「どんな判断だ」と思ったのですが、これに伴ってコマンドラインからの実行がサポートされるようになったようです。*1(ただし java モードに限る。)

http://wiki.processing.org/w/Command_Line
f:id:hoshi_sano:20130801093039p:plain

コマンドラインツールの使い方

ダウンロードしたファイル郡の中に含まれる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 で書きます。

f:id:hoshi_sano:20130801093052p:plain

その場で実行 (run)

--run オプションで、その場で実行します。
スケッチがあるディレクトリとして MySketch を指定、ビルドしたファイルの出力先として MySketch/output を指定しました。

$ processing-java --run --sketch=MySketch --output=MySketch/output

実行できました!

f:id:hoshi_sano:20130801093101p:plain

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

コマンドラインからスケッチを実行可能なことが確認できました。

*1:以前からコマンドラインツールは存在していましたが、バージョンアップに伴って、いつからか使用できなくなっていたと記憶しています。

*2:Mac OS X の場合は、別途ダウンロードが必要とのこと。