要件定義書をChatGPTと作ったが、Claude Codeに確認すると考えられていない点が10点以上あった。
iOSのアプリなのか、Androidを考えたアプリなのか、学習コスト、個人情報の扱いなど。
データベースは一度Firebaseを使ったので、それを使用するのはどうかと思ったが、用途によって違う選択がいいことがわかった。(わかっているようでわかってなさそうなため再度勉強する予定)
一緒に考えて以下の計画で進むことになった。
Phase 計画
| Phase | 内容 | ゴール |
|---|---|---|
| Phase 0 | Expo環境構築 / Expo Goで実機表示 / タブ5画面の空箱 | 自分のiPhoneに”Hello”が出る ←ここが初学者の最初の山 |
| Phase 1 | SQLite設計・utils/date.ts・リポジトリ層 | データの土台。ここだけテストを書く |
| Phase 2 | ホーム画面(気分入力→保存)/詳細入力/タグ | アプリとして成立する最小形 |
| Phase 3 | ローカル通知(時刻設定・文言設定・タップで起動) | 毎日使える状態 |
| Phase 4 | カレンダー(過去日の追記も)/グラフ | 振り返れる |
| Phase 5 | 薬管理/PDFレポート | 診察で使える |
| Phase 6 | 書き出し・読み込み/全削除/アプリロック | 安心して預けられる |
| Phase 7 | 使い方・規約・ポリシー/EAS Build/TestFlight/申請 | 公開 |
テストとは
テストは2つあるよう。
| 手動テスト | 自動テスト(← 私が言っていたもの) | |
|---|---|---|
| やり方 | 実機でアプリを触って目で見る | チェック用のコードを書いておく |
| 実行 | 毎回自分で操作 | ターミナルで npm test を1回打つだけ |
| 時間 | 毎回数分 | 数秒(何百項目でも) |
| 実機 | 必要 | 不要(Macの中だけで完結) |
テストの必要性
たとえば「日付を YYYY-MM-DD の文字列に変換する関数」を作ったとします。
自動テストはこう書きます。
「2026年1月1日 の午前0時5分」を入れたら、"2026-01-01" が返ってくるはず
これをコードで書いておくと、以降コマンド1つで永久に検証され続けます。
なぜ「日付だけ」テストを書くのか
日付のズレは、画面を見ても気づけないからです。
- ボタンの色が違う → 見ればわかる(自動テスト不要)
- レイアウトが崩れた → 見ればわかる(自動テスト不要)
- 12月31日に記録したら1月1日に保存されていた → 見てもわからない。数ヶ月後に「あれ?」となって初めて発覚する
Expo とは?(Xcodeとの違い)
ひとことで言うと
| Xcode + Swift | Expo + React Native | |
|---|---|---|
| たとえると | 材料から自炊 | ミールキット |
| 言語 | Swift | TypeScript(Web系の言語) |
| 実機で確認 | Xcodeでビルド→転送 | QRコードを読むだけ |
| ケーブル | 初回は必要なことが多い | 不要(Wi-Fiだけ) |
| 7日制限 | あり(無料アカウントの場合) | なし |
| コード修正の反映 | 毎回ビルドし直し(数十秒〜) | 保存した瞬間に反映(1〜2秒) |
| App Store公開 | Xcodeでビルド | クラウドがビルドしてくれる |
開発中の実際の流れ
① iPhoneのApp Storeで「Expo Go」という無料アプリを入れる
↓
② Macのターミナルで npx expo start と打つ
↓
③ ターミナルにQRコードが出る
↓
④ iPhoneのカメラでQRを読む
↓
⑤ 自分のアプリが Expo Go の中で起動する
以降、Macでコードを保存するたびに、iPhoneの画面が自動で書き換わります。
費用系
| Xcode | Expo | |
| Mac | あり | — |
| Node.js | インストールが必要 | 無料 |
| VS Code(エディタ) | 必要 | 無料 |
| Expo Go(iPhoneアプリ) | 必要 | 無料 |
| Expoアカウント | 必要 | 無料 |
| Apple Developer Program | App Store公開時のみ | 年 約15,000円 |
なんでも動くってわけじゃない
| 機能 | Expo Go |
|---|---|
| SQLite / PDF / 共有 / Face ID / カレンダー | ⭕️ そのまま動く |
| 通知 | ⚠️ 制限が出る場合あり → Phase 3で開発ビルドに切替の可能性が高い |
| グラフ | ⚠️ ライブラリ次第 → Phase 4で判明 |
| 広告(将来) | ❌ 開発ビルド必須 |
ここからアプリ化に向けて頑張っていくので、備忘録として見届けていただけたらと思います。
この記事のカテゴリー
開発ブログ の記事をもっと見る →