ゲームのデータが毎日更新されるようにした話.GitHub Actionsでdotnet-scriptを走らせる話.

このまえ変なゲームを作りました. friendsea.hateblo.jp

ゲームジャム版は9/25で一旦頒布終了なのですが,10/15からの博麗電脳試遊会向けに「集計データを毎日更新するバージョン」を作りました. この「集計データを毎日更新する」っていうのををGitHub Actions上で走るようになってます.

方法

ゲームルールとしてはpixivのレスポンス内容を参照してるだけなので各クライアントが直に取りに行くこともできますが,pixiv側要因でうまく取れなくなった場合に開発者(ぼく)が何もできなくなっちゃいます. そこで,必要な情報だけまとめたCSVを用意してそれを見に行くようにしてます.

このCSVにpixivから取ってきた情報を書き込む処理を毎日走らせればよい. こうすればpixiv記事の内容が変わってうまくパースできなくなった場合もゲームクライアントはそのままでCSV更新処理のみで対応可能です.

締め切り時点で未完

博麗電脳試遊会の締切は10/2だったのですが,その時点ではツイートの通り「起動時に取得」のとこしかできてません. 当日夜まで何もしてなかったのですが,情報ソースを内部からCSVに変更する対応だけやって提出してます. 締切後になんとかして「CSVを定期更新する仕組み」ができれば良しと考えてますがめちゃくちゃ見切り発車ですね.

このため,定期更新の仕組みの都合でどこにCSVをホストするか未知の状態でした.そこで,ゲームに取得先を直に持たせないようにしてます. まずは設定ファイル(これはjson)を取りに行って,そこに書いてあるURIからCSVを取得するようにしてます.CSV更新の仕組みができたらそれに合わせて設定ファイルを一度だけ手動更新して完成という魂胆ですね.

GitHub Actionsとdotnet script

定期更新の集計スクリプトGitHub Actionsで走らせてます.今回はじめて触ったけど雑に何でもできて便利. 集計スクリプトdotnet-scriptで書いてたので「コレを動かせる環境あるのか...?」というのが心配でしたが下記のようにすれば動きます.

    steps:
    - uses: actions/checkout@v3
    - name: Setup .NET
      uses: actions/setup-dotnet@v3
      with:
        dotnet-version: 6.0.x
    - name: Install detnet-script
      run: dotnet tool install -g dotnet-script
    - name: UpdateData
      run: dotnet script CollectData.csx tags.csv.tags

actions/setup-dotnetGitHubの公式アクションでdotnet環境を用意してくれます流石にdotnet script関連のアクションはなかったですが, 普通に環境作る場合と同様にdotnet tool install -g dotnet-scriptを叩いてやればよいだけでした. その後CollectData.csxで集計してます.

おしまい

集計処理はかなり非効率な書き方してて10分ほどかかるのですが,GitHub(Microsoft?)が富豪なので無課金で月2000分使っていいそうです. このゲームのデータ更新に毎日は過剰だろとも思うけどタダなのでいくらやってもいいですね. GitHub Actions便利なのでまた使う機会あるかも.