【初心者】Cursorで「作業記録アプリ」を爆速開発③|AI駆動開発のコツを公開

目次

この記事で分かること

プログラミングができないから、アプリを開発するのは無理…

そんな常識が、AI技術の進歩によって覆されています。今では、プログラミング未経験の方でも、AIを相棒にすることで本格的なアプリ開発が可能になりました。

この記事では「作業記録アプリ」を題材にして、AI駆動開発の具体的な方法を分かりやすく解説します。

プログラミング未経験の方も、この記事を参考にしでアプリ開発にトライしてみてください!

この記事のポイント
  • コーディング作業を全てAIに任せる具体的な方法
  • 開発の手戻りが発生しづらくするための工夫
  • 作業記録アプリの設計・実装内容

Cursorとは?

AI駆動開発に欠かせないツールが「Cursor」です。

このツールを一言で説明するとAIがコードを書いてくれる魔法のエディタ」です。

エディタとは?
  • エディタは、テキストファイルやコードを作成・編集するためのソフトウェアです。
  • メモ帳のようなシンプルなものから、Visual Studio CodeやVimのような高機能なものまで様々な種類があります。

従来のプログラミングでは、エラーが出るたびに検索して解決策を探したり、複雑な文法を覚えたりする必要がありましたが、Cursorなら日本語で「〇〇を作って」と指示するだけで、AIが実際に動くコードを生成してくれます。

Cursorの特徴

  • 自然言語での指示が可能:
    • 「ログイン画面を作って」「データベースに保存する機能を追加して」など、普通の会話でコードを作成
  • リアルタイムでのコード修正:
    • エラーが発生しても、AIが瞬時に原因を特定し、修正案を提示
  • 既存コードの理解:
    • プロジェクト全体を把握して、一貫性のあるコードを生成
  • 多言語対応:
    • Python、JavaScript、HTML/CSSなど、様々なプログラミング言語に対応

Cursorの料金プラン

Cursorには以下の料金プランがあります:

  • 無料プラン:
    • 基本的な機能を体験可能(月間利用制限あり)
  • Proプラン(月額20ドル):
    • 本格的な開発に必要な機能がフル活用可能
  • Urtraプラン(月額200ドル):
    • 最高性能のAI機能を提供する最上位プラン

実際の開発ではProプランの利用をおすすめします。

無料プランでは月間の利用制限があるため、継続的な開発作業には向いていません。Proプランなら、AIとの対話回数を気にせず、思う存分アプリ開発に集中できます。

また、Proプランには2週間の無料トライアルが用意されています。なので、まずはこのトライアルで実際にAI駆動開発の威力を体験してみることをおすすめします。2週間あれば、簡単なアプリを一つ完成させることも十分可能です。

実際に開発したアプリ

ここからは、Cursorで開発した「作業記録アプリ」を解説します。

[概要]
日々の作業内容、時間を簡単に記録・管理できるWebアプリケーション

[解決したい課題]

  • 誰の: 日々の積み重ねを実感できない人
  • 何を: 「何をどれだけ達成したか分からない」という成果が実感できない問題
  • どうやって: ゲーミフィケーション要素を取り入れて達成感を演出する

[使用ツール]
Cursor, GitHub

[プログラミング言語]
JavaScript(React)

実際に開発した「家計簿アプリ」

開発した作業記録アプリはWeb公開しているので、お気軽にアクセスしてみてください。

機能①:作業記録

「ユーザーの作業時間を記録」

機能説明
  • ワンクリックでの作業開始/停止/終了記録
  • 作業内容のメモ・コメント登録

機能②:作業ストリーク(連続記録)

「作業をゲーム化し、達成目標を設定することでモチベーションを維持する」

機能説明
  • 「3日連続1時間以上作業」「5日連続タスク完了」など小さなストリークを可視化
  • ストリーク継続中は画面上の植物やペットが成長する演出(ユーザーが親しみやすいものを選択)
  • ストリークが途切れても「新記録に挑戦!」として前向きにリスタート

機能③:カレンダー表示

「いつ・どんな作業を行ったかが一目でわかる」

<表示タイプ:月>

<表示タイプ:週>

機能説明
  • 日付ごとに実行したタスクを、カテゴリ別に色を分けて表示
  • 各日のタスク数や作業時間が棒グラフや濃淡で表現
  • 特定の日付をクリックするだけでその日の詳細なタスク内容にアクセス

開発プロセス

まずはじめに、Cursorでの開発ではあなたがコードを書く必要は一切ありません。

AIが全てのコーディング作業を担当し、あなたは「こんなアプリが欲しい」「ここをこう変えて」と指示するだけ。
まるで優秀なプログラマーを雇ったような感覚で開発が進められます。

では、実際の開発プロセスを見ていきましょう。私が実践した流れは以下の通りです。

前回の開発

前回は「家計簿アプリ」を開発しました。開発内容が気になる方は、以下のブログ記事からご確認ください。

ステップ①:「@Docs」機能の設定

「@Docs」機能は、外部のドキュメントやAPIリファレンスをCursorのAIに学習させ、コーディング時のコンテキストとして活用できる機能です。

この機能により、開発中に必要なドキュメントの情報をAIが理解し、より精度の高いコード提案やアドバイスを受けることができます。

■設定方法

ファイル > ユーザー設定 > Cursor Settings > Indexing &Docs

設定追加した外部ドキュメント

Reactでアプリ開発する際に、よく参照する下記のドキュメントを設定しました。

  • React公式ドキュメント
    • コンポーネント設計、Hooks、状態管理の基本
    • URL: https://react.dev/
  • TypeScript
    • 型定義、インターフェース設計
    • URL: https://www.typescriptlang.org/docs/
  • ルーティングライブラリ
    • React Router等、ナビゲーション実装
    • URL: https://reactrouter.com/
  • 状態管理ライブラリ
    • データ(状態)を効率的に管理・共有 – Zustand
    • URL: https://docs.pmnd.rs/zustand/
  • UIコンポーネントライブラリ
    • Material-UI
    • URL: https://mui.com/

ステップ②:Reactプロジェクト作成

やることは簡単で、下記コマンドをターミナルで実行しましょう。

npx create-react-app task-tracker --template typescript

・上記コマンドの「task-tracker」の箇所は、好きな名前に変えてください。
・ここで設定した名前で新規ディレクトリが作成され、その配下にアプリに必要なファイルが自動生成されます。

■Cursorでのコマンド実行画面

AIに「Reactプロジェクトを新規作成したい」と指示を出したら、AIがコマンド生成してくれて、そのチャット画面内でもコマンドを実行できます。

実行コマンドの解説

npx create-react-app task-tracker --template typescriptコマンドは、Reactアプリケーション開発に必要なすべてを自動生成する便利なツールです。

実行すると「todo-app」フォルダが作られ、その中にReactの

  • 基本ファイル構造
  • 設定ファイル(package.json)
  • サンプルコード(App.js)
  • HTMLテンプレート(index.html)

などが配置されます。

また、開発サーバーやビルドツールも同時にインストールされるため、コマンド一つで本格的なReact開発環境が完成し、初心者でもすぐにコーディングを始められます。

ステップ③:プロジェクトルール作成

プロジェクトルールは、いわばAIへの「取扱説明書」のようなものです。
Cursorでは、プロジェクトルールを一度設定すれば開発全体を通してAIが一貫した高品質なコードを生成してくれます。

①作成方法

Cursorのチャット画面で/Generate Cursor Rulesを入力して送信するだけで、プロジェクトルールを自動生成してくれます。今回は上記コマンドに加えて、「開発アプリの概要」も記載してみました。

■プロンプトの全文

/Generate Cursor Rules 
下記のプロジェクトルールを作成してください。
 ・アプリの要件定義
 ・アーキテクチャ設計
 ・コンポーネント設計
 ・コーディング規約

#開発アプリの概要
基本情報
概要: 日々の作業内容、時間を簡単に記録・管理できるWebアプリケーション
技術: React、ローカルストレージ

🎯 解決する課題
誰の: 日々の積み重ねを実感できない人
何を: 「何をどれだけ達成したか分からない」という成果が実感できない問題
どうやって: ゲーミフィケーション要素を取り入れて達成感を演出する
 
⚙️ 主要機能
作業記録
 - ワンクリックでの作業開始/停止/終了記録
 - 作業内容のメモ・コメント登録
作業ストリーク(連続記録)
 - 「3日連続1時間以上作業」「5日連続タスク完了」など小さなストリークを可視化
 - ストリーク継続中は画面上の植物やペットが成長する演出(ユーザーが親しみやすいものを選択)
 - ストリークが途切れても「新記録に挑戦!」として前向きにリスタート
カレンダー表示
 - 日付ごとに実行したタスクを、カテゴリ別に色を分けて表示
 - 各日のタスク数や作業時間が棒グラフや濃淡で表現
 - 特定の日付をクリックするだけでその日の詳細なタスク内容にアクセス

🔧 技術的工夫
ローカルストレージ活用でオフライン対応とプライバシー保護を実現
無料APIの効率的活用でコスト0運用

プロジェクトルールは.cursor/rulesディレクトリに保存されます。(ファイルの拡張子は.mdc

②「Rule Type」の設定

プロジェクトルールでは、ファイル毎にルールの提供タイミングを設定できます。

プロジェクトルールの適用タイミング
  1. Always(常時適用)
    • 常にモデルのコンテキストに含まれる。
    • チャットやインライン編集を使用する際に、自動的に適用される。
  2. Auto Attached(自動添付)
    • 指定されたglobパターンにマッチするファイルが参照された時に適用される。
    • 例:*.tsパターンのルールは、TypeScriptファイルを扱う際に自動的に適用。
  3. Agent Requested(エージェント要求)
    • AIが必要と判断した時に自動的に含まれる。
    • 説明(description)が必要で、AIがその説明を基に関連性を判断。
  4.  Manual(手動)
    • @ruleNameで明示的に言及された時のみ適用される。
    • 手動で呼び出すまで適用されない。

実際に作成したプロジェクトルール

今回の開発では、下記4つのルールファイルを作成しました。

  • コーディング規約
  • アーキテクチャ設計
  • アプリの要件定義
  • コンポーネント設計
1. コーディング規約

「どんなコードを書いてほしいか」をAIに伝える

---
alwaysApply: true
---

# コーディング規約

## 1. 命名規則

### コンポーネント

- PascalCase を使用

```typescript
const TaskList = () => { ... }
const UserProfile = () => { ... }
```

### 関数・変数

- camelCase を使用

```typescript
const handleSubmit = () => { ... }
const userData = { ... }
```

### 定数

- SNAKE_CASE を使用

```typescript
const MAX_TASKS = 100;
const API_ENDPOINT = "https://api.example.com";
```

## 2. TypeScript 規約

### 型定義

- インターフェースにはプレフィックス'I'を付けない
- 型エイリアスは目的を明確に示す名前をつける

```typescript
interface Task {
  id: string;
  title: string;
  completed: boolean;
}

type TaskStatus = "pending" | "in_progress" | "completed";
```

### Null/Undefined

- null の代わりに undefined を使用
- オプショナルチェイニングを活用

```typescript
const value = obj?.prop?.subProp;
```

## 3. React コンポーネント規約

### コンポーネント定義

- 関数コンポーネントを使用
- Props 型定義を必須化

```typescript
interface ButtonProps {
  onClick: () => void;
  children: React.ReactNode;
}

const Button: React.FC<ButtonProps> = ({ onClick, children }) => {
  return <button onClick={onClick}>{children}</button>;
};
```

### フック規約

- カスタムフックは'use'プレフィックスを使用
- 依存配列は必ず指定

```typescript
const useTaskStatus = (taskId: string) => {
  const [status, setStatus] = useState<TaskStatus>("pending");

  useEffect(() => {
    // 処理
  }, [taskId]);

  return status;
};
```

## 4. スタイリング規約

### CSS Modules

- コンポーネント名と同じ名前で.module.css ファイルを作成
- クラス名はケバブケース

```css
.task-container {
  margin: 1rem;
}
```

### レスポンシブデザイン

- モバイルファーストアプローチ
- メディアクエリのブレークポイントを統一

## 5. コメント規約

### JSDoc

- 公開コンポーネントとフックには必ず JSDoc を記述

```typescript
/**
 * タスクの詳細を表示するコンポーネント
 * @param {TaskDetailProps} props - タスク詳細のProps
 * @returns {JSX.Element} タスク詳細のUI
 */
```

### インラインコメント

- 複雑なロジックには説明を追加
- TODO/FIXME コメントには課題番号を記載
---

効果:
• AIが生成するコードの品質が安定する
• 後から見返した時に理解しやすいコードになる
• バグが発生しにくい堅牢なコードが生成される

適用タイミング:
Always(常時適用)

2.アーキテクチャ設計

「どんな構造でアプリを作ってほしいか」をAIに伝える

---
alwaysApply: true
---

# アーキテクチャ設計

## ディレクトリ構造

```
src/
├── components/       # 再利用可能なUIコンポーネント
├── pages/           # ページコンポーネント
├── hooks/           # カスタムフック
├── services/        # ビジネスロジック
├── store/           # 状態管理
├── types/           # 型定義
├── utils/           # ユーティリティ関数
└── constants/       # 定数定義
```

## レイヤー構造

### 1. Presentation Layer

- UI コンポーネント
- ページコンポーネント
- カスタムフック

### 2. Application Layer

- サービス
- 状態管理(LocalStorage 連携)

### 3. Domain Layer

- エンティティ
- 値オブジェクト
- リポジトリインターフェース

### 4. Infrastructure Layer

- LocalStorage 実装
- 外部 API 連携

## 状態管理設計

### LocalStorage

- タスクデータ
- ユーザー設定
- ストリーク情報

### アプリケーション状態

- 現在の作業タスク
- タイマー状態
- UI 表示状態

## ファイル参照規則

- [App.tsx](mdc:src/App.tsx) - アプリケーションのエントリーポイント
- [index.tsx](mdc:src/index.tsx) - React アプリケーションのルート
- [components/](mdc:src/components) - 共通コンポーネント格納ディレクトリ
  description:
  globs:
  alwaysApply: false

---

実際の効果:
• プロジェクト全体で一貫した構造が保たれる
• 新しい機能を追加する時も迷わない
• ファイルの場所が予測しやすくなる

適用タイミング:
Always(常時適用)

3.要件定義

「どんなアプリを作りたいか」をAIに伝える

---
alwaysApply: true
---

# Task Tracker プロジェクト要件定義

## プロジェクト概要

- 日々の作業内容と時間を記録・管理する Web アプリケーション
- 技術スタック: React + TypeScript + ローカルストレージ
- ターゲットユーザー: 日々の積み重ねを実感したい人

## 機能要件

### 1. タスク管理基本機能

- タスクの作成・編集・削除機能
- タスクステータス管理(未着手・進行中・完了)
- 作業時間の記録(開始/停止/終了)
- タスクへのメモ・コメント追加

### 2. ストリーク管理機能

- 連続作業日数のトラッキング
- 達成ストリークの表示
- ビジュアルフィードバック(植物/ペット成長)
- ストリーク途切れ時の前向きなリスタートメッセージ

### 3. カレンダー機能

- 日別タスク一覧表示
- カテゴリー別色分け表示
- 作業時間の可視化(棒グラフ/濃淡表現)
- 日付別詳細表示

## 非機能要件

### 1. パフォーマンス

- 初期読み込み時間:2 秒以内
- 操作レスポンス:0.5 秒以内

### 2. 可用性

- オフライン動作対応
- ブラウザ対応:最新の Chrome、Firefox、Safari、Edge

### 3. セキュリティ

- データはローカルストレージのみで管理
- センシティブなデータは暗号化して保存
  description:
  globs:
  alwaysApply: false

---

実際の効果:
• AIが機能の目的を理解して適切なコードを生成
• 一貫したユーザー体験が実現される
• 開発途中で方向性がブレなくなる

適用タイミング:
Always

④コンポーネント構造

Reactでコンポーネントを整理整頓するルールをAIに伝える

---
alwaysApply: true
---

# コンポーネント設計

## 共通コンポーネント

### TaskItem

```typescript
interface TaskItemProps {
  id: string;
  title: string;
  status: "pending" | "in_progress" | "completed";
  onUpdate: (task: Task) => void;
  onDelete: (id: string) => void;
}
```

### Timer

```typescript
interface TimerProps {
  initialTime?: number;
  onStart: () => void;
  onStop: () => void;
  onReset: () => void;
}
```

### Calendar

```typescript
interface CalendarProps {
  tasks: Task[];
  onDateSelect: (date: Date) => void;
}
```

### StreakDisplay

```typescript
interface StreakDisplayProps {
  streakData: StreakData;
  visualType: "plant" | "pet";
}
```

## ページコンポーネント

### Dashboard

- タスク一覧表示
- 現在の作業状況
- ストリーク表示
- クイックアクション

### TaskDetail

- タスク詳細情報
- 作業時間記録
- メモ・コメント管理

### CalendarView

- 月別・週別表示
- タスクサマリー
- 作業時間集計

## コンポーネント設計原則

1. 単一責任の原則

- 各コンポーネントは 1 つの明確な役割のみを持つ
- 複雑な機能は小さなコンポーネントに分割

2. Props インターフェース

- 全ての Props は明示的な型定義を持つ
- 必須の Props と任意の Props を明確に区別

3. 状態管理

- ローカル状態は useState で管理
- グローバル状態はカスタムフックで抽象化

4. エラーハンドリング

- エラー境界の適切な設置
- ユーザーフレンドリーなエラーメッセージ

5. パフォーマンス最適化

- メモ化(useMemo, useCallback)の適切な使用
- 不要な再レンダリングの防止
  description:
  globs:
  alwaysApply: false

---

実際の効果:
・ コードが探しやすくなる
・同じものを何度も作らなくて済む

適用タイミング:
Always

ステップ④:進捗管理ファイル作成

開発作業の進捗管理を行うファイルを作成することで、開発の迷子状態を防ぎ、効率的に進めることができます。今回の開発では、progress.mdファイルを作成し、AIに指示を出した後に開発進捗を記録・更新させるようにします。

# Machi Quest 進捗管理
## 作業状態の定義
- ✅ 完了:作業が完了し、レビューも通過
- 🔄 進行中:現在作業を実施中
- ⏳ 待機中:依存タスクの完了待ちなど
- ❌ 未着手:まだ作業を開始していない
## 1. プロジェクト基盤構築
- ✅ プロジェクト初期化(Create React App + TypeScript)
- ✅ 開発用メモシステム構築
  - ✅ コンポーネント設計メモ
  - ✅ プロジェクトルール設定
- ❌ 基本設定ファイル
  - ❌ TypeScript 設定
  - ❌ ESLint 設定
  - ❌ Prettier 設定
  - ❌ パッケージ依存関係の整理
- ❌ ディレクトリ構造の作成
  - ❌ 型定義ディレクトリ
  - ❌ 定数ディレクトリ
  - ❌ ユーティリティディレクトリ
  - ❌ サービスディレクトリ
  - ❌ フックディレクトリ
  - ❌ コンテキストディレクトリ
  - ❌ コンポーネントディレクトリ
  - ❌ スタイルディレクトリ
## 2. データ型・定数・ユーティリティ
### 2.1 データ型定義
- ❌ ユーザー情報型
- ❌ 歩行記録型
- ❌ クエスト型
- ❌ コース型
### 2.2 定数定義
- ❌ アプリ定数
- ❌ クエスト定数
- ❌ エラーメッセージ定数
### 2.3 ユーティリティ関数
- ❌ 日付処理ユーティリティ
- ❌ 距離計算ユーティリティ
- ❌ バリデーション関数
## 3. データ管理・永続化
### 3.1 ローカルストレージ管理
- ❌ localStorage 操作カスタムフック
- ❌ データ永続化サービス
### 3.2 状態管理
- ❌ ユーザー情報コンテキスト
- ❌ アプリ設定コンテキスト
- ❌ 歩行記録コンテキスト
## 4. デザインシステム・スタイリング
### 4.1 デザインシステム
- ❌ テーマ定義
- ❌ グローバルスタイル
- ❌ レスポンシブブレークポイント定義
### 4.2 スタイリング基盤
- ❌ CSS Modules または Styled Components の設定
- ❌ コンポーネント別スタイルファイル
## 5. 共通コンポーネント実装
### 5.1 汎用コンポーネント
- ❌ Button コンポーネント
- ❌ Input コンポーネント
- ❌ Modal コンポーネント
- ❌ Loading コンポーネント
- ❌ ErrorBoundary コンポーネント
### 5.2 レイアウトコンポーネント
- ❌ Header コンポーネント
- ❌ Footer コンポーネント
- ❌ MainLayout コンポーネント
- ❌ Sidebar コンポーネント
## 6. コア機能実装
### 6.1 歩行記録機能(基盤機能)
- ❌ 歩行統計管理カスタムフック
- ❌ 歩行統計表示
- ❌ 歩数カウンター
- ❌ 達成バッジ表示
- ❌ 履歴グラフ
### 6.2 クエスト機能(ゲーム化要素)
- ❌ クエスト進捗管理カスタムフック
- ❌ クエスト一覧表示
- ❌ クエストカード
- ❌ クエスト進捗表示
- ❌ クエスト報酬表示
### 6.3 コース自動生成機能(メイン機能)
- ❌ 位置情報取得カスタムフック
- ❌ コース生成サービス
- ❌ コース生成メインコンポーネント
- ❌ コース生成フォーム
- ❌ コースプレビュー
- ❌ コース地図表示

作成することで得られるメリット:
・作業の見える化
・モチベーション維持
・問題解決の効率化

ステップ⑤:コーディング

進捗管理ファイルに記載の作業項目を、AIに実施するように指示を出します。

ここで注意することは、一度にすべての作業を依頼しないことです。AIもミスすることがあるので、全作業を実施した後にバグ回収を行うことになります。影響範囲が大きくなるので、こまめにアプリの挙動を確認しましょう。

開発時は下記のような依頼を出して、必要に応じて機能の修正依頼を出していました。

私の感触としては、AIモデルは「claude」がおすすめです。他のモデルと比較して、デザイン性の良い画面を生成してくれたり、エラー解決がスムーズな印象です。

ステップ⑥:動作確認

AIに作成してもらったアプリを起動して、ブラウザ画面からアプリの挙動を確認します。Reactでは、下記コマンドを実行するとブラウザが自動起動し、開発中アプリの挙動を確認できます。

npm start

開発で実感したAI駆動開発の威力

このアプリを開発する過程で、「コードを書く」という作業が一切ありませんでした。私がやったのは以下のような作業だけです:

  1. 「家計簿アプリに必要な機能を教えて」とAIに相談
  2. 「取引登録画面を作って」とAIに指示
  3. 「グラフがうまく表示されない」とAIに相談
  4. 「スマートフォンでも見やすくして」とAIに改善依頼

まさに「アイデアを言葉で伝えるだけ」でアプリが完成していく体験は、従来のプログラミングとは全く異なる新しい開発スタイルでした。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次