今週は釣行評価システムの仕上げとパフォーマンス改善をまとめてやりました。
釣行ごとに評価できるようにした
カードから釣行の相手を直接評価できるようにしました。以前は同じユーザーとの評価が1件しか持てない設計だったので、評価データに釣行ごとの識別子を持たせる形に変更し、同じ相手と複数の釣行で一緒になってもそれぞれ独立して評価できます。
釣行完了ステータスと相互公開評価を実装した
オーナーが「釣行完了にする」ボタンを押すと承認済みの参加者全員に通知が届き、評価フローが始まります。評価はお互いが送信した後に初めて公開される「相互公開方式」で、片方だけ評価が見えてしまうのを防いでいます。オーナーが完了を押し忘れた場合は翌日正午にサーバー側の定期処理が検知してリマインダーを送ります。
評価UIを3つの状態に整理した
評価状態によってボタンの見た目を切り替えるようにしました。未評価はオレンジのボタン、評価済みで相手待ちはグレーのラベル(タップ不可)、相互完了したカードは全体が薄く表示されます。「やること残っているかどうか」がパッと見でわかるようになりました。

釣行実績をプロフィールに表示した
プロフィール画面に、募集作成回数・マッチング成立回数・釣行完了回数・評価数など9種類の実績カウントを表示するようにしました。サーバー側のカウント更新処理にバグが多く調査に時間がかかりましたが、全項目が正しく集計されるようになっています。
マイ釣行タブにバッジとフィルターを追加した
承認待ちの申請や評価忘れがあってもタブ自体に通知が出なかったので、タブバッジと「やることありフィルター」を実装しました。タブを開く前でもバッジが正しく表示されるよう、サーバー側でカウントを管理する設計にしています。

ログアウト→再ログインのバグを複数修正した
「ログアウトして別アカウントで入り直したらマップに何も表示されない」というバグを修正しました。ログアウト時にデータ監視の後片付けが不完全だったため、再ログイン時に「すでに監視中」と判断されて新しいデータが取得されないのが原因でした。他にも同パターンのバグが連鎖していたのでまとめて対処しています。
河川辞書のファイル形式を変えて起動を速くした
起動時に読み込む河川辞書(6.2MB)をiOSが高速に読めるバイナリ形式に変換しました。テキスト形式のJSONより3〜5倍速く読み込めるとされており、ファイルサイズも4.1MBに約33%削減できました。
水域タイルのキャッシュに上限を設けた
マップの水域タイルをディスクにキャッシュしていましたが、削除する仕組みがなく蓄積し続ける問題がありました。上限200MBに達したら最近使っていないものから順に削除する仕組みを追加しました。

コメント