はじめに
Pythonの手軽さと、Javaの堅牢性や既存資産を組み合わせたい場面は多くあります。そんなときに便利なのが、PythonからJavaを直接呼び出せる「JPype」というライブラリです。
本記事では、JPypeを使ってPythonからJavaクラスを呼び出す基本手順を、サンプルコード付きでわかりやすく解説します。
JPypeとは?
JPypeは、PythonからJVM(Java仮想マシン)を起動し、Javaクラスを直接操作できるライブラリです。
特徴:
- Javaのクラス・メソッドをPythonオブジェクトのように使える
- Javaの標準ライブラリや自作クラスも呼び出せる
- ctypesなどC拡張不要でインストール可能
開発環境
- Python 3.8以上
- Java 11以上(OpenJDKでも可)
- pipで
jpype1
をインストール
pip install jpype1
Javaクラスの準備
まずは、簡単なJavaクラスを用意しておきます。
MyCalc.java
public class MyCalc {
public int add(int a, int b) {
return a + b;
}
public static String hello(String name) {
return "Hello, " + name + "!";
}
}
コンパイル:
javac MyCalc.java
同ディレクトリにMyCalc.class
が出力されます。
PythonからJavaクラスを呼び出す
main.py
import jpype
import jpype.imports
from jpype.types import *
# JVMを起動(クラスパスは適宜指定)
jpype.startJVM(classpath=['.'])
# Javaクラスをインポート
from MyCalc import MyCalc
# インスタンスメソッドの呼び出し
calc = MyCalc()
result = calc.add(5, 3)
print("5 + 3 =", result)
# staticメソッドの呼び出し
msg = MyCalc.hello("Taro")
print(msg)
# JVMをシャットダウン
jpype.shutdownJVM()
出力:
5 + 3 = 8
Hello, Taro!
Java標準ライブラリを使う例
from java.util import ArrayList
lst = ArrayList()
lst.add("apple")
lst.add("banana")
print("リストのサイズ:", lst.size())
JVMのオプション指定
jpype.startJVM(jpype.getDefaultJVMPath(), "-ea", classpath=["./lib/*"])
注意点
- JVMはPythonプロセス中で一度しか起動できません
- Javaのパスやクラスパスが通っていないと読み込めません
- WindowsではJavaのDLLが環境変数に設定されている必要があります
まとめ
- PythonとJavaはJPypeを使えば簡単に相互運用できます
- GUIや画像処理、AIモデルなどをJavaの性能とPythonの柔軟性で補完できます
- PythonからJavaライブラリを再利用したいときにも非常に便利です