今回は水系の判定バグ修正と、開発効率化のためのツール作り、そしてカードUIの続きです。
水系を越えてしまうバグ
河川選択で「猫越川」を選んだら、表示されたのは「大場川水系 > 狩野川 > 猫越川」。猫越川は狩野川の支流で、狩野川自体が水系の本流。大場川水系の配下になるのはおかしい。
さらにひどいケースでは、静岡県の佐野川が青森県の奥入瀬川水系の配下になっていました。700km離れた河川が親子関係になるわけがない。
原因は、河川の親子関係を距離だけで判定していたこと。日本全国には同じ名前の川がたくさんあり、たまたま近くにある別水系の同名河川を親として選んでしまっていました。候補が1つしかない場合は、700km離れていてもそれを選ぶしかない、という状態。
48万件のメッシュ辞書で解決
アプリにはもともと、座標から水系名を1km精度で引ける48万件のメッシュ辞書が入っています。これまでは「辞書で親が見つからないとき」の補助としか使っていませんでした。
これをバリデーターとして活用するように修正。具体的には3層のチェックを入れました。
- 距離制限: 親候補が100km以上離れていたら即却下
- メッシュ水系の一致確認: 河川と親候補の座標からメッシュで水系を特定し、一致しない候補を却下
- ルート後処理: 辞書とメッシュの判定が食い違う場合の整合性チェック
変更は1つの関数に集中、約40行の追加で済みました。既存の仕組みを「フォールバック」から「バリデーター」に格上げしただけ。使える素材は手元にあったのに、使い方を変えるだけでこんなに効果が出るのかと驚きました。
テストデータを効率よく作る
開発が進むにつれて、テスト用データが大量に必要になってきました。でもアプリの通常フローでデータを作ると、4ステップのウィザードを全部埋める必要があり、1件作るのに1分以上。10件で心が折れます。
そこでデバッグメニューにテストデータ生成ツールを追加。河川選択だけ通常のUIで行い、日時・時間帯・釣法などはすべてランダム生成する方式です。

最初は全パラメーターを手動調整できるようにしたんですが、「テストデータに必要なのはバリエーションであって特定の値じゃない」ということに気づいて、ランダムに振り切りました。タイトルの先頭にランダムな絵文字をつけて、一覧画面で本物のデータと区別できるようにしています。
立場によって見せる情報を変える
前回作ったカードUIを、ユーザーの立場によって表示内容を切り替えるようにしました。
自分が主催するイベントのカードには、興味を持ってくれた人ごとの行を表示。誰がどの段階にいるかが一目でわかるデザインです。対応が必要な項目は背景色とボーダーで視覚的に強調しました。


最初は件数のサマリーだけ表示する設計でしたが、実際に使ってみると個別の人が見えるほうが圧倒的にアクションしやすい。やっぱり動くものを触ってみないとわからないことは多いです。
次のステップ
水系判定の精度が上がって、テストデータも効率よく作れるようになりました。開発を支える基盤が整ってきた感じです。次はさらにUI周りを磨いていきます。


コメント