AIでサブタスクを自動生成するTODOリストアプリのMVP開発

### 1. はじめに

#### プロジェクト概要  
私は、タスク管理において「大まかなタスクだけでは、ユーザーが次に何をすべきか分かりにくい」という課題に着目しました。そこで、TODOリストの各タスクに対して、AIが自動で適切なサブタスクを生成する機能を搭載したシステムを作りたいと考えました。これは、ユーザーがタスクの詳細な手順を把握しやすくし、より効率的なタスク管理を実現するためのMVP（Minimum Viable Product）としての意義を持っています。  

#### 背景・動機  
- タスク管理の現状では、タスクが大まかすぎるため、次にどのようなアクションを取れば良いか分かりにくいという課題があります。  
- AI技術を用いることで、ユーザーが入力したタスク内容を達成するためのサブタスクを自動予測・生成できるというメリットを実現したいと考えました。

---

### 2. プロジェクト概要とアーキテクチャ

本プロジェクトは、ユーザーが入力したタスク情報をもとに、AIによる自動サブタスク生成機能を備えたタスク管理システムです。タスクは単一のモデル（Task）で管理され、各タスクは以下の属性を持ちます：  
- **ID**、**タイトル**、**完了状態**  
- 親タスクを示す `parent_id`（内部では `parentId` に変換）  
- 子タスク情報としての `children` 配列  
- **優先度**、**期限**、**サブタスク生成回数**（`generationCount`）など

システム全体のデータフローは以下の通りです。

```mermaid
graph LR
    subgraph "Frontend (Vercel)"
      FE["Frontend (HTML/CSS/JS/React)"]
    end

    subgraph "Backend (Node.js/Express)"
      BE["API Server"]
      AI["AI Module (Gemini API等)"]
    end

    subgraph "Authentication"
      FA["Firebase Authentication"]
    end

    subgraph "Database (Supabase)"
      DB["Supabase Database"]
    end

    FE -->|HTTP Requests| BE
    FE -->|認証リクエスト| FA
    BE -->|DB操作| DB
    BE -->|AIリクエスト| AI
    FA -->|トークン検証| BE

```

1. ユーザーは、フロントエンド（主に `public` ディレクトリ内のHTML/CSS/JavaScript）からタスクの追加、編集、削除を行います。  
2. タスクデータはAPI経由でバックエンドに送信され、Node.js/Expressで構築されたAPIサーバーがリクエストを受け取ります。  
3. APIサーバーでは、受信したタスクデータをTaskモデルに沿って処理し、必要に応じて親子関係を再構築するために `buildTaskHierarchy` 関数を実行します。ここでは、既に子タスクが存在する場合、トップレベルのタスクのみを抽出するロジックが適用されています。  
4. タスクの認証やアクセス制御は、Firebase Authenticationを利用して実現しています。これにより、ユーザーはメール認証やソーシャルログインなど、複数の認証手段でシームレスにアクセスできます。  
5. タスク内容をもとに、AI（Gemini API等を利用）がサブタスク候補を生成します。具体的には、`src/prompts/subtask-generation.js` などのモジュールで、AIへのリクエストと生成結果の加工が行われ、ユーザーインターフェース上に提示される仕組みです。

システム全体は、APIサーバー、Firebase認証、AIによるサブタスク生成、そしてフロントエンドの静的コンテンツが連携して動作する構成となっており、各モジュール間の依存関係やデータフローを明確に管理することで、拡張性と保守性が向上しています。図による詳細なアーキテクチャイメージは、こちらです。

```mermaid
graph TD
    subgraph "Deployment (Vercel)"
      FE["Frontend\n(HTML/CSS/JS, React)"]
    end

    subgraph "Backend (Node.js/Express)"
      BE["API Server"]
      AI["AI Service\n(Gemini API等)"]
    end

    subgraph "Authentication (Firebase)"
      FA["Firebase Authentication"]
    end

    subgraph "Database (Supabase)"
      DB["Supabase Database"]
    end

    FE -->|HTTP Requests| BE
    FE -->|認証リクエスト| FA
    BE -->|DBクエリ| DB
    BE -->|AIリクエスト| AI
    FA -->|認証トークン| BE

```

---

### 3. 利用技術と開発環境

本プロジェクトでは、最新のWeb開発手法とツールを活用し、シンプルながら堅牢なMVPを実現するため、以下の技術スタックを採用しています。

#### 【バックエンド】
- **Node.js**  
  高速でスケーラブルなサーバーサイドJavaScript環境として採用。
- **Express**  
  ミドルウェアの扱いやルーティングの設定を容易にし、APIエンドポイントの実装をシンプルに実現。
- **Firebase Authentication**  
  ユーザー認証機能は、Firebaseの認証サービスを利用することで、メール認証やソーシャルログイン（Google、Facebookなど）をシンプルに実装。これにより、ユーザー登録やログインのセキュリティを確保しながら、認証フロー全体の整合性を保っています。

#### 【フロントエンド】
- **HTML/CSS/JavaScript**  
  `public` ディレクトリ内に配置された静的ファイルで、ダッシュボードやタスク入力画面、編集・削除操作用のUIを構築。シンプルながらも直感的な操作が可能な設計です。
- **Reactの一部コンポーネント**  
  状態管理や動的なUI要素の描画が必要な部分で、Reactコンポーネント（例：`TaskList.js`、`TaskForm.js` など）を部分的に活用しています。

#### 【AI連携】
- **Gemini API（またはその他推論エンジン）**  
  タスク内容から自動的にサブタスク候補を生成するために連携。`src/prompts/subtask-generation.js` 内でプロンプトの組み立てやAIへの問い合わせ処理を実装し、ユーザーにスマートなタスク管理体験を提供します。

#### 【開発環境・ツール】
- **ローカル開発環境**  
  Node.jsを前提に構築し、VSCodeなどのエディタでソースコードを管理。
- **Git**  
  バージョン管理を実施し、CI/CDパイプラインの導入も視野に入れた体制で開発。
- **テスト**  
  単体テストや統合テストを `tests` ディレクトリに配置し、JestやSupertestなどのテストフレームワークで品質管理を徹底。
- **Firebase CLI**  
  認証設定や各種Firebaseサービスのデプロイを容易に実施できる環境を整備。

以上の技術スタックにより、本プロジェクトはシンプルなUIながら高度な認証機能とAI連携を実現するモダンなWebアプリとして構築されています。各技術要素間の連携やデータの受け渡しをスムーズに行う設計が、実装の柔軟性と保守性に大きく寄与しています。

---

### 4. 主な機能と実装の詳細

このセクションでは、タスク管理の基本機能と、AIを活用した自動サブタスク生成というユニークな機能について、具体的な実装の詳細を解説します。

#### 【タスク管理機能】
- **タスクの追加、編集、削除**  
  ユーザーはフロントエンド上の入力フォームや編集フォームを通じて新規タスクを作成し、必要に応じて既存タスクの編集や削除を行います。  
  APIサーバー側では、リクエストを受け取り、Taskモデルに基づく処理（DBへの保存・更新・削除）を実施。タスク作成後には、`buildTaskHierarchy` 関数が起動し、入力情報をもとにタスク間の親子関係を適切に再構築します。

#### 【自動サブタスク生成機能】
- **AI連携による自動生成ロジック**  
  ユーザーがタスクのタイトルや概要を入力すると、内部でサブタスク生成用のプロンプトが `src/prompts/subtask-generation.js` 内で組み立てられ、AI（Gemini APIなど）にリクエストが送信されます。  
  AIから返されたレスポンスは、サブタスク候補として加工され、ユーザーインターフェース上に提示されます。その際、生成回数（`generationCount`）の管理や、既存タスクとの整合性を保つための制御ロジックも実装されています。  
  このプロセスにより、ユーザーは具体的な作業項目を自動的に提示され、より詳細なタスク分割が可能になります。

#### 【Firebase認証連携】
- **Firebase Authenticationの導入**  
  ユーザー認証は、Firebaseが提供するメール認証やSNS認証など、複数の手段を利用して実現。  
  ユーザーがログインすると、Firebaseのトークンが取得され、API側でそのトークンをもとにアクセス制御が行われます。これにより、不正アクセス防止やユーザーデータのセキュリティ確保が徹底されます。  
  認証機能は、セッション管理やログイン状態の保持、ログアウト時のクリーンアップなど、基本的な認証フローに沿って実装されており、フロントエンドの各操作でも認証チェックが適切に行われるよう設計されています。

#### 【実装における工夫】
- **コードのモジュール化と再利用性**  
  APIルート、データベースアクセス、タスクの階層構築処理などは独立したモジュールとして `src` 以下に配置し、機能追加やバグ修正時の影響範囲を最小限に抑えています。  
  UIコンポーネントも再利用可能な形で設計され、一部はReactコンポーネントとして分割されています。
- **エラーハンドリングとテスト**  
  各機能実装に際し、エラー処理を重視。適切なミドルウェア（例：`src/middleware/error-handler.js`）を介してエラーメッセージの整備とログ出力を行っています。  
  テストコードは、controllers、routes、modelsそれぞれに対応するテストケースを `tests` ディレクトリに配置し、動作確認と品質保証を徹底しています。
- **非同期通信の制御とパフォーマンス**  
  AI連携、Firebase認証、タスク操作など、複数の非同期処理に対して、Promiseやasync/awaitを駆使したエラーハンドリングロジックを丁寧に実装。  
  キャッシュやデータ整合性チェックの工夫により、ユーザー体験の向上にも寄与しています。

以上のように、本プロジェクトはタスク管理機能の基本に加え、最新のAI技術とFirebase認証を組み合わせることで、従来のTODOリストアプリでは実現しにくかった自動化と安全性の両立を図っています。各実装パートはシンプルながら柔軟な拡張性を持ち、今後の機能追加や改善のための堅実な基盤となっています。

---

### 5. テストと品質管理

今回のプロジェクトはMVPとして実装しているため、最低限のテスト（単体テスト・統合テスト）のみを実施しています。今後、機能追加に合わせて、テスト範囲の拡充と自動テストの導入を計画しています。

---

### 6. 開発を振り返っての課題と今後の展望

本プロジェクトのMVP開発を通じて、いくつかの課題と改善点を把握することができました。以下に現時点での主な課題と、今後の改善の方向性についてまとめます。

#### 【課題その1：タスクの階層構造の複雑性】
- 現状、親タスクと子タスクの関係は `buildTaskHierarchy` 関数により再構築していますが、タスクが複雑になるとデータの整合性を維持する処理が煩雑になる傾向があります。  
- 特に、既存のサブタスクデータと新たに生成されるタスクのマージにおいて、重複や不整合が発生する可能性があるため、より堅牢なアルゴリズムの検討が必要です。  
- 今後は、タスク更新時や削除時に親子関係全体を自動で再構築する仕組みの最適化、もしくはキャッシュ機構の導入を検討していきます。

#### 【課題その2：Firebase認証の実装と運用】
- Firebase Authenticationを利用することで認証の導入はスムーズに進みましたが、トークンの有効期限管理やサーバー側での認証情報の整合性の維持といった運用面での課題が見えてきました。  
- 複数の認証手段を提供することにより、ユーザーごとに異なるログインフローが発生する可能性があり、統一性のあるUI/UXの実現が求められます。  
- 今後は、定期的なセキュリティチェック、認証エラーハンドリングの強化、またユーザーからのフィードバックを反映した認証フローの改善に取り組む予定です。

#### 【課題その3：AIによる自動サブタスク生成の精度】
- AIを活用した自動サブタスク生成機能は本プロジェクトのユニークな試みですが、実運用では生成結果の精度や関連性、ユーザーごとのカスタム要望への対応が課題となっています。  
- 現状では、AIが生成したサブタスク候補をユーザーに提示し、ユーザーによる選択や修正を求めるフローとなっています。  
- 今後は、ユーザビリティの向上、ならびにAIモデル自体のトレーニングデータ充実に注力し、精度向上を目指します。

#### 【今後の展望】
- ユーザーインターフェースのさらなる改善や、詳細な統計情報の表示、タスクごとの進捗管理機能の実装など、機能拡張を計画中です。  
- バックエンドでは、マイクロサービス化の検討やリアルタイム通知機能の導入など、システムのスケールアップを視野に入れた設計への進化を模索しています。  
- Firebase認証やAI連携技術の継続的な改善、ならびに利用状況に応じた運用の最適化を図り、ユーザーが直感的に操作できるシステムの実現を目指していきます。

私としては、今回のMVPリリースを通じ、プロダクトの根幹となる設計思想や運用面の課題を明確に把握することができました。これらの知見を次回以降のリリースや機能追加の改善点として活かし、ユーザーにとって使いやすく革新的なタスク管理ツールへと進化させていく所存です。

---

### 7. まとめ

本記事では、Firebase認証をはじめとする最新技術と、AIによるサブタスク自動生成機能を搭載したタスク管理システムのMVP開発プロセスについて、システム全体の構成、利用技術、主要機能の実装、そして開発時の課題と今後の展望を詳述しました。  
各セクションで解説した内容は、具体的な実装例と改善の方向性を示しており、同様のプロジェクトを検討する開発者にとって有益な情報となれば幸いです。  

本プロジェクトのMVPを通じ、シンプルながらも高度なタスク管理機能、安全な認証、そしてAI連携の可能性について多くの示唆を得ることができました。今後もユーザーフィードバックを積極的に取り入れ、品質向上と機能拡充に努めていきます。