5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

なぜ生成AIでのアプリ開発がうまくいかないのか?成功の鍵は『事前のタスクリスト作成』にある

Last updated at Posted at 2025-09-01

はじめに

はじめまして。株式会社アイ・ティー・ワンの松尾と申します。
普段はAWSやFlutterを使った自社ソリューションサービスの開発を行っています。

最近、「生成AIで開発が爆速になる!」という話をよく聞きますが、実際に使ってみると思ったより上手くいかない経験をされた方も多いのではないでしょうか?

私は生成AIツールを1年以上業務で使い続ける中で、機能開発が5日から1日に短縮されるほどの生産性向上を実現しています。その経験から分かったことは、生成AI開発成功の鍵は 「事前のタスクリスト作成」 にあるということです。

今回は、なぜ生成AI開発が失敗するのか、そしてどうすれば成功するのかを実体験を基にお伝えします。

生成AI開発でよくある失敗パターン

まず、生成AI開発でよくある失敗パターンを見てみましょう。

失敗パターン①:曖昧な指示で迷走する

よくある場面:

👤「ログイン機能を作ってください」
🤖「承知しました。基本的なログイン画面を作成します...」
👤「違います。SSOが必要です」
🤖「申し訳ございません。SAML SSOを実装します...」
👤「いや、Google SSOです。あと、既存のユーザー管理システムと連携する必要があります」

この例では、最初の「ログイン機能」という曖昧な指示が原因で、何度も修正が必要になっています。

失敗パターン②:実装範囲の認識齟齬

よくある場面:

  • AIが想定していた実装と、人間が期待していた実装が異なる
  • 関連する既存コードへの影響を考慮していない
  • テストやエラーハンドリングが抜け落ちる

これらの失敗パターンには、共通する根本原因があります。

失敗の根本原因:「計画不足」と「情報共有不足」

根本原因①:人間とAIの認識齟齬

生成AIは非常に賢いですが、人間の頭の中にある「暗黙の前提」を読み取ることはできません。

  • プロジェクトの技術スタック
  • 既存システムとの連携要件
  • UI/UXの期待値
  • パフォーマンス要件
  • セキュリティ要件

これらが明確に伝えられていないと、AIは自分なりの解釈で実装を進めてしまいます。

根本原因②:段階的な情報開示による手戻り

「まずは簡単に作ってもらって、後から要件を追加しよう」という進め方は、結果的に大きな手戻りを生みます。

❌ よくある失敗パターン
1. 「ログイン画面を作って」
2. (基本的なログイン画面が完成)
3. 「あ、SSOも必要です」
4. (SSOを追加実装)
5. 「既存のユーザー管理と連携も...」
6. (大幅な設計変更が必要に)

根本原因③:コンテキストの消失

長時間の開発作業中に、最初の要件や制約条件をAIが忘れてしまい、一貫性のない実装になってしまいます。

解決策:「事前のタスクリスト作成」が成功の鍵

これらの問題を解決するのが 「事前のタスクリスト作成」 です。

実装を開始する前に、詳細で具体的なタスクリストを作成することで:

人間とAIの認識を統一できる
手戻りを最小限に抑えられる
一貫した実装が可能になる
進捗の可視化ができる
コードレビューが効率化される

なぜタスクリストが効果的なのか?

1. 「暗黙の前提」を明文化できる

✅ 良い例:詳細なタスクリスト
## Google SSOログイン機能実装

### 前提条件
- プロジェクト:Flutter + AWS Amplify Gen2
- 既存認証:Cognito User Pool使用中
- デザイン:既存のボタンスタイルを踏襲

### 実装要件
1. Google OAuth 2.0 による認証フロー
2. 既存のメール/パスワードログインとの併用
3. ユーザー情報の自動マッピング(email, name)
4. エラーハンドリング(認証失敗、ネットワークエラー)

2. 実装範囲を事前に明確化

曖昧な「ログイン機能を作って」ではなく、具体的な機能要件、技術要件、制約条件を明文化することで、期待する実装と実際の実装のズレを防げます。

3. 段階的な実装が可能

大きな機能を細かなタスクに分解することで、各段階での確認と修正が容易になります。

✅ 段階的アプローチ
1. 【バックエンド】Cognito Identity Provider設定
2. 【バックエンド】Google OAuth設定
3. 【フロントエンド】ログインボタンUI作成
4. 【フロントエンド】認証フロー実装
5. 【共通】エラーハンドリング実装
6. 【テスト】各段階でのテスト実装

タスクリスト作成のポイント

タスクリストは必ずマークダウン(.md)形式で作成しましょう。チェックボックスで進捗管理ができ、Gitで履歴管理も可能です。

スクリーンショット 2025-08-31 16.01.33.png

生成AIツール選択のポイント:Cursorが優れている理由

タスクリスト駆動開発を成功させるには、適切な生成AIツールの選択も重要です。

Cursor の主な特徴

Cursorは、AIが統合されたコードエディタです。Visual Studio Codeをベースに作られており、VSCodeの使い慣れた操作感を保ちながら、AI機能がシームレスに統合されています。

Curosr画面

なぜ Cursor がタスクリスト駆動開発に適しているか

1. Agentモードによる自律実装

ChatGPTなどは、都度コードを渡す必要がありますが、Cursorだと自律的にコードを作成、修正していきます。フォルダの作成、リネーム、コマンドの実行、Web検索なども自律的に行なってくれます。

👤「タスクリストの『1-1. Cognito Identity Provider でGoogle設定追加』を実装してください」

🤖 Agent: 承知しました。以下の手順で進めます:
1. amplify/auth/resource.ts を確認
2. Google Identity Provider設定を追加  
3. 必要な環境変数を.env.exampleに追加
4. 設定の妥当性をチェック

実装を開始します...

2. Cursor Rules(.mdcファイル)でルール化

プロジェクト固有のルールや制約を.mdcファイルで定義することで、AIが常に適切なコンテキストを理解できます。この機能により、プロジェクト構成などを毎度AIに渡す手間が省けます。

スクリーンショット 2025-08-31 15.40.20.png

実例:Flutter × Amplify Gen2 でのタスクリスト駆動開発

私たちのプロジェクトでは Flutter(フロントエンド)AWS Amplify Gen2(バックエンド) を採用しています。この技術構成が、なぜ生成AI開発に適しているのかをご説明します。

Flutter × Amplify Gen2 が生成AI開発に適している理由

1. コードファーストで構成が明確

// amplify/auth/resource.ts
export const auth = defineAuth({
  loginWith: {
    email: true,
    externalProviders: {
      google: {
        clientId: secret("GOOGLE_CLIENT_ID"),
        clientSecret: secret("GOOGLE_CLIENT_SECRET"),
      }
    }
  }
});

Amplify Gen2では、インフラもアプリケーションもすべてTypeScriptコードで定義されます。これにより:

✅ 生成AIがプロジェクト構成を理解しやすい
✅ 設定ファイルの場所とフォーマットが明確
✅ 変更履歴をGitで管理可能

2. クロスプラットフォーム対応でタスクが効率化

Flutterの単一コードベースにより:

✅ iOS/Android両方を同時に実装
✅ プラットフォーム固有の作業が最小限
✅ 生成AIに渡すコンテキストが統一

実際の開発の進め方

それでは、私たちが実際にどのような流れで生成AI開発を進めているかをご紹介します。

1. .mdcファイルを使用したタスクリスト作成

私たちのプロジェクトでは、タスクリスト作成のルールを.mdcファイルで定義しています。これによりCursorが効果的なタスクリストを自動作成してくれます。

create-tasklist.mdcの内容
---
description: タスクリスト作成時のルールと指針を定義します
globs: 
alwaysApply: false
---

# タスクリスト作成ルール

## ファイル命名規則
### ファイル名フォーマット
docs/tasks/YYYYMM/YYYYMMDD_タスクリストの英語名.md

### 日付の確認方法
タスクリスト作成時は、以下のコマンドで現在の日付を確認してください:
date "+%Y%m%d"

## タスクリスト構成要素

### 1. バックエンドの修正・追加
- **対象**: AWS Amplify Gen2関連ファイル
- **修正の場合**: 修正対象のファイル名を明記、修正の目的と概要
- **新規追加の場合**: 新規作成するファイル名とパスを明記、必要なAWSリソース

### 2. フロントエンドの修正・追加
- **対象**: Flutter関連ファイル  
- **修正の場合**: 修正対象のファイル名を明記、UI/UXへの影響
- **新規追加の場合**: 新規作成するファイル名とパスを明記、新しい画面・コンポーネントの仕様

## 作成時の注意点
### ファイル指定の詳細度
- **良い例**: `lib/screens/chat/chat_screen.dart`
- **悪い例**: `チャット画面のファイル`

### 実装内容の説明
- 具体的なコードは記載せず、機能や目的を説明する
- 「何を」「なぜ」実装・修正するかを明確にする

作成フロー:

  1. Cursorでタスクリスト生成
  2. AIとの対話で詳細化
  3. 反復改善で完成

スクリーンショット 2025-08-31 15.48.23.png

2. PR作成とレビュー

タスクリストが完成したら、以下の流れで進めます:

2-1. タスクリストのPR作成

作成したタスクリストをGitにプッシュし、プルリクエストを作成します。

2-2. 開発リーダーによるレビュー

開発リーダーによるタスクリストのレビューでは、以下の観点を確認します:

レビューポイント:

  • 実装タスクは具体的で実行可能か
  • ファイル単位でタスクが分割されているか
  • 依存関係が適切に整理されているか
  • エラーハンドリングやテストが含まれているか

メリット:

  • チーム全体でタスクの妥当性を確認できる
  • メンバーと開発リーダーとの間で認識齟齬があった場合に、このタイミングで気づくことができる
  • タスクリストがドキュメントとしても機能する

3. Agentモードでの実装

レビュワーからの承認が出たら、実装フェーズに移ります。
作成したタスクリストを基に、AgentモードのAuto runで実装を進めます:

実際のAgentモード使用例:

スクリーンショット 2025-08-31 15.54.47.png
スクリーンショット 2025-08-31 15.55.37.png

Agent使用時の注意点: 一度に複数タスクを依頼せず、1つずつ完了を確認しましょう。エラーが発生したら一度Stopして、内容を確認してから再開することが重要です。

4. テストコードの作成

実装完了後、テストコードを作成します。

まとめ:生成AI開発成功の鍵は「事前のタスクリスト設計」

現在の生成AIには限界があります。簡単なアプリは曖昧な指示でも作れますが、複雑なシステムでは詳細なタスクリストなしに迷走してしまいます。

だからこそ、事前のタスクリスト作成が生成AI時代の必須スキルなのです。

成功の公式
✅ 詳細な計画(タスクリスト)→ AI実装 = 成功
❌ 曖昧な依頼 → AI が推測で実装 = 失敗

生成AIは優秀な「実装パートナー」ですが、「プロジェクトマネージャー」ではありません。

生成AI開発の成功は「技術力」よりも「設計力」で決まります。

今日から始められるアクション

  1. やりたいことを言語化する: 次回の開発で作りたい機能を、mdファイルに詳細に書き出してみる
  2. 曖昧な部分を明確にする: 「ログイン機能」ではなく「Google SSOでの認証」など、具体的な要件を整理する
  3. 小さな改修から実践: 既存機能の軽微な改修で、タスクリスト作成→AI実装の流れを試してみる

詳細で具体的なタスクリスト作成という、一見地味な作業が、実は生産性向上の最大の鍵なのです。

ぜひ、次回のプロジェクトから「事前のタスクリスト設計」を取り入れてみてください。きっと開発体験が大きく変わるはずです。

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?