【要約】旅行の持ち物リストを「経験から育てる」設計 — React / TypeScript / Supabase で作った個人開発アプリの設計判断 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者が既存の持ち物管理ツールに対して感じた、静的なリスト設計による限界が課題である。従来のツールでは、個人の多様な旅行スタイルに追従できないという問題がある。
- ・固定テンプレートでは、旅行先や季節、スタイルによる変化に対応できない。
- ・「持参したが使わなかった」という負の経験が記録されず、次回の最適化に活かせない。
- ・アイテムの表記ゆれが発生した場合、過去のデータとの紐付けが困難になる。
// Approach
開発者は、経験を蓄積してリストを自動最適化するため、イベントソース的なデータ構造を採用した。アイテムのマスター情報と、旅行ごとの使用ログを分離することで、高度な分析を可能にしている。
- ・アイテムのマスター情報と、旅行ごとの使用ログ(used/not_used/forgot)を分離して管理する。
- ・「忘れた(forgot)」を「使った(used)」に近い価値を持つ情報としてスコアリングに組み込む。
- ・認証にはFirebase Authを用い、Supabase RLSとの連携にはJWTのsubクレームを利用する。
- ・PostgreSQLのGINインデックスを活用し、配列型のタグ検索を高速化する。
// Result
開発者は、蓄積されたデータに基づき、荷造りの効率化を実現した。実際にアプリを使用することで、個人の旅行パターンが可視化される成果を得ている。
- ・3回の旅行を経て、アイテムの使用状況が可視化され、荷造り速度が向上した。
- ・「経験から学ぶ」設計により、ユーザーと共にアプリが成長する体験を実現した。
- ・今後の展望として、旅行期間や気候に応じたスコアリングの重み付け改善を挙げている。
Senior Engineer Insight
> 個人開発における「開発体験」と「運用コスト」のトレードオフが顕著な事例だ。FirebaseとSupabaseの併用は、認証の容易さを優先した結果だが、JWT連携の複雑さは運用上のリスクとなる。ログを分離する設計は、将来のAI活用を見据えた優れた判断だ。ただし、インフラは可能な限りシンプルに保つべきである。