Android ユーザーでも Splatool.net で対戦分析したい

これは Splathon Advent Calendar 2019 の 12 日目の記事です。

昨日はつぼさんの スプラトゥーンの X パワー向上のきっかけになったこと でした。

Splatool.net とは

Splatool.net とはスプラトゥーンに関する様々なツールが公開されているサイトです。

いくつかあるツールの中でも対戦分析ツールが個人的にお気に入りです。以下の URL はサンプルデータを表示している様子です。
各プレイヤーの勝率やキルレなどが集計されており、プラベ後のふりかえりに重宝します。

https://splatool.net/analytics/chk.php?c=15347260365591&m=p

対戦分析ツールの使用方法にもある通り、json 形式で出力した イカウィジェット2 のバックアップデータをアップロードすることで、対戦の分析結果を閲覧できます。

Android ユーザーの悲しみ

イカウィジェット2はありがたいことに、iOS 版だけでなく Android 版 も提供されています。

iOS 版と Android 版の間に機能や UI の差はほぼありません。しかし、バックアップデータの形式は iOS 版と Android 版で差があります。具体的には Android 版はバックアップを実行すると .ikax という謎の拡張子を持つファイルが生成されます。 f:id:odan3240:20191212223814p:plain

Splatool.net の対戦分析ツールは、この ikax ファイルには対応していません。実際にサイトにも (もしAndroid版でも出力可能でしたら、ご指摘下さい) という注書きがあります。

Web アプリを作った

どうしても対戦の分析をしたかったので、先月中旬頃から謎の ikax ファイルを json ファイルに変換する Web アプリを開発していました。それがこちらです。

splatool-converter.firebaseapp.com

使い方

ikax ファイルを選択する

中央のアップロードできるところ (伝われ) をクリックしてローカルにある ikax ファイルを選択します。一般に ikax ファイルのサイズは数十 MB と大きめなことが多いので注意してください。あと Google Drive などクラウドストレージにある ikax ファイルのアップロードはエラーが発生して失敗するので、一度ローカルにダウンロードすることをオススメします。

f:id:odan3240:20191212225845p:plain

ikax ファイルをアップロードする

アップロードボタンを押下すると ikax ファイルのアップロードが始まります。30秒ぐらい時間がかかります。待ってください

f:id:odan3240:20191212230113p:plain

json ファイルをダウンロードする

アップロードが終わると直近100戦の対戦データが一覧で表示されます。json ファイルとしてダウンロードしたい試合についてチェックボックスを選択してダウンロードボタンを押下すると json ファイルがダウンロードされます。Android だと同時に10個までしかファイルをダウンロード出来ないようなので気を付けてください。

f:id:odan3240:20191212230601p:plain

仕組み

時間がないので箇条書きで済ませます。そのうちどっかで清書したいです。あとコードも公開したい...。

  • ikax ファイルは実は zip ファイル
    • file コマンドを実行するとわかる
  • zip ファイルの中には Realm 形式のファイルが入っている
  • ikax ファイル → json ファイルへの変換は Cloud Functions で行っている
    • Realm の JavaScript SDK はネイティブモジュールに依存しているのでブラウザで動かない
      • wasm に変換できればわんちゃんあるかも...?
  • ikax ファイルは Cloud Functions に直接 POST せず Cloud Storage にアップロードしている
    • Cloud Functions は1リクエストあたり 10 MB の制限がある
    • Cloud Storage へのアップロードをトリガーに Cloud Functions を実行している
  • Realm => json への変換はルールベース

終わりに

Splatool.net の対戦分析ツールは Android 版未対応だったので、これを何とかする Web アプリを作った話 & 紹介をしました。 11月中旬から開発を開始していたので、12月12日のアドベントカレンダーには余裕で間に合うやろwと思っていたのですが、基本的な機能の開発だけでギリギリになってしまいました。

今後も開発を継続する予定ではあるので、もしよろしければ使ってみてください!

明日は tellusium さんの「Middle League まとめを書こう書こうと思ってかけていないので Deadline Driven Development を実行する」です。tellusium さんと同じチームで Middle League に参加していたので個人的に楽しみな記事です。