2019 年の Ebiten

[Ebiten](https://ebiten.org) は、筆者が趣味で開発した Go の 2D ゲームライブラリです。 2013 年頃から開発を続けており、今年で 6 年になりました。この記事では 2019 年に何があったのかを振り返ります。

まとめると:

- Ebiten 製のゲームが賞受賞できてよかった (くまのレストラン)
- gomobile などの比較的マイナーなツールはコントリビュートのチャンスである。
- ゲームライブラリは使われないとクオリティが上がらない。 2019 年は Ebiten のユースケースを増やすことができ、良いサイクルを回せたように思える。

(追記 2019-12-05) [英語版](https://ebiten.org/blog/2019.html) もあります。

# 1 月

- モバイルゲーム「くまのレストラン」のリリースに向けて淡々と頑張っていたような気がする。

# 2 月

- [くまのレストラン](https://daigostudio.com/bearsrestaurant)リリース。
  - ゲームのメイン製作者は Daigo という人。
  - [償いの時計](https://daigostudio.com/tsugunai)などと同じ共通エンジンを使用している。共通エンジンには Ebiten が採用されている。
  - 筆者の知るところによると 40 万ダウンロード程度達成したとのこと。
  - くまのレストラン以降、モバイル環境における様々な問題を対処する必要がでた (例: [Xperia で変な線が描画される](https://github.com/hajimehoshi/ebiten/issues/622))。今年はバグ報告と格闘する日々が続いた。
- [Go 1.12](https://blog.golang.org/go1.12) がリリースされたが、これには筆者が実装した [Syscall18](https://github.com/golang/go/issues/28434) が含まれている。これは OpenGL バインディングに必要だった。

![bears.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1911/7ec5c561-1ab3-c3a0-c8b0-1a9ab8a8fff7.png)
https://daigostudio.com/bearsrestaurant/ja/ より

# 3 月

- [Ebiten v1.9.0](https://github.com/hajimehoshi/ebiten/releases/tag/v1.9.0) リリース。新機能としては Windows で Cgo 不要になったことや、 macOS [Metal](https://developer.apple.com/metal/) など。
  - Metal 部分は [Dmitri 氏のソースコード](https://dmitri.shuralyov.com/gpu/mtl)を許可を得て拝借した。
  - Metal 版を実装した理由は、 [Apple が OpenGL を廃止するため](https://developer.apple.com/documentation/macos_release_notes/macos_mojave_10_14_release_notes?language=objc)である。
- [GopherJS の Go 1.12](https://github.com/gopherjs/gopherjs/issues/887#issuecomment-468898721) 対応を開始する。
- [ebiten.org をオープン](https://twitter.com/hajimehoshi/status/1108703311887097856)。

# 4 月

- [neguse](https://twitter.com/neguse) 氏が [cut’n’align](https://www.neguse.dev/post/184550335311/ludum-dare-44%E3%81%ABsubmit%E3%81%97%E3%81%9F) というゲームを作ってくださいました。
  - neguse 氏のフィードバックを受けて、オーディオ周りの改善などを行った。

# 5 月

- [フィッシングパラダイス](https://daigostudio.com/fishingparadise)リリース。
  - 「くまのレストラン」などと同エンジン採用。
  - 筆者の知るところによると 48 万ダウンロードくらいに達しており、今の所 Go 製モバイルゲームで最も DL 数の多いゲームとなっている (当社比)。
- [golang.tokyo #24](https://golangtokyo.connpass.com/event/129067/) にて「[Go (Ebiten) で実践モバイルゲーム開発](https://docs.google.com/presentation/d/e/2PACX-1vROsKT1RYDNWLI0dPEjH8EbQTMlwHfSHcKAF-7qwZ8mkFTL5WvdxKgBZ4V35-UHTHVAJeZVRVFu2SkV/pub?start=false&loop=false&delayms=3000&slide=id.p)」という発表を行う。

![fishing.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1911/79808fe4-3d5d-48d2-05c0-c6670db16625.png)
https://daigostudio.com/fishingparadise/ja/ より

# 6 月

- 「くまのレストラン」が [Google Play Indie Games Festival 2019](https://indiegamesshowcase.withgoogle.com/intl/ja_jp/) で TOP3 および Avex 賞を受賞する。おめでとうございます :tada: 

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">この度くまレスがIndie Game FestivalでTop3+Avex賞受賞となりました。Googleおよび関係者の方々、素晴らしいコンテストを開いていただきありがとうございました。Googleのインディーゲームへの本気度と愛がつたわるいいイベントでした！<a href="https://t.co/5HEJmOjy8Z">https://t.co/5HEJmOjy8Z</a></p>&mdash; Daigo (@daigo) <a href="https://twitter.com/daigo/status/1145124687019556865?ref_src=twsrc%5Etfw">June 30, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# 7 月

- [GopherCon 2019](https://www.gophercon.com/) にて [Mobile Game Development in Go](https://www.youtube.com/watch?v=zRgmXiO1el4) という内容の LT を行う。
  - 内容は Go でもちゃんとモバイルゲーム作れるんですよというもの。
  - なお Johan Brandhorst 氏の [Get Going with WebAssembly](https://youtu.be/Dxs4LGjmEL4?t=1240) という発表でも Ebiten が紹介された。
- Daigo により [Odencat 株式会社](https://odencat.com)が設立された。 Odencat 株式会社は現在のところ Ebiten 製モバイルゲームを制作する会社である。

<blockquote class="twitter-tweet"><p lang="und" dir="ltr"><a href="https://t.co/GHT4O7HSjg">https://t.co/GHT4O7HSjg</a></p>&mdash; Hajime Hoshi (星一) (@hajimehoshi) <a href="https://twitter.com/hajimehoshi/status/1166358133092081665?ref_src=twsrc%5Etfw">August 27, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# 8 月

- [gomobile の Go modules](https://github.com/golang/go/issues/27234#issuecomment-518233673) 対応を開始する。
  - GopherCon で [Austin 氏](https://github.com/aclements)らと話して「やってみれば?」と言われたのがきっかけ。
  - Ebiten は gomobile のヘビーユーザーであり、 Go modules 対応は必要不可欠である。そこで筆者は実装者として立候補した。

# 9 月

- 筆者の思いつきで[「海老天パーティー」が催される](https://twitter.com/hajimehoshi/status/1171018049039634432)。
  - 前職同僚の皆様に諸々祝っていただきました。ありがとうございます!
- [Go 1.13](https://blog.golang.org/go1.13) リリース。
  - [`syscall/js` の破壊的変更](https://github.com/golang/go/issues/31980)が含まれていたが、正式リリース前に Ebiten は対応済みである。
  - なお Go 1.14 でも[別の破壊的変更](https://github.com/golang/go/issues/35111) (`js.Value` 同士が `==` で比較不可能になる) が含まれる予定であり、対応が求められている。

# 10 月

- [OpenDiablo2](https://github.com/OpenDiablo2/OpenDiablo2) が Ebiten を採用する。
  - Ebiten 採用前は C# だったり、いろいろ転々としていた模様。
  - OpenDiablo2 は Diablo2 のオープン再実装プロジェクトであり、リソースはローカルにインストールされた公式 Diablo2 を拝借して動かす。
  - OpenDiablo2 は Ebiten をこれまでにないくらいヘビーに使い倒しており、パフォーマンスに問題が生じている。筆者は[開発者の Essial 氏](https://github.com/essial)と Discord で議論しながら、 Ebiten のパフォーマンス改善に努めている。

<img width="805" alt="diablo.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1911/c1eee43d-85a0-8250-2760-27af4f1c4ec9.png">
筆者のマシン上での動作確認

# 11 月

- [Ebiten v1.10.0](https://github.com/hajimehoshi/ebiten/releases/tag/v1.10.0) リリース。新機能としては iOS Metal や `ebitenmobile` コマンドなど。

# 12 月

- [スノーマン・ストーリー](https://odencat.com/snowman)をリリース予定。

![snowman.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1911/6f37c757-1a5a-9d9f-205c-aac0c7dfa18a.jpeg)
https://odencat.com/snowman/ja/ より

# 2020 年以降の予定

- gomobile の Go modules 対応が終わっていると良いな。
  - 終わったら Ebiten v2.0 が出せる
- 機能追加については、「実際に Ebiten を使っているプロジェクトが欲しているもの」が最優先になる
  - いまのところ OpenDiablo2 が必要としている [Pixel Buffer Object](http://www.songho.ca/opengl/gl_pbo.html) を活用したアニメーション機能とか?
  - 「くまのレストラン」の Daigo との情報交換も引き続きやっていく予定
- ユーザーを増やすために、サンプルやドキュメントを増やさないとなあ (いつも言っている)
  - ゲーム制作の敷居を下げる工夫として、簡単に使えるアセットの提供や、サンプルの充実などが考えられる。
- 技術書同人誌即売会で本出せたらいいね