『メタルギア』『ZOE』の開発者がレトロゲームエンジン「Pyxel」を作った理由【フォーカス】

2024年12月9日

レトロゲームエンジン「Pyxel」開発者

北尾 崇(Takashi Kitao)

元ゲーム開発者。コナミ在籍時に『METAL GEAR SOLID』(企画・ツール開発・CGムービー制作)、『ZONE OF THE ENDERS』(メインプログラマ・ゲームデザインユニットディレクター)、『ANUBIS ZONE OF THE ENDERS』(メインプログラマ・グラフィックエンジン開発)などに携わる。現在はエンターテインメント・テクノロジー企業でデジタル機器やゲーム向けのXR技術の研究開発を統括。2018年から個人活動として、オープンソースのゲームエンジン「Pyxel」の開発を手がける。2025年1月には技術評論社よりPyxelの入門書籍「ゲームで学ぶPython! Pyxelではじめるレトロゲームプログラミング」が発売予定。
X
Pyxel

レトロゲームエンジン「Pyxel」は、GitHub上で1万5000以上のスターを獲得しているOSS。ドット絵エディタ、サウンド制作ツールなどを備えつつ、Pythonを使ったシンプルなAPIで簡単にレトロゲームづくりができることを特徴とします。

▲Pyxelに備わった、ドット絵エディタ

開発者は、日本のエンジニア・北尾 崇(Takashi Kitao)さん。彼は1998年〜2002年までコナミ(現コナミデジタルエンタテインメント)社に身を置き、ステルスアクションゲーム『METAL GEAR SOLID』では開発ツールやCGムービー制作を、ロボットアクションゲーム『ZONE OF THE ENDERS』ではゲームデザイナーおよびリードエンジニアを務めていました。

コナミ退社後はソフトウェアエンジニア・リサーチャーとして働くかたわら、2018年に「Pyxel」を公開。現在もアップデートを続けています。大作3Dゲームの開発に関わってきた彼が、なぜ今、OSSとしてレトロな2Dゲームエンジンの開発を続けているのか? 「レトロゲーム時代の開発環境を現代に再現したい」と語る北尾さんの真意とは――。

優れた道具に囲まれた世代・制約と歩んだ世代

――早速ですが、なぜPyxelをつくったのかを教えてください。

北尾:自分を技術者として育ててくれた80~90年代のゲーム開発環境を、現代に蘇らせたいというのが理由です。

というのも、今の時代にプログラミングやゲーム開発に興味を持つ子どもたちは、ある意味で「恵まれていない」と感じているからです。

――「恵まれていない」といいますと…?

北尾:今は、高性能なパソコンやツールがそろっている時代です。ゲームづくりを例にとると「Unity」「Unreal Engine」といった優れたゲームエンジンがあり、高品質な3Dモデルやモーションも無料配布されています。これらのツールやアセットをうまく使いこなしながら、必要な箇所にプログラムを追加していくと、見た目も綺麗できちんと遊べるゲームをつくることができます。

また、商業ゲームの制作現場では、期待されるビジュアルクオリティやスケールの高まりに伴い、開発規模が巨大化しました。これを支えているのが、分業を中心とした開発プロセスの効率化です。例えば、メンバーに「爆発エフェクト」のプログラムを担当として割り振り、その領域に特化した作業をひたすらさせるという具合です。このように、担当を明確に分けることで、大規模なプロジェクトでもスムーズに進行できる仕組みが整っています。

しかし、技術習得の観点から見ると、これらが全て良い変化というわけではないと感じています。もちろん、ツールの機能を把握して使いこなすことや、特定の領域を極めて高品質なものをつくる技術は重要です。しかし、作業が局所化すると、開発者は自分の担当部分のみに集中するあまり、使用ツールや開発環境の内部動作を理解する機会は少なくなります。すると、ツールや環境がブラックボックス化したり、プロジェクト全体を理解しにくくなったりする。身につくスキルの応用が効きにくい状況になりつつあるのです。

技術や開発手法の進歩により、コンピュータやその中で動くOSなどの基本となるソフトウェアの仕組みについて知らなくてもゲーム開発を始められる現代では、技術をゼロから学ぶきっかけに出会いづらくなったのではないかと考えています。

――北尾さんの世代は、現代の環境とどう異なるのでしょうか?

北尾:当時は誰もが、今とは比べ物にならないほどの「制約」に身を置いていました。

80年代のホビーパソコン全盛期、小学生だった私はMSX2を使っていました。当時、ゲームソフトは高価で簡単に手に入るものではなく、手元で市販のゲームを再現して遊ぼうと考えました。しかし当時のハードは機能や性能が限られており、市販のゲームソフトを再現するには、コンピュータの仕組みを基本から理解する必要がありました。

当時GUIはなく、入門書を片手にBASICやC言語をCUIで打ち込むところがプログラミングのスタート地点でした。物理メモリの容量も少なかったため、メモリの制約をしっかり意識しなければ、まともに動作するプログラムをつくることもできません。

90年代になると、GUIベースのOSや3DCGの描画ソフトが登場しました。PCスペックは依然低く、単純な形の3Dオブジェクトをレンダリングするだけでひと苦労。ゲームがスムーズに動くよう、ポリゴン数を減らしたり、テクスチャを圧縮したりと、限界を探る試行錯誤を繰り返しました。

そして2000年前後、私がコナミにいた頃は、PS1からPS2への過渡期でした。ハードの進歩に対して、ベンダーが提供する開発キットはまだ成熟しておらず、ゲームに必要な基本的な機能や技術を自分たちで構築する必要がありました。アセンブリ言語で独自の計算アルゴリズムをつくったり、3D描画に使う三角関数をハードのスペックに合わせて最適化したり。コンピュータの性能を限界まで引き出す作業は大変でしたが、技術を深く理解する上で非常に貴重な経験でした。

このように、強い制約があったからこそ、コンピュータの仕組みを深く理解する必要があったのが、当時の技術者の特徴でした。そして、技術が進化して制約が減っていく中でも、各時代において自分なりに必死に取り組んでいるうちに、新しいプログラミング手法や3Dグラフィックスの基本原理、GPUの仕組みなどを体得していけたのです。

▲MSX規格のソニー・HB-75P(1984年発売) (画像:Wikimedia Commons 撮影:Eike Sauer CC BY-SA 3.0)

――北尾さんの世代と、現代の違いが、Pyxelの開発背景にあるのですか?

北尾:そうですね。

私は、ホビーパソコンに育ててもらえたおかげで、時代の流れの中で自然とスキルを身につけ、今も技術の仕事に携われているのだと思っています。また、コンピュータの原理的な理解が肌感覚として刷り込まれたおかげで、必要に応じて自分で新しい手法を開発することもできました。

一方、技術がそろった現在では、私たちの世代が自然と通ってきた技術習得の過程を体験しづらくなっています。また、コンピュータへの深い理解が自然と身に着く場が失われていることに対して「寂しさ」を覚えることもあります。

だからこそ、あの頃のホビーパソコンのような「制約」をゲームエンジンの中で再現し、未来の技術者となる人たちが楽しみながら知識を身につけられるようにしたい。そんな思いで、Pyxelを開発しました。

制約は“学びの入り口”でも“推進剤”でもある

――Pyxelではどうやって、どのようにしてホビーパソコンの時代を再現していますか?

北尾:徹底して「制約」を意識しています。

我々世代のデジタル環境の最大の特徴は、技術的な制約が多かったことです。あらゆる作業にコーディングが必要で、メモリや処理速度も十分とはいえず、できることが少なかった。

この制約をPyxelというレトロゲームエンジンで再現するために、様々な工夫をしています。具体的には、使える画像は256×256ピクセル、描画可能なカラーは16色、同時再生可能なサウンドは4つまでとし、ユーザーが扱えるリソースをあえてミニマムに制限しています。また、APIも引数を最小限に抑え、シンプルで直感的に扱える設計にしました。

このように、ツールや表現の幅をあえて制限することで、初心者が何をするべきか迷わずに済み、学習のハードルを下げる効果も期待しています。

▲Pyxelの基本仕様。

北尾:一方で、ゲームプログラミングに慣れた「手練れ」のユーザーにとっては、この制約が窮屈に感じることもあるかもしれません。そこで、よりリッチな表現や高度な機能を実現できる「上級者向けAPI」を用意し、大幅な拡張性も持たせています。

上級者向けAPIを使えば、使用可能なカラー数を自由に増やしたり、大サイズのサウンドデータを複数同時に再生したりすることができます。また、外部モジュールとして機械学習モデルを読み込み、AI分析を活用してプレイヤーの行動に応じた高度な動きを敵NPCにさせることも可能です。

▲Pyxelに仕込まれた、無数のAPI名

――制約と拡張性のバランスは、どのようにとっていますか?

北尾:上級者向けAPIを「隠し要素」のような位置づけで実装することで、「初心者の時にだけ制約がある」という状況を意図的につくり出しています。

上級者向けのAPIの名前は、Pyxelの型定義ファイルに全て記載されています。基本的なAPIの解説は公式マニュアル(README.ja.md)に含まれていますが、上級者向けAPIは仕様をどこにも明記していません。ただし、これらのAPI名は「PICO-8」(※1)や「TIC-80」(※2)など他のレトロゲームエンジンに倣っており、ゲーム開発経験が豊富な人なら「これはこういう機能だろうな」と直感的に推測できるようになっています。

この「一見、初心者にだけ制約がある」という設計が、学習ツールとしてのPyxelにおいて特に重要なポイントといえます。

(※1)「PICO-8」:2015年にリリースされた、レトロゲーム開発用の仮想コンソール。128×128ピクセルの解像度、16色パレット、4チャンネルの音声など、厳しい制約の中でゲーム開発を楽しむことができる。Lua言語を使用してプログラミングを行う。
(※2)「TIC-80」:2017年にリリースされた、オープンソースの仮想コンソール。PICO-8に影響を受けており、240×136ピクセルの解像度、16色パレット、4チャンネルの音声などの制約がある。Lua、JavaScriptなど複数のプログラミング言語に対応している。

――「初心者にのみ向けられた制約」が、なぜ重要といえるのでしょうか?

北尾:そこにこそ、エンジニアリングの原点があるからです。

私は、「工夫次第で、実はより高度なゲームをつくれる」という仕組みが、さらなる学びを生むと考えています。「制約を乗り越えてみたい」というモチベーションが、プログラミング学習を加速させるはずだと。

こう考えるのは、ホビーパソコン時代の私自身、制約がプログラミング学習のモチベーションになっていたからです。

ハード性能が全体的に未熟だった当時は、パソコン少年だけでなく、商業ゲームメーカーという「手練れ」側も、同じ制約の中で創意工夫を求められていました。どんなに最新の作品でも、ハードの機能を最大限に活用し、8bitや16bitのドット描写を駆使してつくられていたのです。それらは、利用する技術としては、私たちが家で自作していたゲームとそう遠くはなかった。

だから、あの頃のゲームは「がんばれば自分でも再現できるかもしれない。自分もつくってみたい」と思うことができました。もし今のように、高度な技術と大規模開発でつくられた大作3Dゲームが相手だったら、再現を試みる前に諦めていたかもしれません。

『グラディウス』『スーパーマリオブラザーズ』といった名作に出会うたびに「スペックの制約のなかで、なぜあのゲームはあんなことができるんだろう」と頭を悩ませていました。限られた色数でグラデーションを表現する技法など、商業ゲームの中に散りばめられた技術的な工夫を推測し、自分なりに再現しようと試行錯誤を重ねたものでした。

この「制約を乗り越えようとする」過程こそが、私のエンジニアリングの原点だったのです。

――「エンジニアリングの原点」が、「上級者向けAPI」とどのようにつながるのでしょうか。

北尾:Pyxelのライブラリ内には、Pyxelでつくったゲームのサンプルプログラムをいくつか入れています。その中には、こっそり上級者向けAPIを使った作品も含まれています。

初心者がPyxelを使い慣れてきたタイミングで、これらのサンプルを見返すと、「どうやってこんな表現ができるんだ?」と疑問を持つはずです。そしてその疑問が、Pyxelの仕様を自発的に調べるきっかけになります。

やがて上級者向けAPIの存在にたどり着くと、「これを使えば、自分にもこんな表現ができるかも!」という発見とワクワクが生まれる。そして、どうすれば使えるのかを自分なりに試行錯誤しながら理解していく。このサイクルこそが、プログラミングの醍醐味であり、初心者が成長する大きなきっかけになると考えています。

Pyxelは、この気づきと自発的な探求を通じて、段階的な成長を促すよう設計されています。

――そのようにして「原点」を現代に再現することが、「上級者向けAPI」の目的だったのですね。一方で、Pyxelの使用言語に、かつてのようなBASICやC言語ではなく、Pythonを選んだのはなぜでしょうか?

北尾:Pythonは初心者にも扱いやすい上に、拡張パッケージが豊富です。さらに、データ解析やAI開発などの最新技術にも幅広く使われており、将来的にも多くの分野で活躍する確率が高い言語だと考えたのが理由です。

実は、Pyxelをつくった背景には息子の存在もあります。彼が小学校高学年になった頃、私は彼が楽しみながらプログラミングを学べる手段を探していました。その中で、PICO-8やTIC-80といったレトロゲームエンジンに出会い、制約を通じて技術を習得できる仕組みに感銘を受けたんです。

ただ、これらのエンジンはゲーム開発の定番であるLua言語を採用しているものが多くて。もちろんLuaは素晴らしい言語ですが、せっかくなら、息子には将来もっと広い分野で使えるPythonを習得してほしいと考えました。そうして、Pythonに特化したPyxelを数年かけて開発したんです。

残念ながら、その後息子は漫画家の道に進み、結局Pyxelを使うことはありませんでした(笑)。しかし、最近では国内外の教育機関やプログラミングスクールでPyxelが採用される機会が増えており、とてもうれしく感じています。

悪ガキに“エンジニア魂”が宿る瞬間

――Pyxelを通じて、子どもたちには、どんな技術を身につけてほしいと思っていますか?

北尾:Pyxelがきっかけとなり、ゲームに限らず、プログラミングを楽しんだり、コンピュータに親しんだりしてもらえればうれしいと思っています。

最近、Pyxel開発や仕事を通じて教育の話を伺う機会が増えたのですが、近年では、小学校や中学校で児童生徒一人ひとりにPC端末が配布されるケースが増えているそうですね。これらのPCには、教育に関係ない機能やサイトをブロックするための制限が設けられているとも聞きます。

でも面白いことに、一部の子どもたちはコマンドプロンプトの活用やネットワーク設定の変更など、あの手この手で制限の回避を試みるそうです。フィルタリングを回避できるコマンドが見つかるとあっという間にクラス中に広まり、気がつけばみんなでYouTubeを見たり、フリーゲームサイトにアクセスしたりしている、なんて話も耳にしました。きっと、「制約」を突破した子が、クラスのヒーローになるんでしょうね。

――それは問題行動のようにも思えますが…

北尾:確かに、教育上は問題かもしれません(笑)。

でも、子どもたちは、可能性を見つけると制約を「ハック」しようとするものなのかもしれません。そういう話を聞くたびに、どんな時代でもエンジニアリングの原点は変わらないのだと感じます。

だからこそ、Pyxelを通じてこのエンジニアリングの原点を多くの子どもたちに体験してほしいと思っています。欲を言えば、普段使っているコンピュータやスマホをただのブラックボックスではなく、「どう動いているのか、なんとなくでもわかる」レベルで理解するきっかけになるとうれしいですね。

さらには、科学漫画『Dr.STONE』のように文明の利器が全て使えなくなるという究極の制約に直面しても、パソコンを再発明できるような知識と技術を持つレベルまで成長してくれることを願っています。私の周りにも、「やろうと思えばパソコンをゼロからつくれる」と自負する仙人のような人たちがいますが、そうしたマインドを次世代に繋げたいです。

Pyxelはまだ進化の途中ですが、これからはプログラミングコンテストやリアルイベントを開催し、ユーザーに触れてもらう機会を増やしていきたいと考えています。そこでの反応を元に、Pyxelをさらに改良していく予定です。

技術は進化し続けますが、その根底にある「エンジニアリングの精神」は普遍的なものです。Pyxelを通じてその精神を次の世代に伝えていけたら、これ以上の喜びはありません。

取材:田村 今人
構成:白石 倖介、田村 今人
編集:光松 瞳
撮影:曽川 拓哉

関連記事

人気記事

  • コピーしました

RSS
RSS