はじめに

どうも、須貝です。Yarukinai.fmでも度々触れているのですが、僕は今頃Splatoon2の「サーモンラン」というシャケをしばくゲームにハマっています。

すごく簡単に言うと、4人のプレイヤーが協力して敵(シャケ)を倒し、入手した「金イクラ」というアイテムを制限時間内で決められた個数集めるゲーム(バイト)です。制限時間内で金イクラの個数がノルマに達していなければ失敗。もしくは制限時間内でプレイヤーが全滅すれば失敗となります。

ルール自体は非常に簡単なんですが、ステージや特殊なイベント、与えられる武器、難易度など様々な要素が絡み合って非常に攻略しがいのあるゲームとなっております。難易度(「キケン度」という)が上がると本当に難しくてぜんぜんクリアできないこともザラでして、10回やって2、3回しかクリアできないとか普通にあるんです。本業が終わった後に夜な夜なシャケをしばくバイトに勤しむ私としては当然「もっとクリアしたい…」と思うわけですが、漫然とバイトしていてもそんなに上達速度は上がらんだろうなと。結果を真面目に分析しないと改善できないなと考えるに至った次第であります。

じゃあどうやったら自分の戦歴(いわゆる「バイトのきろく」)をいい感じに分析できるんだよ、ということで試行錯誤した顛末をここに記しておきます。まあタイトルでだいたいわかるんですけど。

Salmoniaは必須

まず、戦歴である「バイトのきろく」自体はNintendo Switch Onlineというアプリで確認できます。
しかしこれをいちいちどこか別の場所に転記して分析とかいうことはさすがに手間なので却下です。 なんとかこのデータを自動的に取得できないもんかと調べて出会ったのが下記のツールです。

https://github.com/tkgstrator/Salmonia

こちらPython製のスクリプトでして、実行するとバイトのきろくが取得できます(と、同時に https://salmon-stats.yuki.games/ に結果がアップロードされる) jsonというディレクトリ配下に1820.jsonといったファイルが作成されます。1試合1ファイルとなってます。中身はこんな感じです(抜粋)。

$ cat json/1702.json | jq .my_result
{
  "weapon_list": [
    {
      "id": "1010",
      "weapon": {
        "id": "1010",
        "thumbnail": "/images/weapon/626210255f99cb22bee1eded39457c51aa9622aa.png",
        "image": "/images/weapon/1041dbdd11b3036671148d47c2e0798cecf3dba2.png",
        "name": "スプラローラー"
      }
    },
...略
  ],
  "boss_kill_counts": {
    "15": {
      "count": 0,
      "boss": {
        "name": "モグラ",
        "key": "sakediver"
      }
    },
    "12": {
      "boss": {
        "key": "sakelien-shield",
        "name": "テッパン"
      },
      "count": 3
    },
...略
  },
  "golden_ikura_num": 10,
  "dead_count": 2,
  "help_count": 5,
  "ikura_num": 505,
...略
}

といった感じでNintendo Switch Onlineで表示されているよりも詳細なデータを取得できました。
作者の方には本当に感謝しています。最高。

で、これらのデータをどうやって分析にかけるんだというところを次でやっていきます。

AthenaとRedashで可視化する

最初はjsonを自前でパースしてRDBに突っ込むかーとか考えていました。しかしもっと楽したいなあと思ってAmazon Athenaを使うことにしました。唯一面倒だなと思ったのがCREATE TABLE文。これjsonから自動生成みたいなことはできないのだろうか? embulkのguessみたいな。

オオモノシャケを倒した数など、まだ追加できていない項目もあるのですが、主要なところをおさえたCREATE TABLE文が下記です。インデントが適当ですいません。

あとはクエリを書くだけなのですけど、ゆくゆくはグラフも描画したいと思い使い慣れたRedashをローカル環境で立ち上げました。

Redash

まだ回数が少ないんでもっとデータを集めたいですね。
上記の画像にもあるイベント・潮位別のクリア率を調べたところ、満潮グリルでのクリア率が50%と非常に低いことが初めてわかりました。いやあ僕はこういうことがやりたかったんですよ。満足満足。

参考までに雑クエリを載せておきます。

おわりに

というわけでサーモンランのバイトのきろくをサクッと分析するための足がかりを用意することができました。これらの分析結果を元にして精進していきたいと思います。マクロな視点での分析はこれでいけるなという手応えを感じつつ、より具体的なプレイスキルの改善については別途キャプチャボードを購入して終始録画状態でバイトして振り返りをする、といったことをやりたいと考えています。機会があればそちらについてもお伝えできればと思います。ではでは。