Processingの自作ライブラリの作り方

Eclipse を使って Processing のユーザーライブラリを作成する方法を紹介します。

1. プロジェクトの新規作成

前回の記事のやり方に沿って既に Eclipse に Processing 本体のライブラリ化が済んでいるものとします。
Eclipse のメニューから File > New > Java Project を選びます。
Project name は P5LibTest などとします。
Next を押し、Libraries タブを選択して Add Library ボタンを押します。
User Library を選んで Nextを押し、P5v3Core にチェックを入れて Finish を押します。
再度 Finish ボタンを押します。
これで Processing 本体のライブラリが追加されたプロジェクトが作られました。

2. クラスファイルの作成

ユーザーライブラリ用のクラスファイルを作成します。
Package Explorer で P5LibTest を選択した状態でメニューから File > New > Class を選びます。
ここでクラス名に加えてパッケージ名も記入し、Finish を押します。
例えば sampleLib というパッケージ名に MyClass1 というクラス名でファイルを作成してみます(参考画像)。
MyClass1.java は以下のような内容にします。

package sampleLib;
import processing.core.*;

public class MyClass1 extends PApplet {
	
	private PApplet p;
	private float x;
	
	public MyClass1( PApplet p ){
		this.p = p;
		x = 0;
	}
	
	public void setX( float x ){
		this.x = x;
	}
	
	public float getX(){
		return x;
	}
	
	public void drawCircle( int x, int y ){
		float d = 100 + 50 * PApplet.sin( PApplet.radians( p.frameCount * 5 ) );
		p.ellipse( p.mouseX, p.mouseY, d, d);
	}
}

変数 x とそのセッターとゲッター、あと円を描画する関数を持ちます。
クラス内で Processing の関数が使えるようにするために PApplet クラスを継承させており、さらに PApplet のインスタンスを持ちます。インスタンスを持たせているのは、親となる PApplet 上で図形の描画などをしたい時に必要になるからです。

次に、メインとなるクラスを作成します。
Package Explorer で P5LibTest を選択した状態でメニューから File > New > Class を選びます。
Name は MainApp、Package の欄は空にして Finish を押します。
MainApp.java は以下のような内容にします。

import processing.core.*;
import sampleLib.MyClass1;
 
public class MainApp extends PApplet {
	
    MyClass1 mc1;
 
    public void settings(){
        size( 800, 800 );     
    }
 
    public void setup() {
    	mc1 = new MyClass1( this );
    	mc1.setX( 72 );
    	println( mc1.getX() );
    }
 
    public void draw() {
    	background( 50 );
    	mc1.drawCircle( mouseX, mouseY );
    }
    
    public static void main(String[] args) {
    	PApplet.main( "MainApp" );
    }
}

setup 関数内でセッターゲッターの動作を確認しています。
実行すると、拡大縮小を繰り返す円がマウス位置に表示されます。

では、ここで作った MyClass1 というシンプルなクラスをライブラリ化して Processing IDE で使用できるようにしましょう。

3. クラスファイルのエクスポート

Package Explorer で sampleLib を選択した状態で右クリックし Export を選びます。
Java > JAR file が選択されていることを確認したら Next を押します。
エクスポートの設定画面が出るので、sampleLib パッケージが選択されていることを確認して下さい。

JAR file の出力先を決める必要があります。
出力すべき場所(ファイル名)は
 Processingのスケッチブックフォルダ/libraries/ライブラリ名/library/ライブラリ名.jar
です。
Processingのスケッチブックフォルダはデフォルトだと、
 Mac なら /Users/ユーザ名/Documents/Processing
 Win なら C:\Documents and Settings\ユーザ名\My Documents\Processing
のようです。
これは Processing を起動して環境設定を見ることでも確認できます。
Processingのスケッチブックフォルダ内に libraries
というフォルダがあり、ここがユーザーライブラリを置く場所です。
JAR file の出力ファイル名で「ライブラリ名」の部分は好きな名前を付けて下さい(ここでは sampleLib としてみましょう)。これが Processing が認識するライブラリの名前になります。jar ファイルの名前はライブラリ名と同一である必要があります。こんな感じ
出力先が正しく指定できたら Finish を押します。ファイルが無いので新規作成するかというダイアログが出るので OK します。

4. ライブラリの利用

では今作ったライブラリが Processing IDE でちゃんと使えるか確認をしましょう。
Processing を(再)起動してメニューから スケッチ > ライブラリのインポート > sampleLib を選びます。
もしライブラリのインポートの欄に sampleLib が表示されていない場合は前項でのライブラリのエクスポートがうまく行っていないと思われるので出力場所やファイル名に間違いがないか確認しましょう。

インポートを行うと Processing エディタの一行目に import sampleLib.*; と記入されます。
以下のようなコードをエディタに記入して実行してみましょう。

import sampleLib.*;

MyClass1 m1;

void setup(){
  size( 800, 800 );
  m1 = new MyClass1( this );
}

void draw(){
  background( 255 );
  m1.drawCircle( mouseX, mouseY );
}

Eclipse で実行した時と同様に動く円が表示されれば成功です。
自分で作成したクラスをライブラリとしてインポートして Processing で使用できるようになりました。

5. 複数クラスのエクスポート

とりあえずは話はひと段落ですが、先ほどとは違い、実際にはライブラリには複数のクラスがある場合がほとんどだと思います。複数のクラスをまとめてライブラリとして出力する方法を以下に説明します。

2つ目のクラスファイルを作成しましょう。
Package Explorer で P5LibTest を選択しメニューから File > New > Class を選びます。
sampleLib というパッケージ名に MyClass2 というクラス名でファイルを作成します。
MyClass2.java の中身は適当に作ってください。MyClass1 と同じような内容でも良いです。

さっきと全く同様の手順でエクスポートします。出力先は同一にし、上書きをしましょう。
Processing を再起動したら、先ほどと同様に samoleLib のインポート文を冒頭に書き、あとは MyClass2 を使ったコードを書いて動作確認をして下さい。

6. 複数パッケージのエクスポート

大規模な開発になると複数のパッケージがプロジェクト内に存在するようになります。
このような場合エクスポートの設定画面で出力したいパッケージ全てにチェックを入れてください。
例えばこの画像の例だとこれまでの sampleLib に加えて secondPkg というパッケージも一緒にエクスポートしています。

ここで1つメモとして、このように複数パッケージをまとめて jar ファイルにした場合、Processing IDE のメニューからライブラリのインポートを行うと、全てのパッケージのインポート文が挿入されることになります。つまり、
 import sampleLib.*;
 import secondPkg.*;
と並ぶことになります。
もしパッケージの数が 10 も 20 もある場合に、必ずしも必要のないインポート文がずらずらと並べられるとこれはかなり面倒です。そのような場合は、メインとなるパッケージのみを選んでライブラリ名を付けた jar ファイルとしてエクスポートし、残りのパッケージは個別に(あるいはまとめて)別の jar ファイルとして(名前はなんでもいい)エクスポートしましょう。
こうしておけば、Processing IDE のメニューからライブラリのインポートをした場合にはメインのパッケージのみのインポート文が挿入されることになります。
ただしこの場合にはメインのパッケージ以外のパッケージに属するクラスを Processing IDE 上で直接利用することはできません。メインのクラスの中でそれらのクラスのインスタンスを生成していれば Processing 上でメインのクラスを介してそれらのクラスを利用することは可能ですが。

コメント