AI時代にレトロゲーム開発、が新しい。

AI時代にレトロゲーム開発、が新しい。

アイキューマガジンVol.10「Pyxel - 大人も夢中! AIでゲーム開発」はすでにお読みになられましたでしょうか!note版・ペーパーバック版・直販ストアのPDF版それぞれ好評配信中です。本日は、特集にご協力いただいた Pyxelの開発者 北尾崇さん (@Kitao) のご寄稿「レトロゲームエンジンの未来・Pyxelのこれから by 北尾崇」を特別にリポストで無料にて公開いたします。最新機能、MMLについても解説やコードが掲載されています。Pythonでいつか夢見た「ゲーム開発者」になりたい人に届きましたら幸いです。

 

レトロゲームエンジンの未来・Pyxelのこれから by 北尾崇

Python向けレトロゲームエンジンPyxelは、「気軽に楽しくプログラミング」をコンセプトに2018年に誕生し、そのシンプルかつレトロな仕様とツール同梱の手軽さから、世界中のユーザーに親しまれています。

Pyxelはユーザーからのフィードバックを受けながら、アーキテクチャの改良や新機能の追加が進められ、リリース当初の想定を大きく超えた形で、ゲーム開発やプログラミングをより自由に楽しめる環境へと進化を遂げました。

本記事では、「レトロゲームエンジンの未来」をテーマに、まずPyxelのこれまでの歩みを振り返り、2025年に追加された最新機能である「MML」の概要や使い方、そして今後の開発の構想について紹介していきます。

これまでのPyxel

Pyxelの開発は、決して平坦な道のりではなく、試行錯誤と挑戦の連続でした。 それはまた、ユーザーコミュニティと対話を重ねながら、「本当に求められているものは何か」を探り続ける工程でもありました。

そうした積み重ねの中で、機能の充実や環境の整備が進み、Pyxelは次のステップへと進もうとしています。

本章では、Pyxelのこれまでの歩みをたどり、現在の姿を明らかにします。

Pyxelのアーキテクチャ変遷

Pyxelは、「もっと手軽で直感的に、ゲーム制作やプログラミングを楽しめるツールがあればいいのに」という思いから生まれました。

ゲーム開発にはUnityやUnreal Engineといった高機能なツールがありますが、それらは高性能である反面、手軽とは言えません。初期の学習コストも高く、学習用途には向いていませんでした。一方で、Pygameのような古いライブラリは機能が不十分で、PICO-8のようなファンタジーコンソールは制約が厳しく、さらにマニアックなLua言語が障壁となるなど、求めている環境はありそうで実際には存在しませんでした。

そこで、Pythonで手軽にゲームを作れる環境を目指し、Pythonと3DライブラリのPyOpenGLを用いたシンプルなゲームエンジンとして開発したのが、初期のPyxelです。しかし、実際に動かしてみると、処理速度がすぐに限界に達し、パフォーマンスの課題が浮き彫りになりました。そこで、描画を含むハードウェア制御の処理をC++に置き換え、動作を高速化したのが、第2弾のPyxelです。

ゲーム開発は、コードだけで完結するものではありません。特にグラフィックやサウンドの作成は不可欠ですが、手軽に扱えるツールがなければ、ユーザーの負担は大きくなります。そこで、本体ライブラリの開発と並行して、内製ツールである Pyxel Editor の開発も進めていました。しかし、機能が多岐にわたり実装に時間を要したため、リリースには間に合わず、後のアップデートで追加する形となりました。時間はかかったものの、結果としてドット絵やサウンドを直感的に作成・編集できる環境が整い、手軽さと作りやすさを向上させることができました。

さらに、Pyxelの発展において大きな転機となったのがWeb対応です。もともとPyxelはローカルのPC環境で動作するツールとして設計していましたが、「作ったゲームをもっと気軽に公開できるようにしたい」という思いから、Web上で動作させる方法を模索し始めました。

当初、C++をEmscriptenでWeb対応させることも考えましたが、対応プラットフォームが増えることでメンテナンスコストが膨らむ問題がありました。そこで、Web環境も他のプラットフォームと同列に扱えるようにしつつ、プラットフォームの増加による負担を抑えるため、内部処理をC++からRustに移行することを決断しました。この変更により、WebAssembly(WASM)対応がスムーズになり、Pyxelをブラウザ上で動作させる道が開けました。

このWeb対応の実現には、PyodideやMaturinなどのプロジェクトに関わる世界中の開発者の協力が大きな助けとなりました。彼らの尽力によって、RustとPythonの橋渡しがスムーズに進み、PyxelのWeb版はより実用的なものとなりました。

こうしてPyxelのWeb対応は実現し、ユーザーは自分の作品を簡単にシェアできるようになりました。それによってコミュニティが活性化し、Pyxelの利用者層も一気に広がることとなりました。

画像

そして、その広がりの中でついに、Pyxelを使った商用タイトルも登場するようになりました。最初は「手軽にゲームを作る」ことを目的にしていましたが、それが実際の市場にも受け入れられる形になったのは驚きでした。

画像

このようにPyxelは、シンプルさを大切にしながらも、時代に合わせて進化を続けてきました。

Pyxelは、誕生当初からシンプルさを大切にしながらも、ユーザーのニーズに応じて進化を続けてきました。その結果、単なる学習用ツールにとどまらず、幅広い用途で活用されるゲームエンジンへと成長を遂げたのです。

開発をめぐる「戦い」

Pyxelの開発は、ユーザーとのやりとりによって大きく支えられてきました。リリース後、多くの人がPyxelを使って作品を作り、共有してくれたことで、コミュニティが活発になっていきました。現在では、ユーザーの手によってゲームやツールの制作が盛んに行われ、公式サイトのユーザー作品集ページ(https://github.com/kitao/pyxel/wiki/Pyxel-User-Examples)には140以上の作品が掲載されています。

https://github.com/kitao/pyxel/wiki/Pyxel-User-Examples

こうした盛り上がりを目の当たりにすると、作者としてはやはり非常にうれしく感じます。ユーザー作品集ページに並ぶスクリーンショットを眺めていると、その熱気や、新しいものを生み出そうとするワクワク感が伝わってくるようです。

画像

一方で、ユーザーからの要望やフィードバックは、開発の方向性を考えさせられる場面も多々ありました。特に、「制約はあって良いが、自分がいらない制約はなくしてほしい」というリクエストは頻繁に届きました。例えば、

  • 色数をもっと増やしてほしい

  • 同時発音数をもっと増やしてほしい

  • 衝突判定などのゲーム用の機能を追加してほしい

といった声です。これは開発サイドとしては非常に悩ましい問題でした。Pyxelは「シンプルであること」を大切にしているため、無制限に機能を追加するわけにはいきません。しかし、一部の制約を緩和することで、より多くの人が便利に使えるようになる可能性もあります。

そこで、Pyxelの設計方針を大きく変えずに、柔軟性を持たせる工夫を行いました。例えば、色数や同時発音数の制約は残しつつも、ユーザーが独自のパレットや音色を再定義できる仕組みを導入しました。これにより、Pyxelのシンプルさを維持しながらも、自由度を広げることができました。

一方で、ゲーム向けの高度な機能については、基本的に本体には組み込まず、付属のサンプルコードで実装方法のヒントを示したり、他のユーザーの作例を紹介する形で対応しています。

制約を回避する場合も、新機能を追加する場合も、Pyxelは「ユーザー自身が自分で『謎』を解いて、使いこなす」というスタンスを貫いています。

また、これはユーザーからの要望と言えるか迷うところですが、「Unityでできるから、Pyxelはいらない」という意見もたびたび寄せられました。(ちなみに、Unreal EngineやGodot Engineが引き合いに出ることはなく、今のところ必ずUnityです。ゲーム制作を志す人が最初にUnityを選ぶケースが多いからでしょうか?)

確かに、Unityのような高機能な3Dゲームエンジンを使えば、Pyxelでできることはすべて実現できます。しかし、それは「何を作るか」という観点での話であり、「どのように作るか」という点では大きく異なります。そして、こうした意見が出るたびに、「Pyxelの対象ユーザーは誰なのか? 何を提供するべきなのか?」を改めて考える機会になりました。

現在の結論として、Pyxelは「ゲーム開発を始めたい人のためのシンプルなツール」であり続けることを重視しています。高機能化ではなく、「ゲーム制作やプログラミングの楽しさを体験できる場」として、より直感的に創作できる環境を目指しています。また、このコンセプトを教育用途にも活かし、初心者が気軽にプログラミングを始めるきっかけになればと考えています。

Pyxelの開発では、互換性の維持という課題もありました。新機能の追加や内部仕様の変更を行う際、たとえ小さな修正でも以前と挙動が変わると、「以前のバージョンで動いていたコードが動かなくなった」というフィードバックが寄せられます。そのため、どのような変更でも従来の仕様を崩さずに動作を保証することに細心の注意を払っています。

ただ、Web環境では別の難しさがあります。ローカル環境なら開発側がバージョン管理をコントロールできますが、Webではブラウザや関連ライブラリが勝手に更新され、予期せぬ挙動の変化が発生します。このため、Web版Pyxelではユーザーの協力も得ながら、定期的な動作検証を行い、環境の変化に対応しています。それでも、ブラウザの仕様変更による影響は避けられず、互換性の確保は今も続く課題です。

こうした「戦い」を繰り返しながら、Pyxelは進化してきました。守るべきものを守りつつ、必要な変化を受け入れることが、開発において常に求められてきた姿勢です。

書籍がもたらした転機

Pyxelをより使いやすく、広めやすいものにするため、開発だけでなく情報提供の面でも試行錯誤を続けてきました。しかし、初心者にとって導入しやすい環境を整えるには課題がありました。体系的にまとまった情報が不足しており、個々の解説はあっても、全体をカバーする一貫したガイドがなかったのです。

情報提供の面では、2017年から月刊I/Oで一年間の連載を行い、Pyxelによるゲーム制作方法を紹介していました。しかし、誌面の制約もあり、記事単体では役立っても「一冊のガイド」としてのまとまりには欠けていました。

画像

そうした中、2025年に初心者向けの書籍を出版し、Pyxelの導入手順や活用方法を一つにまとめることができました。プロの技術ライター集団であるリブロワークスの協力もあり、技術的な内容をわかりやすく整理し、初心者でもスムーズに理解できる構成になっています。この書籍が「決定版の情報」となったことで、ネット上の断片的な情報に頼らず、誰でもPyxelを手軽に学べる環境が整いました。

書籍の出版により、Pyxelは開発・コミュニティ・情報の三つの要素が揃い、より多くの人が「気軽に楽しくプログラミング」できる環境が整いました。

こうした基盤が整った今、Pyxelは次のステップを考えるべき段階に来ています。教育分野への活用をさらに広げるのか、あるいは前言を撤回し、Unityに対抗するような新たなゲーム制作プラットフォームを目指すのか。これからの発展に向けた模索が始まります。

画像
ゲームで学ぶPython! Pyxelではじめるレトロゲームプログラミング
https://amzn.to/3CMqSjw

新機能「MML」の紹介

Pyxelは、ユーザーの要望を取り入れながら、より楽しく創作できる環境を目指して機能を拡張してきました。その一環として、2025年1月に「MML(Music Macro Language)」機能を追加しました。

MMLは、昔から使われているテキストベースの音楽記述言語で、ゲーム開発との相性が良い手法です。この章では、MMLとは何か、Pyxelでの利用方法、そして導入後の反響について紹介します。

MML(Music Macro Language)とは

MML(Music Macro Language)は、ホビーパソコンやゲーム機の音楽制作に使われていたテキストベースの音楽記述言語です。音の高さ(CDEFGAB)、長さ(L4 で4分音符)、テンポ(T120 で1分間に120拍)などをシンプルな記法で指定できるため、専用の音楽エディタを使わずにプログラムの一部として手軽にBGMを作成できるのが特徴です。

1980年代〜1990年代には、MMLはホビープログラマーの間で広く使われ、パソコン雑誌やパソコン通信の掲示板(BBS)でMMLによる楽曲が公開・共有される文化も生まれました。特に、8bit時代のパソコンやゲーム機では、低スペック環境でも扱いやすく、ゲームのBGMやデモシーンの音楽制作に欠かせない手法でした。

こうした手軽さと親しみやすさを活かし、PyxelにもMMLを導入することにしました。PyxelにはすでにGUIベースの音楽エディタが存在していましたが、テキスト入力だけで音楽を作れるMMLならではの魅力を提供できると考えたためです。

しかし、MMLには統一規格がなく、マシンごとに異なる「方言」が存在していたため、どの仕様を採用するか慎重に検討する必要がありました。長い歴史の中で記法や機能が多様化し、単純に統一することが難しくなっていたのです。そのため、Pyxelのコンセプトに合ったMMLとは何かを見極め、シンプルさと楽しさを損なわない形にすることを重視しました。

Pyxel版MMLの使い方

PyxelのMML機能の検討には、Pyxelを代表する商用ゲームタイトルである「Dungeon Antiqua」やPyxel付属の音楽生成ツール「8bit BGM Generator」の作者であるfrenchbreadさん(https://x.com/frenchbread1222)に全面協力をいただいています。

https://dungeon-antiqua.com/

 
 
 

frenchbreadさんの知見を活かし、PyxelのMMLは単なるファミコン音源の再現ではなく、当時のプログラマーが工夫していたテクニックを取り入れることを意識しています。例えば、音量の変化をエンベロープとして指定したり、音の発音時間やビブラートを手軽に調整できるようにするなど、チップチューンで頻繁に用いられた技法を活用できる設計になっています。

また、Pyxel版MMLは、従来のMMLの基本文法を踏襲しつつ、音量変化やビブラートの設定を簡潔に記述できる仕組みを導入し、より手軽に音作りを試行錯誤できるようになっています。

PyxelのMMLでは、音階や音の長さを指定してメロディを記述できます。例えば、以下のシンプルな文字列で「ドレミファソラシド」を演奏できます。

T120 O4 L4 C D E F G A B > C
この文字列の意味は次のとおりです。

  • T120:テンポを120に設定

  • O4:オクターブ4を指定

  • L4:音の長さを4分音符に設定

  • CDEFGAB:ドレミファソラシの音を演奏

  • >:オクターブを1つ上げる

PyxelのMMLでは以下の機能を使うことができます。

画像

基本的な仕様は他のプラットフォーム向けのMMLと共通ですが、Pyxel版MMLの特徴的な機能としてXコマンドによるボリュームエンベロープ があります。これは、単一の音量で鳴らすのではなく、時間経過に応じて音量を変化させることができる上級者向けの機能です。

この記事の続きはこちらから https://note.com/aicu/n/n1d80586d9568

Originally published at https://note.com on Mar 23, 2025.

AICU Japan

AICU Inc. AIDX Lab - Koto

Comments

Related posts

Search ComfyUIがHunyuan3Dをサポート