yuu26's memo

試したことや技術的なメモを記録しています。まずは隔週程度の更新を目指します。

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

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

Web 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+ の評価を獲得しました。

f:id:yuu2634:20170810005651p:plain

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


今後について

まずは、元である splapi さんの仕様に追いつくように開発を進めていきます。

急ぎで作ったため、フィールドはあるのに値は 空 みたいな部分があるので、そこは早めに解消したいところ。


Page Speed Insights でも高評価を取りたいですね。作っているときは満点でしたが、説明書きを詰め込むと低下してしまったので。


最終的には、FaaS を利用したサーバレスアーキテクチャで作り直してみたいです。(気力のあるときに)


不具合の発見報告や要望があれば、ぜひコメントや Twitter でお知らせください。私が喜びます!


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