CMSの外に置いたゲームの、遊んだ人数を数える
コードは正しかった。自分のIPが除外されていただけだった。
日本進化シミュレーション第16回 / 全16回目次
サイトには元々、アクセス解析の仕組みが入っている。
記事を読んだ人数も、今サイトを見ている人の数も、管理画面でちゃんと見られる。
ゲームを公開したとき、僕は当然そこにも同じようにプレイ人数が出るものだと思っていた。
出なかった。
ゲームは、記事とは違う道を通っていた
このサイトのアクセス解析は、CMSがページを描画する瞬間に、計測用のコードを自動で埋め込む仕組みになっている。
記事もお知らせも固定ページも、必ずCMSを通って組み立てられるので、この自動埋め込みが漏れなく効く。
ゲームだけは事情が違った。
Three.jsで作った1本のHTMLファイルとして、CMSを経由せずそのまま配信されている。
サーバーの設定で「実ファイルがあればCMSを介さず直接返す」という仕組みになっていて、まさにその通り素通しされていた。
CMS側の自動計測が、そもそも触れられない場所にゲームは立っていた。
ゲーム専用の仕組みは作らなかった
今後もゲームが増えることは分かっていたので、ゲームごとに専用の解析プラグインを作るのは避けたかった。
代わりに選んだのは、既存のアクセス解析プラグインに「対象の種類」を表す区分を一つ増やすだけの方法だった。
ページビューと同じ形のビーコンを、ゲーム側から直接送る。
起動時に1回、その後は45秒おきに、画面がバックグラウンドでない間だけ送り続ける。
違いは、送るデータに「これはゲームです」という印を一つ付けることだけ。
サイト本体の計測と同じ訪問者IDの仕組みに乗せてあるので、同一の人として数えられる。
この区分さえ付けておけば、解析プラグイン側は何も改修しなくても、合計にもゲーム別の内訳にも自動的に混ざる。
新しいゲームを増やすときは、送信元のパスを変えるだけで済む設計にした。
作ったはいいが、本番には一度も置いていなかった
この仕組み自体はローカルの開発環境ではちゃんと動いていた。
ところが後日、「アクセス解析にゲームの使用状況が追加されていない」という報告を受けて確認したところ、そもそもゲーム本体もこの解析プラグインの改修分も、本番のサーバーに一度も配置していなかったことに気づいた。
ローカルで動作確認まで済ませて満足してしまい、本番への反映という最後の一歩を抜かしていた。
関係するファイルを6つ、本番へ配置した。
配置したのに、まだ記録されなかった
ファイルを置いて、自分のブラウザでゲームを開いて確認した。
それでもデータベースには何も記録されない。
コードのどこが間違っているのか、また一から追いかけ始めた。
けれど今回は、コードのバグではなかった。
自分のIPが、最初から除外されていた
このサイトの解析には、開発者自身のアクセスでデータを汚さないための除外リストが元から存在していた。
自分がふだん作業している回線のIPアドレスが、その除外リストにちゃんと登録されていた。
つまり、コードは正しく動いていた。
自分のアクセスをデータベースに記録しないという、意図した通りの仕組みが働いていただけだった。
バグを疑って何十分も費やしたけれど、実際には「正しく除外されている」ことの確認作業になっていた。
「反映されない」という報告の裏には、いろんな正体がある
この一件で覚えたのは、動作検証をするときに、まず自分の送信元IPを確認する習慣だった。
除外リストと一致していれば、記録されないのは失敗の証拠ではなく、正しく動いている証拠になる。
コードを疑う前に、まず自分がその機能の対象から外れていないかを確認する。
当たり前のようで、原因不明のバグを追いかけているときほど忘れがちなことだと思う。
※運営者が個人で書いているnoteです。