はじめに
はい,前回の記事の続きです.
前回の記事では,「おそらくバグって投票できてない」という想像の域を出ないことを書いて終わりにしていました.
そこで,アンケートをとってみたので,まずその結果を分析してズッコケるところから始めます.
その後,AIと共に、AIの指示に従って修正を加えて直していこうとしたらAIがエラーコードしか吐かない意地っ張りAIになって泥臭いデバッグ作業をする羽目になった話です.
まずアンケート分析
注意点があって,これはパッとお願いしたものなのでクラスの半分くらいしか回答していない点に注意です.

利用者の割合です.ほぼ皆が使ってくれているようです.「いいえ」の1人もiPadの電池切れか何かだったと思います.

実際に投票ができた人の割合です.予想以上にフィンガープリント認証が通っていないようです.半分がシステムのバグで投票できていません.

投票できた人のうち,バグが確認された人の割合です.この時点で全体数が9人にまで減るという異常事態が発生しています.正常に投票できた人の中にも半分の人がバグを訴えています.

参考程度の投票です.★レビューをつけてもらいましたが,まぁ予想通りでした.
分析・考察
まず,分析どうこうする以前にデバイスフィンガープリントによる認証に致命的なバグを抱えているようです.
半数がシステムにアクセスできておらず,早急に解決しなければいけない問題です.
どなたかこの手の認証システムに詳しい方がいらっしゃいましたら是非GitHubのIssueタブかQiitaのコメントでお知らせください.
私が助けを乞います.助けてください.
AIによるとこの認証は90〜95%の精度を誇るらしいですが.なぜですか?
直していこう
まず,AIの指示に従ってCookie認証を追加します.
すると,投票したらその後はボタンを隠す機構が外れなくなります.1回投票したらもう2度と投票できません.
というかCookieの名前をvotedにしやがったせいで投票対象が変わっても投票できなくなりました.
とりあえずCookie名をvoted_${id}として投票の部屋ごとにCookieを残すことにしました.
そして,Cookieに残られると投票ができないから直せと言ったら解決法が返ってきますね.またAIの指示に従って修復します.
あら不思議!Firebaseしか参照してねぇ!
いやさ,Cookieの意味考えてよ.
ということでCookieとデバイスフィンガープリントの両方が未投票となっている時のみ投票できるようにします.
今回も例によってAIの指示に従ってコードを弄ったのですが,投票のリセットが事実上機能しなくなりました.
いやさ,ちょっとは察しようよ.事細かにプロンプト書いてるんだからさ.
仕方がないのでもう1個Cookieを追加して,投票数が減っていたら強制的にCookie全消去からの再読み込みをかけるようにします.
AIの指示に従ってコードを弄ったはずなのに,またもややらかしてくれましたね.だからCookie名に投票ID入れてくれ.
なんやかんやありまして.先ほどのCookieを修正し,テストします.
あら不思議リセットできない!
…と思いましてコードを見てみると…
if (storedTotal < totalVotesNow) {
console.log('Cookieリセット検知: CookieのtotalVotesが現在より少ない');
clearAllCookies();
location.reload();
return;
}
変数について補足です.
storedTotalはCookieに保存された投票数,
totalVotesNowは実際の投票数です.
Cookie値が現在の値より大きければリセットされているはず,という考え方です.
ここは要改善.
そんなこともありますが…
storedTotal < totalVotesNow
現在の値が大きくなる方への更新はリアルタイムで反映されとるわい!
おわりに(怒)
AIは言うことを聞いてくれません.たくさん調教してやりましょう.
今回のAIはエラーコードしか吐きませんでした.人間を舐めないでくれ.使えなきゃ困るんだよ.
(ちなみに中の人は学校のiPadで開発を行なっているのでNode.jsとか.gitignoreは意味をなしません.これはひどい.高度な機能なんて夢のまた夢です.)