【初心者】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公開しているので、お気軽にアクセスしてみてください。

機能①:取引登録機能

「お金の出入りを簡単に記録」

機能説明
  • 金額入力:
    • 電卓形式で金額を入力できる簡単操作
  • カテゴリ選択:
    • 「食費」「交通費」「娯楽費」などをドロップダウンで選択
  • メモ機能:
    • 「◯◯スーパーで買い物」などの詳細を記録
  • 日付選択:
    • カレンダーから直感的に選択可能

機能②:ダッシュボード

「家計の状況を一目で把握」

機能説明
  • 今月の収支:
    • 収入と支出の差額を大きく表示
    • カレンダー形式で日にち毎の収支を表示
  • 予算との比較:
    • 設定した予算に対する達成率を表示
  • 収支の推移:
    • 収支の過去推移を折れ線グラフで表示
    • 表示期間は「6か月・1年・全期間」から選択可能

機能③:収支リスト

「過去の取引を管理・編集」

機能説明
  • 全取引の一覧表示:
    • 日付順で整理された見やすいリスト
  • 絞り込み:
    • 期間で絞り込み可能
  • 編集機能:
    • 間違った入力をその場で修正
  • 削除機能:
    • 不要な取引を安全に削除

機能④:カテゴリ管理

「自分に合ったカテゴリをカスタマイズ」

機能説明
  • デフォルトカテゴリ:
    • 「食費」「住居費」「交通費」など基本的なカテゴリを用意
  • カスタムカテゴリ:
    • 「ペット費」「習い事費」など個人に合わせて追加可能
  • カテゴリの編集・削除:
    • 不要なカテゴリの整理が可能
  • 色設定:
    • 各カテゴリに分かりやすい色を設定可能

機能⑤:予算設定

「目標を決めて計画的な家計管理を実現」

機能説明
  • 月別予算設定:
    • カテゴリごとに月の予算を設定
  • 予算の進捗表示:
    • 現在の支出が予算の何%かを表示
  • アラート機能:
    • 予算の80%に達したら通知
  • 予算vs実績比較:
    • 月末に予算と実際の支出を比較

開発プロセス

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

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

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

STEP
コンテキスト設定【手動】

★前回開発との差分:あり ※本作業を新規追加しました。

STEP
Reactプロジェクト作成【手動】

前回開発との差分:なし

STEP
プロジェクトルール作成【自動】

★前回開発との差分:あり ※

STEP
進捗管理ファイル作成【自動】

前回開発との差分:なし

STEP
コーディング【自動】

前回開発との差分:なし

STEP
アプリ確認【手動】

前回開発との差分:なし

前回開発との差分

前回は「タスク管理アプリ」を開発しましたが、前回開発の反省点を踏まえて下記作業で改善を行っています。

  • STEP1: ユーザールールの設定
  • STEP3:プロジェクトルールの作成

 ※具体的な改善内容は以降で詳細解説します。

また、前回の開発内容が気になる方は、以下のブログ記事からご確認ください。

ステップ①:「@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 money-tracker --template typescript

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

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

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

実行コマンドの解説

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

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

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

などが配置されます。

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

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

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

前回からの改善点

前回開発では、開発作業の終盤になると「プロジェクトルール」に準拠していないケースが多々見られました。

そのような事象を防ぐためにも、各プロジェクトルールの冒頭に「ファイルが読み込まれたことを確認する出力」を追加ました。

具体的には、AIに「最初に必ず『Read xxx.mdc』と出力してから回答する」ような指示を入れることで、ルールが適用されているかどうかを毎回確認できるようになります。この対応によって、プロジェクトルールが読み込まれていない場合は開発者側から指摘できるようになるので、解決が期待できます。

①ルールファイルの作成

Cursorのチャット画面で下記テキストを入力して送信するだけで、プロジェクトルールを自動生成してくれます。

/Generate Cursor Rules

プロジェクトルールは.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に伝える

# AI 指示: このファイルを読み込んだら、回答の冒頭に「Read coding-standards.mdc」を出力してください

# コーディング規約

## 全般

- TypeScript を使用し、型定義を厳密に行う
- ESLint と Prettier を使用してコードの品質とフォーマットを統一
- コメントは日本語で記述
- React 19 の最新機能を活用する

## 使用技術スタック

### フレームワーク・ライブラリ

- **React 19**: 最新の React 機能(Hooks、Concurrent Features 等)を活用
- **TypeScript**: 厳密な型定義とインターフェース設計
- **React Router v7**: 最新のルーティング機能を活用
- **Redux Toolkit**: 型安全な状態管理(将来的に Zustand への移行を検討)
- **Material-UI (MUI) v7.20**: UI コンポーネントライブラリ
- **Emotion**: CSS-in-JS スタイリング
  - `@emotion/react`: ^11.14.0
  - `@emotion/styled`: ^11.14.0

### 開発ツール

- **ESLint + Prettier**: コード品質・フォーマット
- **PostCSS**: CSS 処理

## 命名規則

- コンポーネント: PascalCase (例: `ExpenseList.tsx`)
- 関数・変数: camelCase (例: `getMonthlyTotal`)
- 定数: SNAKE_CASE (例: `MAX_AMOUNT`)
- インターフェース: 接頭辞に`I`をつける (例: `IExpense`)
- 型定義: 接頭辞に`T`をつける (例: `TCategory`)
- カスタムフック: `use`で始める (例: `useExpense`)

## React 開発規約

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

- 関数コンポーネントと Hooks を使用
- Props 型は必ず定義
- コンポーネントは単一責任の原則に従う
- 再利用可能なコンポーネントは`components/common`に配置
- React 19 の新機能(use client、use server 等)を適切に活用

### Hooks 使用規約

- カスタムフックは`hooks/`ディレクトリに配置
- 副作用は`useEffect`で適切に管理
- 状態管理は用途に応じて適切な Hook を選択
  - ローカル状態: `useState`
  - グローバル状態: Redux Toolkit
  - サーバー状態: 将来的に React Query 等を検討

### 型定義規約

- TypeScript の厳密な型チェックを活用
- インターフェースと型エイリアスを適切に使い分け
- ジェネリクスを活用した再利用可能な型定義
- ユニオン型とリテラル型を積極的に活用

## Material-UI 使用規約

### バージョン管理

- **MUI v7.20**を使用
- 新機能追加時は最新の v7 系を検討
- 破壊的変更がある場合は事前にチームで協議

### コンポーネント選択

- MUI の基本コンポーネントを優先使用
- カスタマイズが必要な場合は`sx`プロパティまたは Emotion を使用
- テーマシステムを活用した一貫したデザイン

### スタイリング

- MUI の`Box`、`Stack`等のレイアウトコンポーネントを活用
- `sx`プロパティでインラインスタイリング
- 複雑なスタイルは Emotion の`styled`を使用
- レスポンシブデザインは MUI のブレイクポイントシステムを活用

### テーマ設定

- カスタムテーマでブランドカラーとデザイントークンを定義
- ダークモード対応を考慮したテーマ設計
- アクセシビリティを考慮したコントラスト比の設定

## ルーティング規約

### React Router v7

- 最新のデータルーター機能を活用
- ルート定義は`routes/`ディレクトリで管理
- 遅延読み込み(lazy loading)を適切に実装
- エラーバウンダリーとローディング状態の管理

### ナビゲーション

- プログラム的ナビゲーションは`useNavigate`を使用
- 現在のルート情報は`useLocation`で取得
- パラメータ取得は`useParams`を使用

## 状態管理規約

### Redux Toolkit

- Slice パターンを使用した状態管理
- 非同期処理は`createAsyncThunk`を使用
- イミュータブルな状態更新を徹底
- 型安全なアクションとリデューサーの実装

### ローカル状態

- コンポーネント固有の状態は`useState`を使用
- 複雑な状態ロジックはカスタムフックに分離
- フォーム状態は`useForm`等の専用ライブラリを検討

## スタイリング規約

### CSS Modules

- コンポーネント固有のスタイルは CSS Modules を使用
- グローバルスタイルは`styles/`ディレクトリで管理
- CSS 変数を使用したテーマ管理

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

- モバイルファーストのアプローチ
- MUI のブレイクポイントシステムを活用
- タッチデバイスを考慮した UI 設計

## パフォーマンス最適化

### React 最適化

- `React.memo`で不要な再レンダリングを防止
- `useMemo`と`useCallback`の適切な使用
- コード分割と遅延読み込みの実装

### バンドル最適化

- Tree shaking の活用
- 動的インポートによるコード分割
- 画像の最適化

## アクセシビリティ

### WCAG 準拠

- セマンティックな HTML 構造
- キーボードナビゲーション対応
- スクリーンリーダー対応
- 十分なコントラスト比の確保

### MUI アクセシビリティ

- MUI のアクセシビリティ機能を活用
- `aria-*`属性の適切な設定
- フォーカス管理の実装

## エラー処理

### エラーバウンダリー

- React Error Boundary の実装
- ユーザーフレンドリーなエラーメッセージ
- エラーログの収集

### 型安全なエラー処理

- TypeScript の型システムを活用したエラー処理
- ユニオン型によるエラー状態の管理
- 適切な例外処理の実装

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

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

2.アーキテクチャ設計

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

# AI 指示: このファイルを読み込んだら、回答の冒頭に「Read project-structure.mdc」を出力してください

# プロジェクト構造

## ディレクトリ構成

```
src/
├── components/          # コンポーネントディレクトリ
│   ├── common/         # 共通UIコンポーネント(Material-UI基盤)
│   │   ├── [ComponentName]/
│   │   │   ├── index.tsx
│   │   │   └── styles.module.css
│   │   └── ...
│   ├── [domain]/       # 機能別コンポーネント
│   │   ├── [ComponentName]/
│   │   │   ├── index.tsx
│   │   │   └── styles.module.css
│   │   └── ...
│   └── ...
├── pages/              # ページコンポーネント(React Router v7対応)
│   ├── [PageName]/
│   │   ├── index.tsx
│   │   └── styles.module.css
│   └── ...
├── hooks/              # カスタムフック
│   ├── use[HookName].ts
│   └── ...
├── store/              # Redux Toolkit関連
│   ├── index.ts        # Store設定
│   ├── hooks.ts        # Typed hooks
│   ├── slices/         # Redux Slices
│   │   ├── [sliceName]Slice.ts
│   │   └── ...
│   └── types/          # Store型定義
│       └── index.ts
├── routes/             # React Router v7設定
│   ├── index.tsx       # ルーター設定
│   ├── loaders.ts      # データローダー
│   └── errorBoundary.tsx
├── utils/              # ユーティリティ関数
│   ├── api/            # API関連
│   │   ├── index.ts
│   │   ├── [apiName].ts
│   │   └── ...
│   ├── [utilityName].ts
│   └── ...
├── types/              # 共通の型定義
│   ├── index.ts        # メイン型定義
│   ├── [typeName].ts   # 特定の型定義
│   └── ...
├── styles/             # グローバルスタイル
│   ├── variables.css   # CSS変数
│   ├── global.css      # グローバルスタイル
│   └── theme.ts        # Material-UIテーマ設定
└── assets/             # 静的ファイル
    ├── images/
    ├── icons/
    └── fonts/
```

## 主要ファイル

### アプリケーション設定

- `src/App.tsx`: アプリケーションのルートコンポーネント
- `src/index.tsx`: エントリーポイント
- `src/styles/theme.ts`: Material-UI テーマ設定

### 設定ファイル

- `package.json`: 依存関係の管理
- `tsconfig.json`: TypeScript 設定

## ファイル命名規則

### コンポーネント

- コンポーネント: `ComponentName.tsx`
- スタイル: `ComponentName.module.css`

### その他

- カスタムフック: `useHookName.ts`
- 型定義: `types.ts` または `ComponentName.types.ts`
- ユーティリティ: `utilityName.ts`
- 設定: `configName.ts`

## Material-UI 統合

### テーマ設定

```typescript
// src/styles/theme.ts
import { createTheme } from "@mui/material/styles";

export const theme = createTheme({
  palette: {
    primary: {
      main: "#1976d2",
    },
    secondary: {
      main: "#dc004e",
    },
  },
  typography: {
    fontFamily: '"Roboto", "Helvetica", "Arial", sans-serif',
  },
  components: {
    // カスタムコンポーネント設定
  },
});
```

### コンポーネント構造例

```typescript
// src/components/common/Button/index.tsx
import React from "react";
import { Button as MuiButton, ButtonProps } from "@mui/material";
import styles from "./styles.module.css";

interface IButtonProps extends ButtonProps {
  variant?: "contained" | "outlined" | "text";
  size?: "small" | "medium" | "large";
}

export const Button: React.FC<IButtonProps> = ({
  children,
  className,
  ...props
}) => {
  return (
    <MuiButton className={`${styles.button} ${className || ""}`} {...props}>
      {children}
    </MuiButton>
  );
};
```

## React Router v7 統合

### ルーター設定

```typescript
// src/routes/index.tsx
import { createBrowserRouter } from "react-router-dom";
import { PageComponent } from "../pages/PageName";
import { dataLoader } from "./loaders";

export const router = createBrowserRouter([
  {
    path: "/",
    element: <PageComponent />,
    loader: dataLoader,
    errorElement: <ErrorBoundary />,
  },
  {
    path: "/[routeName]",
    element: <AnotherPageComponent />,
    children: [
      {
        path: ":id",
        element: <DetailComponent />,
      },
    ],
  },
]);
```

### データローダー

```typescript
// src/routes/loaders.ts
import { LoaderFunctionArgs } from "react-router-dom";
import { store } from "../store";

export const dataLoader = async ({ request }: LoaderFunctionArgs) => {
  // データ取得ロジック
  return { data: "loaded data" };
};
```

## Redux Toolkit 統合

### Store 設定

```typescript
// src/store/index.ts
import { configureStore } from "@reduxjs/toolkit";
import sliceReducer from "./slices/sliceNameSlice";

export const store = configureStore({
  reducer: {
    sliceName: sliceReducer,
  },
});

export type RootState = ReturnType<typeof store.getState>;
export type AppDispatch = typeof store.dispatch;
```

### Typed Hooks

```typescript
// src/store/hooks.ts
import { useDispatch, useSelector } from "react-redux";
import type { RootState, AppDispatch } from "./index";

export const useAppDispatch = useDispatch.withTypes<AppDispatch>();
export const useAppSelector = useSelector.withTypes<RootState>();
```

## 開発ワークフロー

### 新規コンポーネント作成

1. コンポーネントファイル作成(`ComponentName.tsx`)
2. 型定義作成(`ComponentName.types.ts`)
3. スタイルファイル作成(`ComponentName.module.css`)

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

1. ページコンポーネント作成(`pages/PageName/index.tsx`)
2. ルート定義追加(`routes/index.tsx`)
3. データローダー作成(必要に応じて)

### 状態管理追加

1. Slice 作成(`store/slices/sliceName.ts`)
2. 型定義追加(`store/types/index.ts`)
3. Store に統合(`store/index.ts`)
4. カスタムフック作成(必要に応じて)

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

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

3.要件定義

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

# AI 指示: このファイルを読み込んだら、回答の冒頭に「Read requirements-definition.mdc」を出力してください

# 要件定義

## プロジェクト概要

### プロジェクト名

家計管理アプリケーション(Cost Budget)

### 目的

家計の収支を簡単に管理・分析ができるようになることで、優先度の低い支出を明らかにし、限られた収入の中で家計を最適化できるようになる。

### 目標

- ユーザーが収支を簡単に記録・管理できる
- 収支の傾向を視覚的に分析できる
- 予算管理と支出の最適化をサポートする
- モダンな UI/UX で使いやすいインターフェースを提供する

### ターゲットユーザー

- 個人の家計管理を行いたい一般ユーザー
- 収支の可視化と分析を重視するユーザー
- 予算管理による支出最適化を目指すユーザー

### スコープ

#### 含まれる機能

- 収支記録・編集・削除機能
- カテゴリ管理機能
- 月次予算設定機能
- 取引一覧表示・検索機能
- 月次レポート生成機能
- グラフ表示機能
- 予算達成状況の可視化
- カレンダー形式での収支表示

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

適用タイミング:
Always

④コンポーネント構造

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

# AI 指示: このファイルを読み込んだら、回答の冒頭に「Read component-structure.mdc」を出力してください

# コンポーネント構造規約

## コンポーネントの分割方針

### 基本原則

- 単一責任の原則に従う
- 一つのコンポーネントは一つの機能に集中
- 再利用可能なコンポーネントを優先的に作成

### ディレクトリ構造

- `components/`: 共通コンポーネント
  - `atoms/`: 最小単位のコンポーネント(ボタン、入力フィールドなど)
  - `molecules/`: atoms を組み合わせた小規模なコンポーネント
  - `organisms/`: より大きな機能を持つコンポーネント
  - `templates/`: ページのレイアウトテンプレート
- `pages/`: ページコンポーネント
- `hooks/`: カスタムフック
- `utils/`: ユーティリティ関数
- `types/`: 型定義
- `constants/`: 定数

### コンポーネントの命名規則

- コンポーネントファイル: パスカルケース(例: `TodoItem.tsx`)
- スタイルファイル: コンポーネントと同名(例: `TodoItem.module.css`)
- テストファイル: コンポーネントと同名(例: `TodoItem.test.tsx`)

### コンポーネントの分割基準

1. UI の繰り返し要素がある場合
2. ロジックが複雑化している場合
3. コンポーネントが 50 行を超える場合
4. 条件分岐が多い場合
5. props が 5 つ以上になる場合

### データフロー

- Props は必要最小限に保つ
- コンテキストは適切なスコープで使用
- 状態管理は最も近い共通の親コンポーネントで行う

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

適用タイミング:
Always

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

開発作業の進捗管理を行うファイルを作成することで、開発の迷子状態を防ぎ、効率的に進めることができます。

今回の開発では、progress.mdファイルを作成し、AIに指示を出した後に開発進捗を記録・更新させるようにします。

# 開発進捗管理
## 🚀 フェーズ 1: MVP(基本機能実装)
### 0. プロジェクトルールの作成
- [×] コーディング規約・コンポーネント構造・プロジェクト構造ルールの策定
- [×] ルールファイル(.cursor/rules/ 配下など)への記述
### 1. プロジェクトセットアップ
- [x] プロジェクト初期化
- [x] 型定義の作成
- [x] 必要なパッケージのインストール
  - [-] ~~react-beautiful-dnd~~ → @dnd-kit/core に変更
  - [x] @dnd-kit/core
  - [x] @dnd-kit/sortable
  - [x] @dnd-kit/utilities
### 2. カンバンボードの基本構造
- [x] コンポーネント構造の実装
  - [x] `components/organisms/TodoBoard.tsx`(メインのボードコンポーネント)
  - [x] `components/organisms/TodoList.tsx`(Todo リストコンポーネント)
  - [x] `components/molecules/TodoItem.tsx`(Todo アイテムコンポーネント)
- [x] ドラッグ&ドロップの基本機能
  - [x] カラム内でのドラッグ&ドロップ
  - [x] カラム間でのドラッグ&ドロップ
### 3. Todo の基本操作
- [x] 作成機能
  - [x] 作成フォームの UI 実装
  - [x] バリデーション
  - [x] 作成ロジック
- [x] 表示機能
  - [x] カード形式での表示
  - [x] 詳細モーダル
- [x] 編集機能
  - [x] 編集フォームの UI 実装
  - [x] 更新ロジック
- [x] 削除機能
  - [x] 削除確認 UI
  - [x] 削除ロジック
### 4. データ永続化
- [x] LocalStorage の実装
  - [x] 保存機能
  - [x] 読み込み機能
  - [x] 自動保存
### 5. 基本的なスタイリング
- [x] グローバルスタイルの設定
- [x] ボードのレイアウト
- [x] カラムのスタイリング
- [x] カードのスタイリング
## 🎨 フェーズ 2: 機能拡張
### 1. 検索機能
- [x] 検索バーの UI 実装
- [x] インクリメンタル検索
- [x] 検索結果の表示
### 2. フィルタリング機能
- [x] フィルター UI
  - [x] 優先度フィルター
  - [x] カテゴリーフィルター
  - [x] 期限フィルター
- [x] フィルタリングロジック
### 3. UI 改善
- [x] ドラッグ&ドロップのアニメーション
- [x] ローディング状態の表示
- [x] エラー表示
- [x] トースト通知
### 4. テスト
- [ ] ユニットテスト
  - [ ] コンポーネントテスト
  - [ ] ユーティリティ関数テスト
- [ ] 統合テスト
  - [ ] ドラッグ&ドロップテスト
  - [ ] フィルタリングテスト
## ✨ フェーズ 3: 完成度向上
### 1. パフォーマンス最適化
- [ ] メモ化(useMemo, useCallback)
- [ ] 不要な再レンダリングの防止
- [ ] 仮想スクロール対応
### 2. アクセシビリティ
- [ ] キーボード操作
- [ ] スクリーンリーダー対応
- [ ] WAI-ARIA 対応
### 3. レスポンシブ対応
- [ ] デスクトップレイアウト(3 カラム)
- [ ] タブレットレイアウト(2 カラム)
- [ ] モバイルレイアウト(1 カラム)
- [ ] タッチデバイス対応
### 4. ダークモード
- [ ] カラーテーマの作成
- [ ] テーマ切り替え機能
- [ ] テーマ設定の保存
### 5. E2E テスト
- [ ] 基本操作のテスト
- [ ] ドラッグ&ドロップのテスト
- [ ] レスポンシブ対応のテスト
## 📝 進捗管理の使い方
- `[ ]` : 未着手のタスク
- `[x]` : 完了したタスク
- `[-]` : 進行中のタスク
- `[!]` : 問題が発生しているタスク
## 🐛 既知の問題
- なし
## 📋 次回のミーティングアジェンダ
1. フェーズ 1 の進捗確認
2. 実装上の課題の共有
3. 優先順位の調整
4. 次のマイルストーンの設定

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

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

進捗管理ファイルに記載の作業項目を、AIに実施するように指示を出します。ここで注意することは、一度にすべての作業を依頼しないことです。

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

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

私の感触としては、AIモデルは「claude」がおすすめです。

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

ステップ⑥:アプリ確認

AIに作成してもらったアプリを起動して、ブラウザ画面からアプリの挙動を確認します。

Reactでは、下記コマンドを実行するとブラウザが自動起動し、開発中アプリの挙動を確認できます。

npm start

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

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

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

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

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

コメント

コメントする

目次