#スプラトゥーン2 のステージ情報が取得できるAPIを作りました

スプラトゥーン

Spla2 API – スプラトゥーン2のステージ情報API

Web API を作りたいとネタを探していたところに、ちょうどイカの波が押し寄せてきたので作ってみました。ぜひ使ってみて下さい。
この記事ではSpla2 APIシステムの裏側について書いてみたいと思います。

システム構成

主な構成はイカの通り。

  • Google Cloud Platforn
  • CentOS 7
  • h2o
  • MariaDB
  • Go言語

インフラ

個人的に最近お気に入りの GCP です。無料枠が余っていたのも理由の一つ。

OS

CentOS 7.3 を入れています。よく使っているので慣れているというのが理由です。

Webサーバ

nginx で作っていましたが、HTTP2 の ALPN に対応するのが大変そうだったので、h2o に初挑戦。特にチューニング等はしていませんが、早くていい感じですね。

データベース

Twitter のステージ情報bot (@splatoon_stage, @splatoon2_stage) で構築したものを流用しています。
データも全く同じものを使っているので、仮に片方が狂っていた場合はもう片方も同じく狂います。

Go 言語

バックエンドのプログラムはすべて Go で書いています。マトモに使ったのはこれが初めてですが、書きやすくて良い言語だと思います。
やっていることは複雑ではなく、DB からデータを引っ張って加工して JSON に吐くだけのお仕事。

データの取得元

肝心の情報をどこから取得しているのかですが……お察しください。イカプレイヤーの皆さんが普段見ているところと同じです。
そのため、突然取れなくなる可能性は大いにあります。

Zabbix の監視対象に追加して、更新がコケたら通知するように設定するのもアリかな。

任天堂(or はてな)さんが API を公開してくれるのが一番ですが、なかなか厳しい気がしています。
公式側が提供してしまうとサポートの負荷が高そうなので…… (分かる人だけ勝手にどうぞ、という訳にもいかないでしょうし)

SSL Labs A+

SSL の脆弱性診断サービスである SSL Server Test (Powered by Qualys SSL Labs) にて、最高ランク A+ の評価を獲得しました。

Spla2 APIのHTTPS評価

正確には、A+ になるまでサーバを弄ったりググったりしたのですが、何とか達成できました。先人の知恵に感謝。

今後について

急ぎで作ったため、フィールドはあるのに値は 空 な部分があるので、そこは早めに解消させます。
Page Speed Insights でも高評価を取りたいです。作っているときは満点でしたが、説明書きを詰め込むと低下してしまったので。

最終的には、FaaS を利用したサーバレスアーキテクチャで作り直したいです。(気力のあるときに)
不具合の発見報告や要望があれば、ぜひコメントや Twitter でお知らせください。私が喜びます!

2017/12/07 追記

  • サーモンランの情報も取れるようになりました。
  • Page Speed Ingishts で 99点 が取れました。
  • これからもがんばります。

Spla2 API – スプラトゥーン2のステージ情報API