PythonとJavaを連携する方法【JPypeによる相互運用】

はじめに

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ライブラリを再利用したいときにも非常に便利です
タイトルとURLをコピーしました