連載目次
| 回 | 内容 |
|---|---|
| #1 | 企画・課題発見 |
| #2 | 要件定義(この記事) |
| #3 | 設計(データ構造) |
| #4 | データ処理・ロジック実装編 |
| #5 | UI・画面実装編 |
| #6 | テスト・CI/CD構築編 |
| #7 | 開発中に遭遇した技術的問題 |
| #8 | 完成・振り返り |
はじめに
前回は、長い文章を覚えるためのアプリ「暗記ノート」を企画した経緯と、ラフスケッチで出したアイデアを書きました。
今回は要件定義です。たくさん出したアイデアの中から、最初の版(MVP)に何を入れ、何を見送ったのかを書きます。
Claudeでプロトタイプを作り、方向を修正した
要件を決める前に、アイデアのうち「表示・隠し方」の部分だけをプロトタイプにして、実際に使ってみました。
プロトタイプは、Claudeのアーティファクト機能を使って作りました。アーティファクトは、会話の中で作ったコードをその場で動く画面として表示できる機能です。作りたい動きを文章で伝えるだけで、実際に触れる画面がすぐにできるので、本格的に開発を始める前に「この機能は本当に役に立つか」を確かめるのに向いていました。
できたプロトタイプ「積み上げ暗唱」には、次の機能を入れました。
- 文章をいくつかのまとまり(チャンク)に分ける
- 「暗記」「穴埋め」「キーワード」の3つの見せ方
- 覚えた度合いを自分で選ぶ(自己申告)
前回の時点では「声に出して言えるようになる」ことを目的にしていて、音声認識や録音などのアイデアもありました。ところが、プロトタイプで「隠す → 思い出す → 表示して確かめる」を繰り返してみると、それだけで十分に覚える練習になると感じました。
そこで、声に出す機能はすべて外すことにしました。
- 外したもの:音声認識での発話チェック、自分の声の録音、お手本の読み上げ、本番シミュレーション
- 成功の鍵も書き直しました
- 前:本人が「声に出して言えた」と実感できる練習環境を用意すること
- 後:本人が「覚えた」と段階的に実感できる練習環境を用意すること
「アプリが判定せず、本人が判断する」という前回決めた方針は、そのまま引き継いでいます。
MVPに入れた機能
プロトタイプで試した機能を土台にして、そこに2つを追加したものをMVPの範囲にしました。
| 機能 | 内容 | 対応する困りごと(#1) |
|---|---|---|
| テキストの登録・保存 | 覚えたい文章を貼り付けて、複数保存できる | ― |
| 3つの見せ方 | 暗記(全文を隠す/表示する)、穴埋め(キーワードを空欄にする)、キーワード(要点だけを見せる) | 本番で言葉が出てこない |
| 習熟度の自己申告 | 「未着手/暗記中/習得済み」を自分で選ぶ | どこまで覚えたか把握できない |
| 分割して少しずつ覚える | 長文をいくつかのブロックに分け、進み具合を表示する | 時間や気力が続かない |
| フォルダ管理(追加) | 自分でフォルダを作り、名前変更・削除ができる。階層は1段のみ | ― |
| ブックマーク(追加) | 苦手なテキストに印を付け、絞り込んで表示できる | どこまで覚えたか把握できない |
フォルダは「面接用」「スピーチ用」のように、用途ごとに原稿を分けたかったので追加しました。階層を1段だけにしたのは、覚えたい文章の数はそれほど多くならないので、入れ子にする必要がないと考えたためです。
見送った機能
ラフスケッチに出したアイデアのうち、次のものはMVPに入れませんでした。
| 見送った機能 | 理由 |
|---|---|
| 音声認識・録音・読み上げ・本番シミュレーション | プロトタイプで、隠して思い出す練習だけで十分だと分かったため |
| 復習リマインド・連続練習日数の表示・練習ログ | 覚える練習そのものが先。続けるための仕組みは、使ってみてから必要か判断する |
| 徐々に隠れていく表示・詰まったときのヒント | 3つの見せ方で「隠して思い出す」は一通りできるため |
| ダークモード・文字サイズ変更 | 見た目の調整は、練習の中心となる機能より後にする |
機能以外の要件
機能とは別に、アプリ全体に関わる条件も決めました。
- アカウント登録なしで使える:思い立ったときにすぐ練習を始められるようにする
- データはブラウザの中に保存する:サーバーを持たず、ブラウザの localStorage に保存する。ログインが要らないのはこのため
- スマホでもPCでも使える:すきま時間にスマホで練習する使い方を想定し、スマホの画面を基準に作る(モバイルファースト)
- 無料で公開する:サーバーを持たない構成なので、無料の範囲で公開できる
「データがブラウザの中にある」ため、別の端末やブラウザとはデータを共有できません。これは、登録なしですぐ使えることと引き換えに受け入れた制約です。
要件の漏れ:削除機能がなかった
要件を決めて開発を進めていく中で、保存したテキストを削除する機能が入っていなかったことに気づきました。登録・表示・練習のことばかり考えていて、「要らなくなったら消す」という操作が抜けていました。
気づいた時点で Issue(#19)を立てて追加しました。誤って消さないよう、削除ボタンは1回目で「本当に削除?」という確認の表示に変わり、2回目で実際に削除する形にしています。この方式は、プロトタイプ「積み上げ暗唱」で使っていたものをそのまま引き継ぎました。
データを扱う機能を洗い出すときは、登録(Create)・表示(Read)・変更(Update)・削除(Delete)の4つがそろっているかを確認すると、こうした漏れを防げます。
その後に変わったこと
ここで決めた要件のうち、「分割して少しずつ覚える」機能は、開発の途中で廃止しました。句読点や改行の有無によって分割の結果が安定しないなどの問題が何度も起き、最終的に機能そのものをやめて、テキスト全体を1つの練習単位として扱う形にしました。
この経緯は、#7(開発中に遭遇した技術的問題)で詳しく書きます。
まとめ
- Claudeのアーティファクト機能でプロトタイプを作って触ってみた結果、「声に出す」機能を外し、「隠して思い出す」練習に絞った
- MVPは、3つの見せ方・習熟度の自己申告・フォルダ・ブックマークを中心にした
- アカウント登録なし・ブラウザ保存・スマホ対応・無料公開を、機能以外の要件にした
- 削除機能が要件から漏れていて、開発中に追加した
次回は設計編です。使う技術の選び方と、テキストやフォルダをどんな形のデータで持つかを書きます。