【アジャイル開発】「どの店に行くかが決まらない」を解決するアプリを作ってみた
概要
大学3年の夏にemPiTというアジャイル開発の授業があったので、制作物や制作過程を紹介します。タイトルの通り、友達とご飯を食べに行くときに「どの店に行くかが決まらない」というような状況を解決するためのWebアプリケーションを開発してみました。
メシレコというアプリです。
以下のリンクからサービスにアクセスすることができます。
スマホでの表示にも対応しておりますのでQRコードからもぜひ。
(位置情報を許可する必要があります。)
メシレコとは
メシレコは外に食べに行くときに、特に食べたいものが無かったり、どんなお店があるか分からなかったりして、お店が決まらないという課題を解決するためのグルメレコメンドアプリです。
これはユーザーの条件に沿ったおすすめのお店を1つずつ提案することによって、食べログやGoogle Mapとは違った、TikTokのようなレコメンドスタイルで、案出しにかかる時間を劇的に短縮し、スムーズでストレスフリーなご飯決めを実現できます。
アジャイル開発とは
アジャイル開発とは、2001年にアメリカに集まった17人の技術者により提唱された「アジャイルソフトウェア開発宣言」に基づくチーム開発手法です。
《アジャイルソフトウェア開発宣言》
私たちは、ソフトウェア開発の実践あるいは実践を手助けをする活動を通じて、よりよい開発方法を見つけだそうとしている。この活動を通して、私たちは以下の価値に至った。プロセスやツールよりも個人と対話を、包括的なドキュメントよりも動くソフトウェアを、契約交渉よりも顧客との協調を、計画に従うことよりも変化への対応を、価値とする。すなわち、左記のことがらに価値があることを認めながらも、私たちは右記のことがらにより価値をおく。
(引用元:アジャイルソフトウェア開発宣言)
このプロジェクトは、スクラムベースのアジャイル開発に基づき、1日を1スプリントの単位とし、わずか5日の開発期間で開発が行われました。1チームの人数は5人です。超ハードスケジュール。。。
チーム構成
- PM x 1 ← 自分はPMを担当しました🙋
- スクラムマネージャ(SM) x 1
- エンジニア x 3
※ PMとSMもエンジニアと全く同様に開発も担当します。
開発環境とリポジトリ
主な開発環境は以下の通りです
- メイン言語 : TypeScript
- ライブラリ : React
- ビルドツール : Vite
- VCS : Git/GitHub
ソースコードをGitHub上で公開しています。
メシレコができるまでの道のり
まずは問題定義
数人で遊んでいて飲食店を探すことになると、皆がずっと「どこ行く?」と言っているだけで、行く場所がなかなか決まらないという状況に陥ることがよくあります。なかなか意見を出しずらかったり、そもそも食べたいものが思いつかなかったりして、非常に苦痛な時間ですよね。私たちはこの問題を解決するために、このプロジェクトを立ち上げました。
なぜその問題は起こるのか
まず、先ほど述べたような状況がなぜ起こるのかについて考えたいと思います。お店が決まらない状況というのは、母親に「今日の夕飯何がいい?」と聞かれて困る現象によく似ています。なにがいいかと聞かれてもなかなか思いつかないです。
しかしこれが「今日の夕飯ハンバーグでいい?」と聞かれた場合だったらどうでしょうか。こちらの質問には簡単に答えることができるはずです。
我々はYes/Noで答えられる質問には簡単に答えることができますが、「何食べたい?」といったようなWhatの質問には非常に答えにくいのです。そして、この事実がお店決めの中でも問題になっているのだと考えました。
その問題をどうやって解決するか
私たちは、先ほど述べた課題をアプリケーションで解決しようと考えました。メシレコは、お店決めの際に、人間が苦手な、Whatの質問を排除し、Yes/Noで答えられる質問を次々と投げかけてくれるアプリケーションです。
使い方はシンプルです。
- 下の画像のように、アプリを立ち上げると、ひとつお店が表示されます。
- ユーザはこの店でよいかどうかの選択をします
- この店でよい、もしくは気になった場合:
その画面から詳細な情報が載っているグルメサイトや地図にアクセスすることができます。 - もし気に入らなかった場合:
スワイプ操作ですぐに次のお店の候補が出てきます。
- この店でよい、もしくは気になった場合:
また、表示されるお店はユーザの現在地に基づいていて、ユーザの現在地から半径1km以内のお店が表示されます。
開発していこう!
大学の授業の一環として行われたプロジェクトは、アジャイル開発で開発が進められました。
どんなアプリケーションを作るかを決めるとことも含めて、5人でたった5日で完成品を提出しなければならなかったのでかなりハードでした。
開発1日目
開発1日目はまず、先ほど述べたような課題の整理や、アプリケーションのアイディア出しから始まりました。
その後は、アプリの開発環境を自分たちで決めて、チームメンバー全員がHello Worldを出力できるように環境構築を行って終了しました。
2日目以降のルーティーン
2日目以降のアプリ実装期間中は基本的に以下のような一日を以下のようなスケジュールで開発を行いました。
20min バックログを参照し、その日の作業計画を立てる
90min 開発
10min ショートミーティング
90min 開発
10min ショートミーティング
90min 開発
10min ショートミーティング
90min 開発
30min レビュー収集
20min 作業進捗・レビューに基づきバックログを修整
- バックログ ≒ プロジェクト全体の計画
- レビュー収集 = ユーザにデモを示す or β版を使ってもらって意見をいただく
このルーティーンは学校側から決められたものですが、一日の開発ルーティーンのなかで最も重要視されていたことは、その日の開発で何かしらのバリューを必ず出すということです。
これはどういうことかというと、自分たちからすると開発が進んでいるつもりでも、ユーザから見たときに、そのアプリが「何も変わってないじゃん」という状態だとダメ、ということです。
アジャイル開発では、「とにかく動くものを作る→フィードバックを得る→バックログを修正する」というサイクルをいかに回すかが重要だと教わりました。
これからの開発記録は
- リリースノート = その日の開発の結果何ができるようになったか
- レビューコメント = レビューの際にどんな意見をいただいたか、どのように対応するか
というような方式で説明していきます
開発2日目
- リリースノート
- お店情報が表示されるようになった
- スワイプで次のお店が出るようになった
- レビューコメント
- スワイプ操作がやりずらい
→スワイプする向きを検討(優先度中) - カードの方法がもっと欲しい
→表示する情報の検討(優先度高)
- スワイプ操作がやりずらい
開発3日目
- リリースノート
- スワイプ操作が行いやすくなった
- より詳しいお店情報を確認できるようになった
-
筑波大生お昼休み版リリース!
筑波大生が昼休みに行きそうな(行くことができる)お店が表示されるようになった。レビュアーが筑波大生だったため、簡単な実装でとりあえず使える状態にした
- レビューコメント
- 諸事情でスプリントが中止になったためレビューなし
開発4日目
- リリースノート
- スマホでの表示に対応した
- レビューコメント
- カードがなくなったらリセットしてほしい
→リロード機能の検討 - 定休日のお店は表示しないでほしい
→とりあえず、定休日を表示して対応 - 良さげなカードを一時保存しておきたい
→ユーザに一時保存した店同士の選択を迫り、かえってメシレコの良さを損なうのでこの機能はつけないことにした
- カードがなくなったらリセットしてほしい
開発5日目
- リリースノート
- UI大幅パワーアップ(より使いたくなる見た目に)
-
全国版リリース!
現在地に近いお店を提案してくれるようになった
- レビューコメント
- 完成度高くて、びっくりしてるんだけど
- これリクルートに持ち込みませんか
- 行ったことある場所などがストックされるようになるといいな
→より高度な推薦アルゴリズムを検討
こだわったこと・学んだこと
プロダクトでなく困りごとを愛せ!
- 自分たちが解決したい問題を常に意識
- 「最強のブロダクトを作ったぜ!」でなく「この問題を解決したぜ!」
- 困りごとから逸れていかないように注意
今日「ユーザに」提供できるようになる価値は何か?
- 「これ作りました」ではなく「これができるようになりました」
- いきなりログイン画面を作ってもユーザにとって価値はない
- 1スプリントの間に必ず価値を生み出す
- レビューの機会を無駄にしないため
レビュー収集とバックログ修正のサイクルがいのち!
- 顧客を開発に巻き込む!
- 顧客の要求を基点にからウォーターフォールで伝えていくのではなく、顧客も参加したスプリントサイクルを繰り返す
- 完璧な計画書よりも、柔軟な変更を!
- レビューをもらっても困りごとから逸れないように注意
- メシレコには一時保存機能はつけなかった
Discussion