せやかて工藤診断の自動化と通知

この記事で作ったものはiOSではあまり使えません!


Twitterではよく診断メーカーで作られた診断がトレンドに入っているが、服部平次ファンの間ではせやかて工藤診断が細く長く流行っている(私の観測範囲で)。これは「せやかて」を構成するひらがなからランダムに4文字を並べたものに「工藤」を付けた文字列を結果として返してくれるものだ。

診断結果例

(勝手に引用してごめんなさい)

4種類のひらがなを4個並べるので256通りの結果がありうるし、文字選択が完全ランダムだとすると「せやかて工藤」は0.4%くらいの確率でしか引き当てられない。だからこそ、運試しのような感じで長く楽しめる診断だ。

問題

この診断の結果は日替わりなのだが、忘れっぽいので毎日診断に行くことを忘れてしまう。「せやかて工藤」が出てくる機会を逃してしまっているかもしれない考えると勿体無い。そこで、診断結果の取得から通知までを自動化したいと思った。

そしてこれ↓ができた。

seyakate.netlify.com

やったこと

下の画像のような感じで動いている。

f:id:YaaMaa:20181029155518p:plain

Push APIのサポート

残念ながら、iOSはまだPush APIに対応していないので、ターゲットはAndroid、そのなかでもほぼChromeFirefoxのみになってしまう。

Push通知の代替としてEメールが挙げられるが、毎朝

件名: 今日の服部

本文: やててて工藤

みたいなのが受信ボックスに入ってるのはさすがに嫌なのでやめた。Pushoverというサービスもあるが、通知を受け取る側がユーザー登録しないといけない+デバイス毎に$4.99 USDということなので諦めた。

通知いらないとき

Lambdaからpushが来たら、大抵の場合は通知を出すけど、ユーザーが日付が変わってから既にサイトにアクセスして結果を見ていた場合、通知は要らない。なので、その場合は通知を出さずに終了したいんだけど、これだとPushSubscriptionを登録したときのuserVisibleOnly: trueという約束に抵触してしまう。公式文書によると、

Each time a service worker finishes processing a push message but no notification from this origin is currently visible and there is no open and visible page on this origin*, we check whether any of the past 10 push messages received from this origin also didn’t leave a notification on display (and didn’t have a page from the origin open and visible). If that is the case then we display a notification on the sites behalf so they user can understand that it ran.

ということらしい。Chromeから「このサイトが裏で何かしてるよ!」って言われるよりは自分で通知を出した方がましなので、silent: true(音とかバイブとか無効になる)にして通知することにした。

カウント

今までに診断した回数と、そのうち「せやかて工藤」やそれに近い結果が出た回数を知りたかったので、カウント欄を設けた。

f:id:YaaMaa:20181029023841p:plain

「惜しい」「ちょっと惜しい」はめっちゃ私の主観。同じ母音を持つ音は近く感じる(「てやかて」と「ややかて」はどちらも先頭の1文字が「せやかて」から外れているが、「てやかて」の方が惜しく感じる)ので、個々の文字の置換コストを以下のように設定して、その合計を距離とした。

f:id:YaaMaa:20181029030744p:plain

距離が1〜2のときは「惜しい」、3のときは「ちょっと惜しい」としている。

f:id:YaaMaa:20181024230903p:plain

ずっと同じような文字列を見ていると目と頭がおかしくなってきて、「"せやかて工藤"ってなんで"せやかて工藤"じゃないのに"せやかて工藤"にカウントされてるん??あ、"せやかて工藤"やからか」みたいなことが起こった。


これで、毎朝起きるとスマホに通知が届いているようになった。便利。

f:id:YaaMaa:20181029022645p:plain

私の他にも毎日せやかて工藤診断をしたい人がいらっしゃったら、どうぞお使いください。通知機能はAndroidGoogle Chrome / Firefoxくらいでしか使い物にならないけど、iOSでもサイトにアクセスした日の結果記録は溜まっていきます😄


それはそうと今日(2018/10/29)「yaamaa」って名前で診断したら「せやかて」出た。自分で作ったAPI経由だったから「あれ、ダミーの結果を返すようになってたっけ」って心配したけど本物だった。うれしい。