これは 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
という謎の拡張子を持つファイルが生成されます。
Splatool.net の対戦分析ツールは、この ikax ファイルには対応していません。実際にサイトにも (もしAndroid版でも出力可能でしたら、ご指摘下さい)
という注書きがあります。
Web アプリを作った
どうしても対戦の分析をしたかったので、先月中旬頃から謎の ikax ファイルを json ファイルに変換する Web アプリを開発していました。それがこちらです。
splatool-converter.firebaseapp.com
使い方
ikax ファイルを選択する
中央のアップロードできるところ (伝われ) をクリックしてローカルにある ikax ファイルを選択します。一般に ikax ファイルのサイズは数十 MB と大きめなことが多いので注意してください。あと Google Drive などクラウドストレージにある ikax ファイルのアップロードはエラーが発生して失敗するので、一度ローカルにダウンロードすることをオススメします。
ikax ファイルをアップロードする
アップロードボタンを押下すると ikax ファイルのアップロードが始まります。30秒ぐらい時間がかかります。待ってください
json ファイルをダウンロードする
アップロードが終わると直近100戦の対戦データが一覧で表示されます。json ファイルとしてダウンロードしたい試合についてチェックボックスを選択してダウンロードボタンを押下すると json ファイルがダウンロードされます。Android だと同時に10個までしかファイルをダウンロード出来ないようなので気を付けてください。
仕組み
時間がないので箇条書きで済ませます。そのうちどっかで清書したいです。あとコードも公開したい...。
- ikax ファイルは実は zip ファイル
- file コマンドを実行するとわかる
- zip ファイルの中には Realm 形式のファイルが入っている
- ikax ファイル → json ファイルへの変換は Cloud Functions で行っている
- Realm の JavaScript SDK はネイティブモジュールに依存しているのでブラウザで動かない
- wasm に変換できればわんちゃんあるかも...?
- Realm の JavaScript SDK はネイティブモジュールに依存しているのでブラウザで動かない
- ikax ファイルは Cloud Functions に直接 POST せず Cloud Storage にアップロードしている
- Cloud Functions は1リクエストあたり 10 MB の制限がある
- Cloud Storage へのアップロードをトリガーに Cloud Functions を実行している
- Realm => json への変換はルールベース
- 大変だった
- 少しでも楽するために Realm のスキーマから TypeScript のコードを生成するライブラリを作った
終わりに
Splatool.net の対戦分析ツールは Android 版未対応だったので、これを何とかする Web アプリを作った話 & 紹介をしました。 11月中旬から開発を開始していたので、12月12日のアドベントカレンダーには余裕で間に合うやろwと思っていたのですが、基本的な機能の開発だけでギリギリになってしまいました。
今後も開発を継続する予定ではあるので、もしよろしければ使ってみてください!
明日は tellusium さんの「Middle League まとめを書こう書こうと思ってかけていないので Deadline Driven Development を実行する」です。tellusium さんと同じチームで Middle League に参加していたので個人的に楽しみな記事です。