【個人開発】お店選びのめんどくさいを解決!iOSアプリ「DineDecider」をリリースしました!
Photo by Max Petrunin on Unsplash
はじめに
こんにちは!riatasoこと佐藤来です。
この度、「優柔不断なランチ・ディナーのお店選びを、一瞬で解決する」というコンセプトで、個人開発したiOSアプリ「DineDecider」をApp Storeにリリースしました。
この記事では、開発のきっかけとなった想いや、こだわったポイント、使用した技術などについてお話しさせてください。
どんなアプリ? - 「DineDecider」のご紹介
「DineDecider」は、「今日のご飯、何にする?」という永遠の悩みを、楽しく解決するためのアプリです。を解決するためのアプリ**です。
> 現在地周辺のお店から、ルーレットが運命の一軒を楽しく決定!もう「何でもいい」で困らない、新しい食の発見へ。
解決したかった課題
友人との食事や毎日のランチで、「どこにする?」「なんでもいいよ」のループに陥り、結局お店選びに時間がかかってしまう…。
この誰もが経験する「お店選びの小さなストレス」を、テクノロジーでスマートに解決できないかと考えたのが、開発の原動力です。
アプリの主な機能
* ジャンル指定検索:「ラーメン」「イタリアン」など、食べたいジャンルを複数選択して、現在地周辺のお店を検索します。
* 運命のルーレット: 候補のお店の中から、ルーレットがランダムで1軒を決定!お店選びの迷いを断ち切ります。
こだわったポイントと技術的な挑戦
こだわったのは、「意思決定の負担を、いかに楽しく減らすか」というユーザー体験です
- 考えさせないUI/UX
お店選びの面倒さを解消するため、アプリを開いてから3タップでルーレットが回せる、直感的でシンプルな操作性を追求しました。特に、ルーレットが回転するアニメーションにはこだわり、お店が決まる瞬間のワクワク感を演出しています。 - 技術的なチャレンジ
本業ではクラウドインフラを担当していますが、今回はユーザーに直接価値を届けるアプリケーション開発に挑戦しました。
* **MapKitと外部APIの連携:** 現在地情報と飲食店の店舗情報を正確に連携させるため、ホットペッパーグルメAPIを活用しました。APIからの非同期なデータ取得と、それを地図上にマッピングする処理に注力しました。
* SwiftUIでのリッチな表現: ユーザー体験の要であるルーレットのアニメーションは、SwiftUIの描画機能を駆使して実装しました。滑らかな回転と結果表示で、使っていて楽しいアプリを目指しました。
使用技術スタック
- 言語: Swift, SwiftUI
- アーキテクチャ: MVVM + Repository
- 非同期処理:Swift Concurrency(Async/Await)
- テスト:SwiftTesting
- その他: MapKit・SPM
開発でぶつかった壁
最も苦労したのは、SwiftUIでのカスタムルーレット機能の実装でした。
候補店の数に応じて円を均等に分割し、自然なアニメーションで回転させる部分と三角関数を用いて各セグメントの描画位置を計算し、withAnimationのタイミングカーブを細かく調整することで、物理法則に則ったようなリアルな減速感を表現しました。
この経験を通じて、数学的なロジックをUIデザインに落とし込む面白さと、ユーザーの「楽しい」という感情をコードで演出する技術の重要性を深く学びました。
今後の展望
まずは多くの方に「お店選びの切り札」として使っていただき、フィードバックを元に改善を重ねていきたいです。将来的には、お店の「お気に入り登録機能」や「過去のルーレット履歴」など、よりパーソナルな体験ができる機能を追加していきたいと考えています。
おわりに
企画から設計、開発、ストア公開まで、すべて一人でやり遂げたことで、プロダクト開発の面白さと難しさの両方を学ぶことができました。
ぜひ一度、アプリを触ってみていただけると嬉しいです!
ご意見やご感想など、お気軽に[TwitterのDMやWantedlyのメッセージなど]でご連絡ください。