コンテンツにスキップ

実装

技術選定(10分)

基本フレームワーク

  • プログラミング言語:Swift 6
  • UIフレームワーク:SwiftUI
  • データ永続化:SwiftData

開発ツール

  • IDE:Xcode 16
  • バージョン管理:Git
  • データベースのテストツール:DB Browser for SQLite
  • アイコン / UIデザイン:Figma
  • モックアップ:Shots
  • ドキュメント作成:Material for MkDocs
  • テキストエディタ:VSCode、Sublime Text
  • コードのホスティング:GitHub
  • モデルのホスティング:Hugging Face
  • ウェブサイトのデプロイ:Vercel / Cloudflare
  • DNS管理:Cloudflare
  • AIによる開発支援:ChatGPT

アプリの主要技術とコンポーネント

システム機能

  • 通知のスケジューリング:UNUserNotificationCenter
  • アプリの評価:StoreKit
  • ファイル処理:FileManager
  • ウェブページの組み込み:Safari Services

データとストレージ

  • ネットワークリクエスト / ダウンロード:URLSession
  • JSON解析:JSONDecoder
  • ユーザー設定の保存:AppStorage
  • データの暗号化 / 検証:CryptoKit

UIとインタラクション

  • 共有機能:ShareLink、UIActivityViewController
  • 画像レンダリング:ImageRenderer
  • ヒントの表示:TipKit
  • 触覚フィードバック:UIImpactFeedbackGenerator

アーキテクチャとコード設計

  • アーキテクチャ:データ駆動UI(MVVM)
  • 状態管理:@State / @StateObject / @Environment / @EnvironmentObject
  • 非同期呼び出し:Swift Concurrency(MainActor / Task / async/await)
  • イベントの監視:NotificationCenter
  • UIKitとの連携:UIViewControllerRepresentable
  • UIコンポーネントの再利用:カスタムViewModifier

推論モデル

  • LLMモデル:Foundation Models / Qwen3
  • 推論エンジン:llama.cpp

注:上記は現在のバージョンで採用している技術です。個々の導入バージョンは記載していません。


MVPの実装(90分)

  1. 新しいiOSプロジェクトを作成
  2. メイン画面のMainViewを作成し、TabViewを組み込んでチェックイン・振り返り・設定の各画面を管理
  3. チャレンジ・習慣・記録のモデルを作成

  4. 新しいチャレンジを開始するか、現在のチャレンジに戻るための開始画面を作成
  5. Listで7つの習慣を表示するチェックイン画面を作成し、記録機能を実装
  6. Gridで50日 × 7つの習慣の全記録を表示する振り返り画面を作成
  7. サポートとプライバシーポリシーへの外部リンクを含む設定画面を作成

  8. チャレンジのアーカイブ機能を実装し、チャレンジ履歴・詳細画面の表示を完成
  9. チャレンジ完了後の開始画面と、次のチャレンジを始めるフローを作成

実装済みの機能(v1.1~)

  • 日付の変更(過去の記録の追加)✅
  • チェックインへのメモの追加 ✅
  • 連続チェックイン日数の計算 ✅
  • 習慣のカスタマイズ ✅
  • チャレンジ期間のカスタマイズ ✅
  • チェックインのリマインダー ✅
  • チャレンジの成果の共有 ✅
  • UI/UXの改善 ✅
  • チャレンジデータのインポート・エクスポート ✅
  • アーカイブ済みチャレンジの一括削除 ✅
  • ガイドと起動フローの改善 ✅
  • ローカル AI による毎日のまとめ ✅
  • 毎日のまとめのインポート・エクスポート ✅
  • Foundation Models の優先利用 ✅

未実装 / 拡張予定の機能

  • 開始日の編集
  • 報酬の仕組み(条件を満たすとバッジを獲得)
  • 多言語対応(英語、日本語)

テスト(30分)

MVP 段階のテスト

  1. 主要機能のフローテスト:開始 -> チェックイン / 振り返り / 設定 -> 終了 -> 再度開始
  2. チャレンジのライフサイクルテスト
番号 テスト操作 期待結果 備考
1-1 アプリを初めて開く 開始画面が表示される
1-2 チャレンジ開始をタップ チェックイン画面に遷移する Day 1と7つの習慣が表示される
1-3 タブバーをタップ チェックイン・振り返り・設定の3画面を自由に切り替えられる
1-4 いくつかの習慣をタップ 習慣が達成済みの状態に切り替わる 再度タップすると達成済みの状態を解除できる
1-5 振り返り画面に切り替える チェックインの状態が正しく表示される Day 1/50と7つの習慣グループが表示され、各グループに50件の記録がある
1-6 設定画面に切り替える 設定メニューが表示される
1-7 チャレンジ一覧をタップ 一覧画面に現在のチャレンジが表示される
1-8 現在のチャレンジをタップ チャレンジ詳細画面に遷移する チャレンジのデータが正しく表示される
1-9 設定画面に戻り、現在のチャレンジを終了する 開始画面に戻る
1-10 再度チャレンジ開始をタップ 新しいチャレンジが始まる 一覧画面に、終了した前のチャレンジと新しい現在のチャレンジが表示される
1-11 チェックイン記録を修正し、アプリを閉じて再度開く 修正後のデータが引き続き正しく表示される
2-1 データベースツールで現在のチャレンジの開始日を手動で50日前に変更する チャレンジ完了後の開始画面が表示される
2-2 再度チャレンジ開始をタップ 新しいチャレンジが始まる 一覧画面に、終了した前のチャレンジと新しい現在のチャレンジが表示される

追加テスト [v1.3]

    3. 日付をまたぐ際の自動更新テスト
番号 テストの前提条件 テスト操作 期待結果
3-1 チャレンジ終了日の前日 チェックイン画面を表示し、0時までアプリをフォアグラウンドに保つ 日付が翌日に自動更新される
3-2 同上 過去の日付を表示し、0時までアプリをフォアグラウンドに保つ 表示日付は変わらない
3-3 同上 今日を表示し、振り返り画面に切り替えて、0時までフォアグラウンドに保つ 表示日数が自動更新される
3-4 同上 過去の日付を表示し、振り返り画面に切り替えて、0時までフォアグラウンドに保つ 表示日数が自動更新される
3-5 同上 今日を表示し、アプリをバックグラウンドに移し、0時以降に再度開く 日付が翌日に自動更新される
3-6 同上 過去の日付を表示し、アプリをバックグラウンドに移し、0時以降に再度開く 表示日付は変わらない
3-7 同上 今日を表示し、振り返り画面に切り替え、アプリをバックグラウンドに移し、0時以降に再度開く 表示日数が自動更新される
3-8 同上 過去の日付を表示し、振り返り画面に切り替え、アプリをバックグラウンドに移し、0時以降に再度開く 表示日数が自動更新される
3-9 チャレンジの最終日 チェックイン画面を表示し、0時までアプリをフォアグラウンドに保つ チャレンジ終了画面に自動遷移する
3-10 同上 過去の日付を表示し、0時までアプリをフォアグラウンドに保つ チャレンジ終了画面に自動遷移する
3-11 同上 今日を表示し、振り返り画面に切り替えて、0時までフォアグラウンドに保つ チャレンジ終了画面に自動遷移する
3-12 同上 過去の日付を表示し、振り返り画面に切り替えて、0時までフォアグラウンドに保つ チャレンジ終了画面に自動遷移する
3-13 同上 今日を表示し、アプリをバックグラウンドに移し、0時以降に再度開く チャレンジ終了画面に自動遷移する
3-14 同上 過去の日付を表示し、アプリをバックグラウンドに移し、0時以降に再度開く チャレンジ終了画面に自動遷移する
3-15 同上 今日を表示し、振り返り画面に切り替え、アプリをバックグラウンドに移し、0時以降に再度開く チャレンジ終了画面に自動遷移する
3-16 同上 過去の日付を表示し、振り返り画面に切り替え、アプリをバックグラウンドに移し、0時以降に再度開く チャレンジ終了画面に自動遷移する