2024年5月15日
Odencat株式会社 CTO
星 一(ほし・はじめ)
ソフトウェアエンジニア。2009年にドワンゴでキャリアをスタートし、ドワンゴの関連会社やGoogle Japanなどを経て、2023年より現職。趣味では大学時代から2Dゲームエンジン開発に注力し、Google時代の2013年にEbitengineに着手し始める。2015年にVer1.0をリリース。カクヨムで「オレオ」と3文字だけ書かれた小説を手がけ、週間総合ランキング1位を獲得したことがある。
X
GitHub
Ebitengine公式サイト
Odencat公式サイト
シンプルな2Dゲームエンジン「Ebitengine」は、GitHub上において海外ユーザーを中心に約1万件のスター数を集める人気OSS。このエンジンを用いてつくられたタイトルの代表例には、ゲームスタジオ「Odencat」が2019年2月にリリースした「くまのレストラン」や、2023年3月発売の「メグとばけもの」などがあります。前者のダウンロード数は全世界で150万を超え、後者はゲームメディア「電撃オンライン」による優れたインディーゲームへの投票企画「電撃インディー大賞2023」にて1位に輝きました。
そんなEbitengineを開発しているのは、ソフトウェアエンジニアの星一(ほし・はじめ)さん。株式会社ドワンゴ、Google Japanなどでサーバサイドシステムやアプリ開発をしてきた彼ですが、本業でゲーム制作に携わったことはほとんどありませんでした。あくまで趣味の個人開発として、このエンジンを育ててきたのです。
そんな星さんは2023年4月、Odencat株式会社にCTOとしてジョイン。Ebitengineの改修を続けるかたわら、同社のゲームエディター開発などを手がけています。「ここまで皆さんにこのエンジンを使ってもらえて、僕は非常にラッキーだったんです」と語る星さんに、趣味による個人開発を10年以上も続けられた背景と、「趣味」を「本業」にできたわけを聞きました。
星:「Ebitengine」はプログラミング言語Goで書かれた2Dゲーム開発用のエンジンで、非常にミニマムな設計が特徴です。
グラフィックス機能に関しては、「矩形画像から矩形画像へ描画を転送する」という機能しか有さず、画像や画面はすべて同じImageという矩形画像のオブジェクトで表されます。
描画の際に位置、拡大率、回転角度、色味、合成方法などをオプションとして指定でき、基本的にはこれらのオプションによって画面をつくっていくことになります。
星:これは僕のnoteに詳しく書いていますが、要するに「ミニマムなAPIで、商業的にも成功できるようなハイクオリティーな2Dゲームをつくれる」ということに挑戦し、証明したいんです。
この挑戦は、自分の「美的感覚」を追求したいという根源的な欲求からきています。
わかりづらいかもしれませんが、僕は幼少のころから、「いかにシンプルなルールだけで、大きなことをできるか」というテーマに挑戦することに、「美しさ」を覚えています。
たとえば数学では、わずかな前提だけを使って複雑な定理を証明できると「美しい」と感じます。「シムシティ」(都市経営シミュレーションゲーム)をやるときにも、効率的に人口を増やすために、ひたすら同じ建物だけを並べていくことに夢中で、無駄を減らしたシステマティックな攻略をひたすら楽しんでいました。ソフトウェアの世界でも、そういう小さいルールに魅力を感じます。あまり余計な機能をゴテゴテつけたくないのです。
そして自分が「美しい」と思える挑戦を達成できると、うれしさや快感を覚えるのです。
星:僕は手軽にゲームをつくれるソフトウェア「RPGツクール」シリーズのファンで、「RPGツクールSUPER DANTE」(1995年発売)から「RPGツクールMZ」(2020年発売)まで買い続けています。ソフトウェアとしての出来や使い勝手に惚れ込み、「自分もゲームをつくるツールをつくってみたい」との思いを、高校生の時に出会った「RPGツクール2000」のころからぼんやりと抱き始めました。
でも具体的にどんなツールをつくろうかというアイデアまではなかったので、すぐにエンジンづくりに取りかかったわけではありません。ただ、やはり幼少からの癖で、「シンプルなルールでどれくらい大きいことができるか」に挑戦したいな、とは思っていた。
なので、高校時代から大学に入るまで、どういう仕組みならば、単純な設計を保ちつつ、さまざまなソフトを実装できるツールが実現できるか、ずっと考えていました。設計がシンプルだとゲームをつくる側としてもメンテナンスがしやすく、変数が少ないので将来にわたって問題も発生しにくそうだし、その方がいいなと。
そしてある日、「RPGツクールXP」(2004年発売)をいじり、描画に関わる画像のクラス設計を眺めてたときのこと。ふと「矩形画像から矩形画像への転送で、ゲームの描画に関する全てを実現できるんじゃないか?」とのアイデアが浮かんだのです。
3Dでは無理でも、少なくとも2Dゲームの視覚表現なら、それで全部まかなえてしまうんじゃないかと。何より、商用ゲームでさえつくれてしまうのではないかと。実現できたら美しいな…そう考えたら、気が付くとゲームエンジン開発をはじめていました。
星:「Ebitengine Discord」という開発者コミュニティーを運営しているのですが、そこには現在、約1500人のユーザーが存在します。毎週1~2作のペースで「こういうのをつくりました」という制作報告を目にしていますね。
星:いえ、本業でゲーム関連に触ったことはほぼないです。Odencatに入るまで、ゲームエンジンづくりはあくまで趣味として続けてきました。
2009年に新卒で入ったドワンゴやその子会社では、「ニコニコ動画」のサーバ管理や閲覧用アプリの実装を担当していました。2013年から9年ほど身を置いたGoogle Japanでは、Google ChromeのUX改善が主なお仕事。不具合修正や高速化などですね。
2022年にはフランスの「Jam.gg」という、クラウドゲーミングプラットフォームを開発する会社に入りましたが、僕の担当業務は、ストリーミングサーバの研究開発でした。結局、ゲームそのものに直接関わることはなかったのです。
星:正直、挫折したことはないんですよね。
星:本当にないんですよ(笑)。一応、「Goのバージョンを更新したらWindows 32bit環境で動かなくなった」「DirectX12を用いるとクラッシュするようになった」など、改修が難しいバグが過去に発生しました。ただ、それでエンジンの開発自体を断念しようと考えたことは一度もありません。
それらのバグも結局はソースコードや関連技術、APIなんかのドキュメントを読み込むことで、どれが原因か、どうすれば対処できるか、大まかなアタリが付けられるものばかりだったので、最終的には全て解決しています。
星:Ebitengineでは設計段階から一貫して、「現実的に自分ひとりでできる範囲」に開発領域を留めているからです。
例えば、3Dモデルの描画に手を広げることは絶対にありません。実装作業がいつまでも絶対に終わらないことが目に見えているからです。物理演算はもちろん、シェーディング、ライティング処理、メモリやリソースの管理と考慮すべき要素が増えすぎる。
同様に、UnityやGodotに備わっているようなGUIによるゲームエディタをつくろうとしたこともないです。あらゆる要素を統合して、ゼロから新たなUIをつくり、しかもユーザーが効率的に作業できる環境を設計するというのは極めて時間がかかるんです。
何度も言って申し訳ないのですが、開発の動機はあくまで「矩形画像から矩形画像へ描画する」というコンセプトの追求に根差してます。そこから大きく外れることがないからこそ、開発を諦めざるを得ないような未知のトラブルが起きることもないのでは、と考えています。
星:Ebitengineにおいては、その通りです。でも、僕はEbitengineを生み出す前、大学時代から新卒のころにかけても、いくつかゲームエンジンをつくっていました。RubyやC、C++等を用いて、いろんな技術的アプローチを試していたんです。
それらをつくっていた時はむしろ、手に負えないトラブルに何度も遭遇しては、開発を投げ出してばかりいたんですよ。さっき申し上げた「ゲームエディタに手を出して収拾がつかなくなる」というのは、Ebitengineをつくる前に実際に経験したことです。
星:趣味とはいえ、僕はゲームエンジンづくりには常に心血を注いできました。個人開発に全力で取り組んでいると、だんだん「自分が本気を出すとこれぐらいのものがつくれる」「ここまでいくと手に負えなくなる」というラインが肌感覚でわかってくるのです。そうなると、仕事でも趣味でも、開発の持続可能性を考慮して技術的な「無茶」をしなくなってくるんですよね。
だから、Ebitengineで挫折を経験したことがないというのは、その前に積み重なったいくつもの「挫折」の経験によって裏打ちされたものです。
星:「Ebitengineを使って面白いゲームを実際につくってもらえた」ことです。人目に広く触れるクオリティーの高いゲームをつくってくださったユーザーの皆さんのおかげです。
特に名前が広がり始めるきっかけになったのは、Daigo(Odencat代表・佐藤大悟さん)が2019年にリリースした「くまのレストラン」。僕にとってこのタイトルは、ブレイクスルー的な存在です。配信開始後2年で全世界100万ダウンロードを達成し、Go開発者のコミュニティでEbitengineが注目される契機となりました。
星:Daigoとは高校時代からの旧友です。
僕が2000年発売の「RPGツクール2000」にハマっていた当時、Web上には同作のファンコミュニティーがありました。Daigoとはそこで知り合いました。ある日オフ会で実際に顔を合わせたら、なんとなくウマが合ったんですね。以来、20年以上の付き合いです。
彼はゲームをつくるのが好きで、僕はゲームエディタをつくることに興味があった。「いつか一緒にゲームづくりの仕事がしたいな」なんて語り合ってましたね。
その後、Daigoはゲーム開発者となり、2016年のある日、「償いの時計」という作品をスマートフォン向けに移植することになりました。これはもともと、彼が「RPGツクール2000」で2004年に開発したフリーゲームです。
その移植にあたって、僕からの提案で彼が「Ebitengine」を使ってくれたんです。彼からすると、わざわざ未知のゲームエンジンを使うことにはなりますが、その代わりに開発者から直々にサポートを得られるというメリットがありました。一方僕も、Daigoのゲーム開発を手伝う代わりに、実運用環境でのフィードバックを受けてエンジンを洗練させられるし、タイトルがヒットすればEbitengineの名前が知られるチャンスでした。
利害の一致で生まれたこの関係は、その後も続いていった感じですね。
星:結局Daigoは、17年以降も、Ebitengineを使ってのゲームづくりを続けてくれました。「くまのレストラン」は2019年に大ヒットし、同年に法人としてOdencatを設立。Daigoがひとり社長を務める会社として、その後も「フィッシングパラダイス」などEbitengineを使ったゲームをリリースしてきました。
特に23年にSteamやXbox Series X|S、Nintendo Swtichに向けてリリースした「メグとばけもの」はかなりの好評で、それなりの売上が立ちました。
そしたら、なんとかエンジニアひとりを雇うお金ぐらいは捻出できるようになったそうで。Daigoから「Odencatで働かないか」と誘われたんです。旧知の友人と一緒にゲーム開発の仕事ができ、何よりEbitengineそのものを仕事にできる。迷わずジョインしました。
星:現在では、Daigoがつくりたいゲームにも適した新機能のEbitengineへの実装を進めつつ、社内で使われているゲームエディタの改修などを行っています。
星:「Ebitengineがうまく行って、飯が食えたらいいなあ」ぐらいのことは日ごろ考えていましたが、こうして本当に仕事にできるとは思っていませんでした。色々な例を見てきましたが、「Ruby」のMatz(まつもとゆきひろ・『Ruby』開発者)さんのような類まれな人を除いては、自分のOSSで「飯を食う」というのはとても難しいことなのです。自分がそうなれるとは、到底思ってもいなかったのが正直なところです。
その点で、僕は非常にラッキーだったと思います。自分ひとりで「飯を食える」というのはさすがに無理でも、「Ebitengineを触ってお給料がもらえる」なんて立場になれたのですから。ほぼほぼ、理想の働き方を現実に落とし込めた、そんな形となりました。
星:Ebitengineを世の中の2Dゲームエンジンのデフォルト的存在にしたいです。「2DゲームエンジンといえばEbitengineだね」と思ってもらえるようなプロダクトにしていきたいと思っています。
おこがましいようですが、Ebitengineは美的感覚の追求によって生まれた、僕の思想そのものですから、共感してくれる人は多ければ多いほどうれしい(笑)。そのためにはもっとツールを充実させたり、より多くのユーザーに届けるためにいつかはGUIによるエディタを実装したりと、現状の課題を拾い上げて地道にボトムアップしていくしかないと感じているところです。
それにOSSとしてのコントリビューターを増やすべく、開発ノウハウを明文化したドキュメントを増やしていきたいとも考えています。なんだか急に真面目な仕事みたいになっちゃいますが(笑)。でも、そうした地道な作業にもしっかりと力を入れていきますよ。「ゲームエンジンづくり」はいよいよ僕にとってのお仕事そのものになったので。
取材:田村今人
執筆:白石倖介
編集:田村今人・王雨舟
撮影:曽川拓哉
関連記事
人気記事