2026年7月追記
かなり状況が変わってきたので、概要のあと現在の状況に関する整理をおこなってます。その後に2024年当時のものをそのまま残してあります。
概要
Processing は、導入が簡単でグラフィカルなアプリを簡単に作れるなど、初学者のプログラミング習得に向いた環境であるが、文法などはJavaベースである。今時のAIやデータサイエンスなどと組み合わせるためのPythonでやりたい。
ProcessingをPython言語で書くためのPython mode for ProcessingもあるもののJythonベースであるためPython2系となりPython3系は使えない。また外部ライブラリもProcessing専用のライブラリを使う必要があるが、最新のProcessing4用のPython Modeでは外部ライブラリが使えないという問題がある。
そこで、Python mode for Processingに変わる、Pythonでお手軽にGUIプログラミングができる初学者向けの環境を探してみた。条件としては次の通り
- Python3系であること、できればCPython環境
- Processing以外の外部ライブラリを簡単に使えること
- 最近までメンテナンスされていて、今後もメンテナンスされる、または自力でメンテナンスが簡単であること
- Processing風に、余計なボイラープレート不要で、簡単にグラフィカルなプログラムができ、簡単なゲームなどを作れること
- 導入が簡単であること
これらの条件に当てはまるものを探したところ、Py5, p5, PyGameZeroの3種類のライブラリが見つかった。これらとPython mode for Processingを比較してみた。
追記:【2026年最新状況】1年経って変わった各ライブラリの状況
この記事を執筆した2024年初頭から1年以上が経過し、各ライブラリのメンテナンス状況や教育現場での実績から、「結局、今どれを選べばいいのか」の結論が完全にアップデートされました。
結論から言うと、「Py5(Thonny環境)」の完全一強となり、当時おすすめしていた「P5 (p5py)」は初心者・教育向けとしては非常に厳しい状況になっています。
現在の各環境のリアルと、授業で導入する際のロードマップを追記します。
1. 各ライブラリの現在地(2026年時点)
| ライブラリ | 2024年の評価 | 2026年現在のリアル | 判定 |
|---|---|---|---|
| Py5 | Java経由で複雑・玄人向け | 大本命。 エコシステムとIDE(Thonny)側のサポートが充実し、最もトラブルが少ない環境に。 | ◎ 推奨 |
| P5 (p5py) | ピュアPythonで大本命 | 開発停滞。 最新OSやPython(3.11〜3.13)環境、MシリーズMac等でインストールエラーが多発。 | × 非推奨 |
| PyGame Zero | ゲーム用途ならあり | 定番の安定枠。 2Dゲーム制作に特化するなら、今でもエラーが起きにくく教えやすい。 | ○ 用途次第 |
2. 何が変わったのか?各環境の詳細
🟢 Py5:懸念だった「複雑さ」をツールが完全隠蔽
1年前は「裏でJPypeを噛ませてJavaを動かすため初心者には複雑」と評しましたが、この1年で周辺ツールが劇的に進化しました。
初心者向けIDEである Thonnyのプラグイン(thonny-py5mode) や、あらかじめPy5が同梱されたポータブル版パッケージ(thonny-portable-with-py5)の普及により、学生側は「裏でJavaが動いていること」を一切意識する必要がなくなりました。
開発自体もGitHubのpy5codingリポジトリで日次レベルのメンテナンスが続いており、OSやPythonのアップデートによる文句(エラー)が出ない、圧倒的な安定性を誇っています。
🔴 P5 (p5py):環境依存エラーの地獄
ピュアPython実装として期待されていたP5ですが、ここ1年は大きなアップデートがなく開発が事実上ストップしています。
その結果、学生が持つ最新のPC環境(Windows 11の最新アプデや、M1/M2/M3 Macなど)において、内部で使用している描画ライブラリ(VisPyやOpenGL周り)のインストールエラーが頻発するようになりました。「A君のPCでは動くが、BさんのPCではエラーで起動すらしない」という、教員にとって最も避けたい事態が起きやすいため、現在の導入はおすすめできません。
🟡 PyGame Zero:手堅い「動かないトラップ」の回避先
こちらは相変わらず安定しています。Mu EditorやThonnyに標準機能として組み込まれているため環境構築のハードルが最も低く、2Dのグリッドゲームや簡単なアクションゲームを教える授業であれば、今でも非常に手堅い選択肢です。
3. 今、授業やハンズオンでやらせるならこの構成!
特に初学者(学生)の「黒い画面への恐怖心」や「pipインストールでのタイポ・エラー」を極限まで減らすための、2026年現在の最強構成です。
構成A:【最も手軽】Thonny + thonny-py5mode
- 学生に通常の Thonny をインストールしてもらう。
- メニューの「ツール」>「プラグインの管理」から
thonny-py5modeを検索してインストール(再起動)。 - Thonnyのメニューに「Py5」モードが現れ、選択すると1年前の記事で紹介した「Imported Mode」がそのまま動きます。
# これだけで動く! import文も run_sketch() も不要
def setup():
size(480, 120)
def draw():
if is_mouse_pressed:
fill(0)
else:
fill(255)
ellipse(mouse_x, mouse_y, 80, 80)
Java版のProcessingとまったく同じ「ボイラープレート(お決まりのコード)なし」の状態で授業が始められるため、初学者の認知的負荷が最も低いです。
構成B:【モダン・慣れてる人向け】VS Code + uv + Py5
情報系の学生や、ある程度PC操作に慣れている層を対象にするなら、Python界隈で爆速のパッケージ管理ツールとして覇権を握った 「uv」 を組み合わせるのがモダンです。
# プロジェクトの作成とpy5の追加が数秒で完了
uv init processing-app
cd processing-app
uv add py5
以前なら面倒だったJPypeやNumPyを含んだ仮想環境の構築が、uv を使えば一瞬でエラーなく完結します。VS Codeでコードを書き、py5.run_sketch()(モジュールモード)で実行させるスタイルは、実務的なPython開発へのステップアップとしても非常にスムーズです。
結論
1年前は「P5」に期待が集まっていましたが、オープンソースの生存競争の結果、2026年現在は「Py5」が完全なデファクトスタンダードとなりました。
これから新しく授業カリキュラムを組む、または教材を執筆される場合は、**「Py5 + Thonny」**の組み合わせをベースにすることをお勧めします。
以下の記事に関する注意!
以下は、1年以上前に書いた内容です、チュートリアルの内容のコードを書いて各環境を比較する部分はいまでも面白いと思うので、そのまま残しますが、基本的にはここより上の状況をみて判断してください。
Processingのチュートリアルについて
例としてProcessingのチュートリアルの Your First Programにある以下のスケッチ(≒プログラム)と同等の機能を作ってみる。
void setup() {
size(480, 120);
}
void draw() {
if (mousePressed) {
fill(0);
} else {
fill(255);
}
ellipse(mouseX, mouseY, 80, 80);
}
Javaのようにクラスなどは必要なくsetupとdrawという関数を定義すれば良い。これらを実行すると、最初に一回setup関数が呼ばれ、その後draw関数が繰り返し呼ばれる。sizeはウィンドウのサイズを決めてfillはそれ以降の描画コマンドで図形を塗りつぶす色を決める。ellipseは楕円を描画する関数である。またmouseX, mouseYはマウスポインタの座標があらかじめ設定されmousePressedはマウスのボタンをクリックしていればTrueがセットされている。
これを実行すると次のようなウィンドウが現れ、クリックしていれば黒色でクリックしていなければ白色で塗りつぶさた円がマウスポインタの位置に描画される。

Python mode for Processing
Python mode for Processingとは、ProcessingのModesという拡張機能の一つでPythonでスケッチを書けるようにしたものである。もともとJavaの文法のProcessingのスケッチを、Pythonの文法で書けるようにしたものである。例題のスケッチは次のように書ける。
def setup():
size(480, 120)
def draw():
if mousePressed:
fill(0)
else:
fill(255)
ellipse(mouseX, mouseY, 80, 80)
ご覧のようにもともとのProcessingのスケッチをそのままPythonの文法で書き直したものです。書き換えが簡単なので、Processing(Java)の書籍やウェブ上の解説を参考にできます。
ただ、PythonとしてみるとPython2系で、現在主流のPython3系とは書き方が違う部分も出てきます。また、 Jythonベースであり既存のpythonのライブラリを使用できません。さらにProcessing4への対応が不十分で、Processingの外部ライブラリも使用できなくなっています。もともとProcessing3のPython modeでは外部ライブラリの読み込みは、リフレクションを使って無理やりSystemClassloaderにjarファイルを指定するという手法が取られていて、Java9以降この方法が使えなくなった(それ以前から非推奨の手法であった)ので、これを修正するのは簡単ではなさそうです。開発も活発ではないようです。
Py5
Py5は、Processing for Pythonの新しいバージョンを目指したもので、Python3系のCPythonで動いています。JPypeを使ってPythonのプログラムからprocessing.jarのクラスを呼び出すことでCPythonでありながらProcessingを動かすことができます。
基本的な書き方は以下の通りです。
import py5
def setup():
py5.size(480, 120)
def draw():
if py5.is_mouse_pressed:
py5.fill(0)
else:
py5.fill(255)
py5.ellipse(py5.mouse_x, py5.mouse_y, 80, 80)
py5.run_sketch()
setup関数とdraw関数は同じですが、py5モジュール以下の関数を使うようになっています。また、py5.run_sketch()でコードが動作します。これはモジュールモードと呼ばれます。他にImported Modeと呼ばれるモードがあり、IDEのサポートが必要ですが、次のようにimport py5や関数のプレフィックスのpy5., コードを実行するpy5.run_sketch()が不要になります。
def setup():
size(480, 120)
def draw():
if is_mouse_pressed:
fill(0)
else:
fill(255)
ellipse(mouse_x, mouse_y, 80, 80)
Imported Modeに対応したIDEとしてはThonnyのthonny-py5modeなどがあります。このモードにすると、ほとんどPython Modeと同じようにプログラムを書くことができます。違いは、キャメルケースの関数名がスネークケースになる、mousePressedがis_mouse_pressedになるなどです。
インタープリタ自体はCPythonなので、pythonの外部ライブラリを合わせて使用することができます。
P5
P5は、ProcessingのAPIをPythonで実装したライブラリで、py5と違ってprocessing.jarを使わずに完全にPythonのライブラリで同等の機能を実装しています。
インタープリタはPy5と同様python3系のCPythonです。
基本的な書き方は次の通り。
from p5 import *
def setup():
size(480, 120)
def draw():
if mouse_is_pressed:
fill(0)
else:
fill(255)
ellipse(mouse_x, mouse_y, 80, 80)
run()
最初に from p5 import *をつけて最後のrun()でコードを実行します。py5のimported modeのようにライブラリの読み込みやrun()を隠すIDEのモードなどはないようです。
それ以外の部分は、py5と似ていてキャメルケースがスネークケースに変わります。mousePressedがmouse_is_pressedになるなど多少py5と違う部分もありますが、基本的にはほぼ同等です。
py5同様、Pythonのライブラリとして実装してあるので、pythonの外部ライブラリを使用することができます。
PyGameZero
PyGame Zeroは、上二つと違って、Processing由来ではなく、pythonで主に2Dゲームを作るための描画ライブラリであるpygameを、初心者でも使いやすく簡易なプログラムでかけるようにするライブラリです。インタープリタはPy5, P5と同様python3系のCPythonです。
基本的な書き方は以下の通り。
import pgzrun
WIDTH,HEIGHT=480, 120
mpos=(0,0)
mbuttons=set()
def on_mouse_move(pos,rel,buttons):
global mpos,mbuttons
mpos = pos
mbuttons = buttons
def draw():
if len(mbuttons)==0:
screen.draw.filled_circle(mpos,40,'white')
screen.draw.circle(mpos,40,'black')
else:
screen.draw.filled_circle(mpos,40,'black')
pgzrun.go()
Processing由来ではないので、使う関数が結構違いますが、基本的にはpgzrun().go()で実行開始で、draw関数に書いた内容を繰り返し実行するという点は似ています。また、py5と同様に最初のimport pgzrunや最後のpgzrun.go()を隠すPyGameZeroモードもあり、それを使うと次のように書けます。
def on_mouse_move(pos,rel,buttons):
global mpos,mbuttons
mpos = pos
mbuttons = buttons
def draw():
if len(mbuttons)==0:
screen.draw.filled_circle(mpos,40,'white')
screen.draw.circle(mpos,40,'black')
else:
screen.draw.filled_circle(mpos,40,'black')
PyGameZeroモードは、ThonnyやMu Editor (Code with Mu)などに標準機能として備わっています。
Processingでsize()関数でウィンドウサイズを決めていたのが、WIDTH,HEIGHTに値をセットすることでウィンドウサイズが決まります。また、マウスの位置などを取得する変数などはなく、on_mouse_moveという関数を定義するとマウスポインタが動作するたびに呼ばれるようになり、この関数内でマウスポインタの位置やボタンの状態を取得できます。
図形を描画する関数はscreen.draw.図形という形式で呼び出すようになっています。
Py5やP5と同様、Pythonのライブラリとして実装してあるので、CPythonの外部ライブラリを使用することができます。また、PyGameの上に薄いラッパーとして実装してあるため、PyGame Zeroにない高度な機能を使いたい時にPyGameライブラリの機能を使うことができます
最後に(ここの結論は完全変わりました。追記を参照)
Python Mode for Processingの代わりになるPythonライブラリについて紹介してきました。Processingをjar経由でそのまま使えるPy5, 同等機能をCPythonで実装し直したP5, pygameの簡易版ラッパーであるPyGame Zeroと三者三様です。
おすすめはというと、Processingの使い勝手を引き継ぎたいならP5, 将来的に高度なゲームを実装したいならPyGame Zeroがおすすめです。
Py5については本物のProcessing.jarを呼び出せますがPython経由でJavaを呼び出すという複雑なことをしているので、特に理由がなければ同等機能のP5で十分だと思います。
本物のprocessing.jarにこだわりがある場合やどうしてもimport文やコードを実行するrun()などのお決まりを書きたくなければPy5も選択肢になるかと思います。
他にもProcessingの機能をJavaScriptで実装してWeb上で使えるようにしたP5.jsをPythonでプログラミングできるようするPyp5jsなどもあります。