仕様フォルダを味方にする ─ Cline と Cursor で実践する AI 開発テンプレート

和田 海斗

和田 海斗

  • 2025.04.30

    この記事で理解できること
    ・Memory‑Bank / specs の 2 層構成を用いたプロジェクト標準ディレクトリ
    ・Terraform、Prisma、OpenAPI、GitHub Actions など実用ファイルの具体例
    ・Cline の Plan → Act サイクルと .clineconfig.json の最小設定
    ・仕様フォルダ運用で起こりやすい問題と対処方法


    音声で概要を聞きたい人はこちらを再生!


    “仕様フォルダ駆動” が必要な理由

    従来は「チャットに貼った仕様を基に AI が単発でコードを生成する」という利用方法が一般的でした。しかし、同じプロジェクトに対して複数回指示すると以前の会話や設計方針が失われやすく、抜け漏れや認識齟齬が発生することがよくありましたね…。

    Cursor と Cline を使用すれば、以下のような変化が起きます!

    従来の使い方仕様フォルダ駆動の使い方
    指示のたびに仕様をコピペする仕様フォルダを常時マウントし、再利用する
    AI が前回の会話を忘れるMemory‑Bank が設計方針を履歴として保持する
    生成コードを逐一チェックして修正するPlan → Act で設計レビューを挟み、自動実装する

    フォルダ構成と各ファイルの役割

    project-root/
    ├── memory-bank/             # プロジェクト全体を俯瞰する“脳”
    │   ├── 01-projectbrief.md   # ビジョン・目的・ステークホルダー
    │   ├── 02-productContext.md # なぜ作るのか / ユースケース
    │   ├── 03-systemPatterns.md # アーキテクチャ方針と採用技術
    │   ├── 04-techContext.md    # 開発環境・依存ライブラリ
    │   ├── 05-activeContext.md  # 現在の作業フォーカス
    │   └── 06-progress.md       # 実装済・未実装・既知課題
    ├── specs/                   # 技術仕様を詳細に記述する辞書
    │   ├── infrastructure.yaml  # VPC やクラスタ定義など IaC の要約
    │   ├── ci-cd.yaml           # GitHub Actions など CI/CD パイプライン概要
    │   ├── env/.env.example     # 環境変数のキー一覧(本番値は記載しない)
    │   ├── db/
    │   │   ├── schema.sql       # RDB 用 CREATE TABLE スクリプト
    │   │   └── schema.prisma    # Prisma 用スキーマ
    │   ├── api/
    │   │   ├── openapi.yaml     # REST API 仕様(OpenAPI 3.1)
    │   │   └── schema.graphql   # GraphQL スキーマ
    │   ├── auth.yaml            # 認証・認可フローとロール定義
    │   ├── ui/ui-design.md      # 画面一覧とデザインシステムのガイド
    │   └── tests/
    │       ├── unit-tests.yaml  # ユニットテストの網羅条件
    │       └── e2e-tests.yaml   # E2E シナリオ一覧
    ├── src/                     # Act モードで生成・編集するコード
    └── .clineconfig.json        # Cline の設定ファイル
    

    構成のポイント
    Memory‑Bank と specs を分離することにより、Cline はまずコア文脈を読み込み、その後に必要に応じて仕様辞書を参照します。

    ファイル名の先頭に番号を付けることで、読み込み順を固定できます。

    ファイルごとの補足説明

    ファイル主な内容目的
    01‑projectbrief.mdプロダクト名、目的、OKR、ステークホルダー全員が見る概要を 1 枚で共有する
    03‑systemPatterns.md採用技術、設計パターン、非機能要件の方針コード生成時の基準を示す
    infrastructure.yamlVPC CIDR、RDS インスタンス種別、Auto Scaling 設定Plan フェーズでクラウド構成を自動提案させる
    openapi.yamlエンドポイント、スキーマ、レスポンスAct フェーズで API ルートと型を自動生成する
    ui-design.md画面一覧、ワイヤーフレーム、Figma URLコンポーネント構造を推測させる
    ci-cd.yamlbuild / test / deploy ステージの定義GitHub Actions ワークフローのテンプレートを生成する

    Memory‑Bank Core ファイルの書き方

    01‑projectbrief.md(例)

    # Project Brief
    
    ## Name
    TaskFlow SaaS
    
    ## Goal (OKR)
    - **Objective**: タスク管理にかかる工数を 50% 削減し、期日遵守率を 95% 以上に高める
    - **KR‑1**: 週次ステータス更新ミーティング時間を 2 時間から 1 時間へ短縮
    - **KR‑2**: 遅延タスク率を 20% から 5% へ削減
    
    ## Stakeholders
    | Role | Name | Contact |
    | ---- | ---- | ------- |
    | PM | 佐藤 | @satoh |
    | Frontend | 鈴木 | @suzuki |
    | Backend | 田中 | @tanaka |
    

    03‑systemPatterns.md(抜粋)

    ## Runtime Choices
    | Concern | Choice | Rationale |
    | ------- | ------ | --------- |
    | サーバーサイドレンダリング | Next.js 14 App Router | 初期表示を高速にして SEO を改善するため |
    | API スタイル | 社内向け tRPC、外部向け REST | 型安全と互換性を両立するため |
    | Database | PostgreSQL 15 | JSONB 型の活用とスケールアップ柔軟性のため |
    | ORM | Prisma | スキーマ駆動開発を行うため |
    | 認証 | Auth0 (OIDC) | マルチテナントと SSO を両立するため |
    | インフラ | AWS Fargate + RDS | 運用コストを最小化しつつ可用性を確保するため |
    

    05‑activeContext.md(例)

    ## 2025‑04‑30
    - ユーザー一括インポート機能の設計が完了した  
      - 次の Act で API と UI を実装する予定
    - tasks テーブルに `priority INTEGER` を追加する PR #42 がレビュー待ち  
    - 開発環境を t3.micro から t3.small へスケールアップする提案が承認された
    

    運用ヒント
    決定事項を Slack やミーティングで共有した直後に 05-activeContext.md へ追記します。AI と人間が同じ最新情報を参照できるため、誤実装のリスクを抑えられます。


    specs/ に置くファイルの実例

    infrastructure.yaml(抜粋)

    vpc:
      cidr: 10.0.0.0/16
    rds:
      engine: postgres
      instance: db.t3.medium
      multiAZ: true
      backupWindow: "02:00-03:00"
    services:
      app:
        taskDefinition:
          cpu: 512
          memory: 1024
        desiredCount: 3
    

    ci‑cd.yaml(短縮例)

    name: CI
    on:
      push:
        branches: [main]
    jobs:
      test:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v4
          - uses: pnpm/action-setup@v3
          - run: pnpm install
          - run: pnpm test
    

    openapi.yaml(users エンドポイントのみ)

    paths:
      /tasks:
        get:
          summary: Get tasks
          responses:
            '200':
              description: Success
              content:
                application/json:
                  schema:
                    type: array
                    items:
                      $ref: '#/components/schemas/Task'
    components:
      schemas:
        User:
          type: object
          properties:
            id:
              type: integer
            name:
              type: string
    

    schema.sql(抜粋)

    CREATE TABLE tasks (
      id SERIAL PRIMARY KEY,
      title TEXT NOT NULL,
      status TEXT NOT NULL DEFAULT 'todo',
      due_date DATE,
      created_at TIMESTAMP DEFAULT now()
    );
    
    

    ポイント
    構造化テキストなら形式を問わずに置けます。Cline は YAML、SQL、GraphQL などを自然言語として解析し、Plan フェーズの計画に反映します。


    .clineconfig.json の最小例

    {
      "memoryBankDirs": [
        "memory-bank",
        "specs"
      ],
      "defaultModel": "gpt-4o",
      "mode": "PLAN"
    }
    
    • memoryBankDirs に 2 つのフォルダを指定します。Cline は起動時に両方の内容を読み込み、会話の文脈に組み込みます。
    • mode: "PLAN" としておくと、必ず設計レビューが最初に実行され、合意を得てからコードが生成されます。

    まとめ

    • 仕様フォルダをプロジェクトと一緒に管理すると、AI が常に最新の設計情報を参照できます。
    • Plan → Act の 2 段階を踏むことで、いきなりコードを書き始めるのではなく、まず設計方針を確認できます。
    • ドキュメントを信頼できる唯一の情報源に保つことで、人的コミュニケーションと AI 補完が同期します。

    本記事で紹介したテンプレートは、汎用性と実践性のバランスを意識しています。

    まずは小規模から、ご自身のプロジェクトに合わせてカスタマイズしながら試してみてください!


    ※本記事に記載された内容は執筆時点の情報と筆者の個人的見解に基づくものであり、必ずしも所属企業の立場を反映するものではありません。技術選定等はご自身の状況に応じてご判断ください。

    和田 海斗

    和田 海斗

    ITS事業部 / General Manager

    フルスタックエンジニア兼プロジェクトマネージャー

    受託開発やSaasの企画・設計から実装まで幅広く担当しています。
    このブログでは、技術的な学びやノウハウなどをまとめて発信しています。

    最近は技術の話を聞いてくれるのが愛犬ではなくAIになってきました。
    どちらも無言ですが、反応はだいぶ違います。