なぜ13年間、OSSを維持できたのか ― Ebitengineの設計思想と、プロジェクトを支え続けた「美的感覚」の追求のトップ画像

なぜ13年間、OSSを維持できたのか ― Ebitengineの設計思想と、プロジェクトを支え続けた「美的感覚」の追求

投稿日時:
星 一のアイコン

Odencat株式会社 / CTO

星 一

Xアカウントリンク
OSS応援企画寄付期間:〜7/29 上限金額:100,000

FindyがHajime Hoshi1応援につき100円寄付します

本記事では、「OSS応援企画」として記事の最後に「応援ボタン」を設置しています。1回の応援につき、Findyが100円をOSS団体などへ寄付し、エンジニアの成長とOSSの発展を応援する取り組みです。開発者の想いや取り組みに共感した気持ちが、OSSの支援にもつながっていく、そんな前向きな循環をFindyは目指しています。「応援ボタン」は、1日1回まで押すことができます。記事を読んで「いいな」と感じたら、ぜひボタンを押してあなたの応援の気持ちを届けてください。


はじめまして。星 一 (ほしはじめ) と申します。現在はOdencat株式会社でCTOを務めています。仕事でもプライベートでも、プログラミング言語Goを使ってゲームを開発しています。

私の主な活動の1つに、オープンソースソフトウェア (OSS) の開発とメンテナンスがあります。今回は、私が長年続けているプロジェクトについてお話しします。1つのOSSを長期間維持することについての軌跡です。

Ebitengineとは

私は「Ebitengine (エビテンジン)」というOSSを開発しています。これはプログラミング言語Go向けの2Dゲームエンジンです。

最初のコミットは2013年6月でした。それから数えて、2026年現在で13年間メンテナンスを続けています。現在では、このエンジンを使ってつくられたゲームが、コンソールゲーム機で10本以上リリースされています。個人でつくったインディーズゲームから、商業作品まで幅広く使われています。ありがたいことにEbitengineの開発にスポンサーしてくださる方までいます。改めて感謝申し上げたいです。

Ebitengineの最大の特徴は、非常にシンプルな設計モデルにあります。このエンジンの中では、すべての要素が「矩形 (くけい) 画像」として扱われます。

  • ディスクから読み込んだ画像ファイル
  • 画面には映らない一時的な描画領域 (オフスクリーン)
  • プレイヤーが実際に目にする最終的な描画結果

これらはすべて、内部的には同じ「画像」というデータ構造です。この「なんでも◯◯である」という考え方は、他の有名な技術思想に似ているかもしれません。たとえば、UNIXにおける「すべてはファイルである」という哲学です。あるいは、HTTPにおける「すべてはリソースである」というモデルにも近いです。

Ebitengineの描画.png
Ebitengineの描画は、矩形画像から矩形画像への転送として表される

ここで、オフスクリーンについて少し詳しく説明します。オフスクリーンとは、実際の画面には直接表示されない一時的な描画領域のことです。開発者はまず、この領域にキャラクターや背景を描画します。そのあとで、さまざまなエフェクトを加えることができます。画面全体を拡大縮小させて、カメラのズームインやズームアウトを表現することも可能です。

EbitengineのAPIは、このモデルに基づいています。基本的には「ある矩形画像から、別の矩形画像へ画素を転送する」という形式しかありません。すべての描画機能は、概ねこの考え方をベースにして構築されています。

もちろん、素朴にそのモデルを適用するだけでは、現代のゲームに必要なパフォーマンスが出ません。そのため、実際の内部実装はもう少し複雑です。しかし高い視点から俯瞰して見れば、すべては矩形画像の転送という単純なモデルに収まります。

13年間のモチベーションの源泉は「美的感覚の追求」

ひとつのOSSを13年間も維持できたのはなぜでしょうか。よく周囲からこのような質問を受けます。ひとつの答えとして、「趣味なのだから、いちいちモチベーションの維持なんて考えないでしょ」というのがあります。楽しければ勝手に続くものです。しかし、それでは説明として素っ気なさすぎるので、もう少し深く、自分の内面を分析して解説してみます。

私の場合は、「美的感覚の追求」を動機のコアに置いています。これは人によって全く異なる部分です。万人への正解ではありません。あくまで1人の開発者の体験談として、参考程度に読んでください。

人間のモチベーションには、さまざまな種類があります。思いつくものを挙げてみます。

  • 探究心 (真実や美的感覚を追求したい)
  • 承認欲求 (他人に認められたい)
  • 社会貢献欲 (社会に役立ちたい)
  • 親和欲 (他の人とコミュニケーションを取りたい)
  • 知識欲 (新しいことを知りたい)
  • 名誉欲 (名声を手に入れたい)
  • 対抗心 (他人に負けたくない)
  • etc.

これらの欲求は、どれか1つだけが100%になるわけではありません。また、どれかが完全に0%になることもありません。人間はこれらが複雑に混ざり合って動いています。

その中で、私は「美的感覚の追求」を1番の中心に据えました。この選択は、長期間の活動において非常に有利でした。なぜなら、他人の反応や外部の状況に左右されにくいからです。流行り廃りに影響されないため、精神的にとても健全な状態を保てます。

美的感覚をコアにするためには、条件があります。「自分が美しいと思うものは何か」を、常に問い続けなければなりません。

私には原体験があります。子供の頃から、不思議なこだわりがありました。「一貫性を持ったものが、規則正しくずらっと整列している様子」を見るのが好きだったのです。たとえば、子供の頃は文字コード表をじっと眺めて楽しんでいました。文字や記号がルールに従って並んでいる美しさに、強い魅力を感じていたのです。

Ebitengineのシンプルなモデルも、この感覚の延長線上にあります。「すべては矩形画像である」という一貫したルールにAPIが則ってる状態こそが、私にとっての「美しさ」なのです。

美しさだけでは続かない、実際に役立つものをつくる

先ほど説明した通り、モチベーションの配分は極端に偏るものではありません。美的感覚だけで趣味を続けることも可能かもしれません。しかし、それ単体ではあまり長くは続かないでしょう。自己満足だけで13年は長すぎます。やはり、実世界で役立つものをつくるという視点も重要になります。自分のつくったものが、誰かの役に立つ喜びは無視できません。

私の場合、大きな転機がありました。Daigoという、初期からEbitengineを実際に使ってくれる開発者が身近にいたのです。彼もたまたまゲーム開発の仲間を欲しているタイミングでした。そこで、私が彼の仕事を手伝うのと引き換えに、Ebitengineを彼のプロジェクトで使ってもらうことにしました。私に強い技術的こだわりがあることを彼は理解していましたし、それを覚悟のうえで取引してくれたのです。彼には感謝しかありません。OSSをつくるうえで、こうした人とのつながりは決して無視できない要素です。最終的には彼のつくった会社であるOdencatで私は働くことになるのです。

彼がつくるゲームという「実戦の場」で得られたフィードバックにより、エンジンのユースケースがどんどん広がっていきました。「商用ゲームがコンソール機器などで実際に動いている」という厳然たる事実は、開発の大きな支えになりましたし、他のユーザーへのアピールとして大きな役割を果たしたと思います。

bakemono.png
メグとばけもの (Copyright Odencat)

とはいえ、他人の要望を意識しすぎてはいけません。ここが難しいバランスです。ユーザーの意見に振り回されると、プロダクトの軸がブレてしまいます。あくまでコアにある価値観は、「自分が美しいと思うものは何か」でなければなりません。

時には、他の人の要望を断る必要も出てきます。これは少し心苦しい作業です。しかし、自分の判断基準に自信を持つしかありません。なぜなら、すべてのユーザーの要望を満たすことは不可能だからです。いくつか、具体的なお断りの例を紹介します。

まずは、「3Dグラフィックスでしか使わないような機能を入れてほしい」という要望です。Ebitengineは2Dゲームエンジンとして設計されています。そのため、3D専用の機能は基本的にお断りしています。それでも、ユーザーの中には2Dの機能を駆使して擬似的に3Dを表現する人が現れます。これにはいつも驚かされますし、作者冥利に尽きます。

次に、「ウィンドウを複数同時に出せるようにしてほしい」という要望です。ツール系のアプリケーションをつくる際には、マルチウィンドウの利便性はよく理解できます。しかし、これを許すとEbitengineの現在の単純なモデルが崩れてしまいます。そのため、今のところ対応するつもりはありません。将来再検討する可能性はあります。

最後に、「ゲームエディタをつくってほしい」という要望です。UnityやUnreal EngineのようなGUIエディタがあれば便利であることは、痛いほど分かります。しかし、ゲームエンジンそのものとは異なり、エディタというツールには「綺麗なモデル」としての正解が見えにくいのです。仕様が際限なく肥大化するリスクがあります。そして何より、単純に私自身の開発リソースが足りません。

美しさを保つための「断る勇気」が、結果としてエンジンの寿命を伸ばしています。

マーケティングは「目的」ではなく「手段」

OSSを継続するには、マーケティング活動も関係してきます。これは、他の人に使ってもらう機会を増やすための活動です。具体的な活動としては、次のようなものがあります。

  • Xなどでの定期的な宣伝
  • Redditなどの海外掲示板への投稿
  • YouTubeなどへの動画投稿

健全なマーケティングは、プロジェクトを活性化させるために必要です。しかし、目的を見失うと危険です。たとえば、「GitHubのスター数を増やすこと」を第1の目的にしてしまうケースです。数字だけを追い求めると、機能の追加や宣伝の方法が歪んでいきます。ウケを狙った奇抜な機能ばかりが増え、中身の美しさが損なわれます。

マーケティングは手段であり、目的ではありません。自分の本来やりたくないことを、宣伝のために無理にやるのは健全ではありません。ただ、ある活動をしたいと思った時、それが心からの欲求なのか、単なる一時的な衝動なのかを見極めるのは難しいものです。自分の価値観のコアを判断基準とし、それが本当に自分が心からやりたいことなのかどうかを見極めることが重要です。

世界と、無理なく繋がるコミュニティ設計

日本語で閉じると、世界に届かない

Ebitengineのコミュニティについて紹介します。私たちのコミュニティは、基本的に「英語」を公式言語としています。理由は明確です。英語で運営するのが、世界中で1番多くの人にリーチできるからです。逆に言えば、日本語がメインで使われている開発プロダクトは、海外のユーザーから敬遠される傾向があります。私自身も、海外のOSSを見る際、そのコミュニティが現地語だけで閉じている場合は利用を敬遠します。コミュニティが世界規模でスケールしない可能性が高いからです。

賑やかさより、作品が流れる場づくりを

私たちは活動の拠点としてDiscordサーバーを運営しています。現在、参加者は2000人を超えました。人数はそれなりに多いですが、規模の割には発言は静かでおとなしめです。チャットが常に激しく流れるような場所ではありません。その代わり、ユーザーがつくった作品がちょこちょこ投稿されます。よく使われるのはitch.ioなどのゲームプラットフォームです。そこでブラウザ向けに動くゲームとして共有されることが多いです。

こうしたブラウザベースのゲーム体験を支えているのが、EbitengineのWebAssembly (Wasm) 対応です。「ブラウザでURLを開くだけで遊べる」環境は、インディーゲームにとって強力な武器です。近年において、実行ファイルの配布が実質的に難しくなっているからです。そのプラットフォームで、自分がつくったエンジンが活用されているのを見るのは、何よりの喜びです。

半年に1度、20人規模。オフラインは欲張らない

また、オンラインだけでなくオフラインのイベントも開催しています。「EbitengineぷちConf」という名前のイベントを、半年に1回ほどのペースで実施しています。内容は、参加者が技術的な知見を持ち寄って、短いライトニングトーク (LT) をゆるく発表する会です。規模はあまり大きくしていません。1回の参加者は直近ですと20人程度です。この「無理のない範囲でやる」というスタンスが、継続のコツだと思います。イベント運営を無償で手伝ってくださる協力者の方々には、本当に感謝しかありません。

ブレない「軸」が長期開発の礎に

13年間、EbitengineというOSSをメンテナンスし続けることができました。振り返ってみると、モチベーションを保つ最大の秘訣は「美的感覚の追求」を活動のコアに置いたことです。「自分が本当に美しいと思えるモデルは何か」を、常に愚直に考え続けることが重要です。

もちろん、それだけがすべてではありません。実際に使ってくれるユーザーの存在や、適切な距離感のコミュニティ運営など、様々な要素が絡み合っています。それでも、ブレない軸を自分の中に1本持っておくことが、長期的なOSS開発において何よりの礎になります。

これからも私は、自分が美しいと信じるモデルを追求し続けていくつもりです。