180日の壁を超えたい

Android(Google Play Store経由)でゲームをプレイしていると、ひとつ大きな壁にぶつかる。有償アイテムが180日後に消えてしまう問題だ。調べてみると「資金決済法」という法律に関係しているらしい。

topcourt-law.com

運営側で対策してくれているゲームもあるが、私が主にプレイしているゲームは180日の壁がある。要望を出しても機械的な返答があるだけで更新される気配はない。「180日もあれば使い切れるだろう」と思われているのかもしれない。しかし私の手元には無償分の石が最高レアの天井で換算して2.5回分くらいある(最高記録。今はもう少し少ない)。だがこの状態でもお金は払いたい。だってこのゲームが好きだから。ずっと続いてほしいから。

ということで、自分で解決することにした。

仕様整理

まずはゲームの仕様を簡単に整理する。

購入

  • いわゆる「ガチャ」で使える石を購入できる
  • 有償分は購入日から180日で消えてしまう
    • 期限は石ごとに管理されている
    • (例) 6/1に買った石の期限は、9/1に新たに買ったとしても延長されない

使用

  • ゲーム内の石は無償分から先に消化される
    • 無償分を使い切ってからでないと有償分を使えない
  • 有償分のみを使う方法は以下の3つ
    • 1日1回限定のガチャ(有償分5個)
    • 月末に1回だけ引けるガチャ(有償分145個)
    • 年に1回だけ引けるガチャ(有償分145個×4種類)
      • いわゆるリリース記念イベントのガチャ
  • 有償分は、期限が古いものから順に消化される

期限管理

  • ゲーム内では有償分と無償分それぞれの個数を確認できる
  • ゲーム内で期限を確認する方法はない
    • 入手・使用履歴は閲覧できる
    • 無償分に紛れて有償分の履歴が消えてしまいやすい
  • 期限まで7日を切ると、ゲーム起動時に警告が表示される

ざっくり言うと、ゲーム内の仕様だけを頼りに確実に使い切りたい場合、手元には35個(1日5個×7日間)以上の有償石を持っていられない。運良く月末にかかれば一気に145個使えるけれど、それを見込んで月末に買ったら180日後は月末じゃなかったりする。

さらに、継続的に購入して期限がごちゃごちゃの状態では余計に訳が分からなくなってしまう。

有償分を使うために無償分を使い切るのも現実的ではない。推しを確実に引くために毎日コツコツ貯めているのだ。最高レア天井2.5回分は一朝一夕では取り戻せない(だいたい2年くらいかかった)。推しが引けずに使い切るならともかく、そうでない理由では使いたくない。

解決策

Google SpreadSheetとGoogle Apps Scriptを使った。

github.com

購入と使用のメモをもとに毎日期限をチェックして、危ない時はメールで通知してくれる。メールが届いた日は有償限定ガチャ(1回5個)を回せば無事に使い切れる、という寸法。

完全に自分用なので、他の人が使うにはちょっと親切ではない。いずれ改良して同じ悩みを持つユーザー向けに頒布しよう……かなぁ……?という考えはある。でもその前にゲーム内で期限が確認できるようになってほしい。でなければ有償分を先に使えるようにするか。

雑感

「エンジニアとして成長するには作りたいものを作るのが一番」という言葉に振り回されてきた。作りたいものと言われても特に浮かばないし、ちょっとした困り事はいつも誰かが先回りして解決してしまっている。それに乗っかるだけの自分が後ろめたいような、そんな感覚がずっとあった。

しかし自分にもついに「作りたいもの」ができた。だから作ってみた。確かに、GASは初めて触ったし、素のjsも久しぶりで、あれこれ壁にぶつかっては調べて乗り越えて、の繰り返しだった。

確かに成長したとは思う。何より「絶対に自分が使う」という確信があるから、途中で投げ出すという選択肢は生まれなかった。めちゃくちゃ困ってるからね。

でも、仕事で取り組んでいるプログラミングだって、滅多なことがなければ途中で投げ出したりしないんじゃないかな。なんでこんなもの作ってるんだろう……とげんなりしながらでも学べるものは学べる。

だから「作りたいものを作れ」は、多分、仕事の外で取り組む時に、自分を縛る枷、あるいは燃料の中でも一番単純かつ強力なもの、という位置づけなんだろうと理解した。作りたいものを作った結果、作りたいものがない状況も肯定できるようになった。そういう意味でも作ってよかったと思う。

でも公式に実装されるのが一番だよ~~~~だって細かい仕様分かんないもん。実装してくれ~~~~~頼む~~~~抱え落ちは嫌だ~~~~!!!(経験者)