Processing も Emacs で書きたい!ということで久しぶりに processing-mode を触ってみたら、環境設定で何箇所かハマったのでメモしておく。
概要
processing-mode の設定:
(leaf processing-mode
:ensure t
:require t
:setq
`((processing-location . "/usr/local/bin/processing-java")
(processing-application-dir . "/Applications/Processing.app")
(processing-sketchbook-dir . "/Users/rindrics/dev/processing")))
実行した Processing コード:
ellipse(25, 25, 50, 50);
観測した要件:
.pde
はprocessing-sketchbook-dir
に同名のディレクトリを作って配置することv4.0 beta 8
ではなくv3.5.4
(v2.2.1
は未確認)の Processing を使うこと- ファイル名の先頭に数字を使わない
.pde
は processing-sketchbook-dir
に同名のディレクトリを作って配置すること
これを守らないとコンパイルできない。 この要件の破り方には少なくとも 2 パターンあるので、それぞれについてまとめておく。
同名ディレクトリを作らない場合
例えば processing-sketchbook-dir
が your-dir/processing
である場合、 hoge.pde
は your-dir/processing/hoge/hoge.pde
に置く必要がある。
これを your-dir/processing/hoge.pde
に置いてしまうと Not a valid sketch folder. your-dir/hoge/hoge.pde does not exist.
エラーが出る。
processing-sketchbook-dir
に置かない場合
.pde
を同名のディレクトリに置いていたとしても、それを processing-sketchbook-dir
に配置しないと下記のエラーが出る:
/usr/local/bin/processing-java --force --sketch=/your-dir/processing/hoge/ --run --output=/your-dir/processing/hoge/output
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at processing.app.Sketch.getCode(Sketch.java:1686)
at processing.app.Sketch.getMainProgram(Sketch.java:1711)
at processing.mode.java.JavaBuild.preprocess(JavaBuild.java:216)
at processing.mode.java.JavaBuild.preprocess(JavaBuild.java:155)
at processing.mode.java.JavaBuild.build(JavaBuild.java:122)
at processing.mode.java.Commander.<init>(Commander.java:274)
at processing.mode.java.Commander.main(Commander.java:86)
Processing Compilation exited abnormally with code 1 at Thu Jun 9 06:03:45
余談ではあるが、 .pde
を Mac OSX におけるデフォルトのスケッチブック用ディレクトリ ~/Doccuments/Processing
に置いた場合にもコンパイルが通った。
私の環境では、このディレクトリは Processing App 側の環境設定における “Sketchbook location” と同じ値だったのが気になった。
そこで、“Sketchbook location” を ~/fuga
に変更した上で ~/fuga/hoge/hoge.pde
をコンパイルしてみたが、エラーとなってしまった。
これ以上の調査はしていないが、 ~/Documents/Processing
におけるコンパイル成功は例外的な挙動な気がしている。
v4.0 beta 8
ではなく v3.5.4
( v2.2.1
は未確認)の Processing を使うこと
上で述べたディレクトリに関する条件を満たしていても、執筆時点で最新であった v4.0 beta 8
の Processing を使うと、下のエラーが出た:
/usr/local/bin/processing-java --force --sketch=/your-dir/processing/hoge/ --run --output=/your-dir/processing/hoge/output
Exception in thread "main" java.lang.NoClassDefFoundError: org/antlr/v4/runtime/CharStream
at processing.mode.java.JavaBuild.preprocess(JavaBuild.java:144)
at processing.mode.java.JavaBuild.build(JavaBuild.java:110)
at processing.mode.java.Commander.<init>(Commander.java:233)
at processing.mode.java.Commander.main(Commander.java:417)
Caused by: java.lang.ClassNotFoundException: org.antlr.v4.runtime.CharStream
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
... 4 more
Processing Compilation exited abnormally with code 1 at Thu Jun 9 05:57:24
そこで、本家から v3.5.4
をインストールし直すことにした。
Processing のバージョンを変更するときの注意
Processing のバージョンを変える時には、ひとつ注意点がある。
/usr/local/bin/processing-java
というファイルが jdk のバージョン依存のパスを参照しているため、Processing のバージョンを変えてそのままコンパイルすると No such file or directory
が出てしまう。
なので、ターミナルなどを使って jdk 周りの状況を調べ、現状に合うように /usr/local/bin/processing-java
を編集する必要がある。
Mac OS 12.3.1 の環境では、当該 jdk のパスは次の通りだった: /Applications/Processing.app/Contents/PlugIns/jdk1.8.0_202.jdk/Contents/Home/jre/bin/java
ファイル名の先頭に数字を使わない
haru さんがまとめてくださっているのでリンクで済ませる: https://harujisaku.fc2.net/blog-entry-148.html
まとめ
私の環境では、上で述べた 3 つの要件を満たすことで、無事コンパイルが通った。