集計機能を作ったのに、ページには何も出なかった

計算結果をみんなで見られるようにする機能を作り終えた。
ページを開くと、ショートコードの文字列がそのまま表示されていた。

手取りを増やそう!をつくる第10回 / 全12回目次

「結果を蓄積して、みんなで見られるようにしたい」という要望をもらって、統計ページを作ることにした。
年収と計算結果を集めれば、年収帯ごとの手取り率や、都道府県ごとの社会保険料の違いが見えてくる。数字がたまるほど面白くなる機能だと思った。

何を送るかより、何を送らないかを先に決めた

年収を扱う機能なので、プライバシーの設計を先に固めた。
年収は1万円単位に丸める。年齢は年代(30sのように)に落とす。氏名やメールアドレスは、そもそも入力欄を作らない。同意のチェックが入っていなければ、何も送らない。

丸めた値をそのまま送ると「額面-社会保険料-税」と手取りの数字が合わなくなる。だから丸めた額面から手取りを逆算して、整合の取れた値を送るようにした。
まったく同じ条件の結果は、SHA-256のフィンガープリントで見分けて、新しい行を作らずに人数だけ加算する。少人数のグループ(3人未満)は集計から外し、全体で10人に満たないうちは統計そのものを出さないことにした。

データベースを見ても、原因が見当たらない

プラグインを作り、テーブルを用意し、APIも通した。管理画面でプラグインを有効にして、統計ページを開いた。
そこにあったのは、集計グラフではなく

EVERYONE'S TAKE-HOME PAY

みんなの手取り

「手取りを増やそう!」で計算した方が、掲載を許可して送ってくれた結果を集計しています。保存しているのは年収(1万円単位)・都道府県・年代・家族構成の有無と計算結果だけで、氏名やメールアドレスなどは受け取っていません。

登録された条件

0通り

のべ人数

0

平均の手取り率

0.0%

まだ 0 人分しか集まっていません。10 人分をこえたら、年収帯ごとの平均や都道府県ごとの差を出します。
手取りを計算して、結果を登録する

という文字列そのものだった。ショートコードが素通りしていた。

まず疑ったのはプラグインの有効化状態だった。データベースの m_plugin テーブルを見ると、たしかに有効になっている。原因はそこには無かった。

コアの読み込み処理を追って分かったのは、このCMSのプラグインローダーがデータベースを見ていないという事実だった。
GC_PluginLoader::load() は、起動のたびに package/cache/plugins_active.php というキャッシュファイルを読んでいる。管理画面でプラグインを有効にしても、このキャッシュを作り直さない限り、フックは一切登録されない。

セットアップスクリプトの最後に、キャッシュの再生成を足した

有効なプラグイン一覧をデータベースから取り直して、キャッシュファイルをPHPの配列としてそのまま書き出す処理を、プラグインのセットアップスクリプトの末尾に足した。
これでプラグインを導入するたびに、キャッシュも自動で追従するようになった。

「有効になっているのに動かない」は、テーブルの中を何度見ても見つからない種類の不具合だった。
データの正しさと、それが読み込まれる経路は、別のレイヤーの話だと学んだ。

スタンプラリーに挑戦する 行った場所・気になる場所は、現地チェックインでスタンプに残せます。 みんなのコースを見てみる 会員が作ったスポット巡りのコースを都道府県から探せます。自分だけのコースも作れます。 運営者の個人noteも書いています AI活用やサイト運営で気づいたことを、もう少し個人の視点で掘り下げています。

※運営者が個人で書いているnoteです。

技術ブログ一覧へ戻る