本稿では Go の 2D ゲームライブラリ Ebiten のこれまでの歴史をざっくり振り返ります。
タイムテーブル
Ebiten と Go
Go は半年ごとの定期リリースです。 Ebiten はリリース時期は決まっていませんが、一年に 2 回くらいのペースでリリースし続けています。 Ebiten 0.x の時期が長いですが、一度ある程度動くものができてしまって一旦満足してしまい、開発が止まっていました。今ではむしろ、やりたいことが無限に増えていっている状況です。
Ebiten は Go の新しい機能を積極的に取り入れています。たとえば Ebiten のモバイル対応も比較的早い段階から行ったと記憶しています。 gomobile 自体は 2014 年ごろに開発が始まっていますが、現状のように使えるようになった時期は実は定かではありません。 Wasm ポートは正式にリリースされる前から Ebiten 側で実装を開始し、最新の Go をビルドして実験するということを行っておりました。
Android、 iOS のサポートはかなり大変だった記憶があります。コンテキストロストを簡単に起こしてしまうため、自動的に復帰するロジックを組み込む必要がありました。償いの時計(Clock of Atonement) をリリースしたのは 2017 年 4 月で、 Go 製で初めてストアにでた商用アプリのはずです。
Ebiten とバージョン
Ebiten 1.9 以降の Ebiten 1.x に予定しているのは、 Metal 対応1、シェーダ対応などです。 Ebiten 2.0 では互換性を保たない API 整理を予定していますが、具体的なプランはありません。
Ebiten は Semantic Versioning を採用していて、メジャー番号が同じならば API 互換性は保たれています。ただし、厳密に言うと一部壊してしまっていて、たとえば 1.3 か 1.4 の段階で、 Run
関数の scale
引数が int
から float64
になったりしています。整数でないスケールはモバイル環境だと普通にありえる、というのが理由です。当初ユーザーが少なかったため、破壊的変更をしてしまいました。本当は良くないですね。反省。
Ebiten とはそもそも何なのか
そもそもの話、 Ebiten は「スーファミっぽいゲームを作る」ライブラリというポリシーで作られたものであり、実際 API の取捨選択もその基準で作られていました。ただ現在はそのポリシーは破棄されており、 Ebiten は「Dead Simple (死ぬほどシンプル)」な 2D ゲームライブラリというポリシーになっています。「スーファミっぽい」という目的を第一義にすると利用者が少なくなる、というのが理由です。目的が絞られていて尖っているというのは、自分だけの目的を達成するには手っ取り早いという良い面があります。しかし、それだけだとあまり利用者が集まらずフィードバックが少なくなり、クオリティが上がらないというジレンマがあります。
ポリシーが変わったとはいえ、 API をミニマムに保つという方向性は継承したままです。最近は実験的にポリゴン描画 API も入り、ますます普通の 2D ゲームライブラリっぽくなりました。
たとえ 2.0 やそれ以降になっても、このポリシーは変わることはないでしょう。たとえば 3D 化とかそういった方向は今の所全く考えられません2。
付録・タイムテーブル詳細
日付 | 出来事 | 備考 |
---|---|---|
2012-03-28 | Go 1.0 リリース | |
2013-05-13 | Go 1.1 リリース | |
2013-06-15 | Ebiten 最初のコミット | |
2013-12-01 | Go 1.2 リリース | |
2014-06-18 | Go 1.3 リリース | |
2014-12-10 | Go 1.4 リリース | |
2015-01-05 | Ebiten 1.0.0 リリース | 当時は macOS でしか動かなかった。 |
2015-01-25 | Ebiten 1.1.0 リリース | GopherJS (Chrome/Firefox のみ) |
2015-08-19 | Go 1.5 リリース | |
2016-02-17 | Go 1.6 リリース | |
2016-02-28 | Ebiten 1.2.0 リリース | ゲームパッド、オーディオ |
2016-05-14 | Ebiten 1.3.0 リリース | Windows、 Linux、 Ogg/Vorbis、 Wav |
2016-08-15 | Go 1.7 リリース | |
2016-09-03 | Ebiten 1.4.0-rc1 リリース | Android、 iOS |
2017-02-16 | Go 1.8 リリース | |
2017-04-29 | 償いの時計リリース | |
2017-06-09 | Ebiten 1.5.0 リリース | FreeBSD、 Safari |
2017-08-24 | Go 1.9 リリース | |
2018-02-03 | Ebiten 1.6.0 リリース | MP3、 文字描画、フルスクリーン、 Edge? |
2018-02-16 | Go 1.10 リリース | |
2018-05-14 | Ebiten 1.7.0 リリース | 自動テクスチャアトラス |
2018-08-24 | Go 1.11 リリース | Wasm |
2018-10-18 | Ebiten 1.8.0 リリース | Wasm、 ポリゴン、マルチモニタ |