「あの店どこだっけ」を無くしたくて作りました
友人に「この前おいしいって言ってた焼き鳥屋どこ?」と聞かれて、答えられなかったのがきっかけです。
メモアプリ、カメラロール、地図アプリの保存、SNS、グルメサイトのブックマーク。ひととおり試しましたが、どれも続きませんでした。理由を整理すると3つでした。
- 入力が重い。店を出た直後に店名・住所・日付・評価・感想を全部書くのは無理
- あとから見返せない。時系列に並ぶだけだと、特定の一軒にたどり着けない
- 「行きたい」が埋もれる。行った店と同じ箱に入れた瞬間に機能しなくなる
この3つを潰すことだけに絞って作ったのが、めしメモです。
できること
- 写真と店名だけで登録できます。 評価もメモも後から足せます
- 記録したお店が地図にピンで並びます。 「この駅の近くで前に何か食べたな」からたどれます
- 「行った」と「行きたい」を分けています。 行きたいお店は前日に通知でお知らせします
- タグをグループ分けして絞り込めます。 「焼肉」「デート」「ひとり飯」のような軸で探せます
- カレンダーで、いつ何を食べたかを振り返れます
- 他のアプリからCSVで記録を引き継げます
無料で使えます。「行った」の記録は30件まで(上限に達すると古いものと入れ替え)。写真のクラウド保存や無制限の記録は有料プランです。
技術構成
Flutter(iOSのみ配信)+ Firebase(Firestore / Storage / Cloud Functions / Auth / Crashlytics)です。個人開発なのでサーバーは持たず、地図まわりだけ Google Maps を使っています。
外部APIの呼び出しは、そのまま運用コストになります。 住所から座標を出すジオコーディングは、同じ住所を何度も叩くと無駄にお金が飛ぶので、サーバー側にキャッシュを挟みました。失敗も一定期間覚えるようにしています。座標が取れない住所は、覚えておかないと毎回リトライされ続けるからです。
写真も同じで、端末に置くかクラウドに置くかで費用がまったく変わります。無料の範囲は端末に置き、クラウド保存は有料機能という切り分けにしました。
個人開発で効いたこと
失敗と「空」を混同しない、という原則をあちこちに入れています。
たとえばクラウドから記録を取得するとき、通信に失敗したのに「クラウドには1件も無い」と解釈すると、他の端末で消した記録が復活したり、全部の写真を再アップロードしたりします。通信が一度揺れただけで起きるので、失敗は失敗として扱い、その回の同期を丸ごと中止するようにしています。
個人開発だと、こういう「静かに壊れる経路」は本人が気づくまで誰も教えてくれません。非致命エラーをサーバーに集める仕組みを入れてから、報告されていない不具合をいくつも見つけられるようになりました。
これから
要望や不具合は、アプリ内のお問い合わせから直接届きます。個人でやっているので、いただいた声はだいたいそのまま次のアップデートに入ります。実際、直近のアップデートも問い合わせが起点でした。