結論: Notionに仕様を書くだけでClaude Codeが実装を始める
Notionに仕様を書くだけでClaude Codeが実装を始める——ドキュメント駆動AI開発の構築手順を全公開します。
この記事で得られることは以下の3つです。
- Notion → MCP → Claude Code → GitHub を繋ぐ一気通貫ワークフローの設計と構築手順
- Claude Codeの
CLAUDE.mdに定義するワークフロー指示の具体例 - トークン節約やエラーハンドリングなど、実運用で役立つTips
「仕様書を書く → 実装 → PR作成 → ドキュメント更新」をAIが自律的に回す仕組みを、再現可能な手順で解説します。
環境・前提条件
| 項目 | バージョン・条件 |
|---|---|
| Claude Code | 最新版(CLI) |
| Node.js | v18以上 |
| Notion | ワークスペースの管理者権限 |
| GitHub | リポジトリへのpush権限、GitHub CLI(gh)インストール済み |
| MCP |
@modelcontextprotocol/server-notion を使用 |
Notion APIのインテグレーションキーと、対象データベースへの接続許可が事前に必要です。
1. ドキュメント駆動AI開発とは
従来のAI支援開発は「コードを書く部分」だけをAIに任せるものでした。ドキュメント駆動AI開発はその前後も含めて自動化する構想です。
従来のフロー(人間主導):
- 人間が仕様を書く
- 人間がAIにプロンプトを渡す
- AIがコードを生成する
- 人間がPRを作り、ドキュメントを更新する
ドキュメント駆動AI開発のフロー:
- 人間がNotionに仕様を書く(ここだけ人間の仕事)
- Claude CodeがNotionから仕様を読み取る
- Claude Codeが実装・テストを行う
- Claude CodeがPRを作成し、Notionのステータスを更新する
つまり、Notionの仕様書がトリガーであり、Single Source of Truthであり、進捗ダッシュボードにもなるという設計です。
2. アーキテクチャ全体図
まず全体のワークフローをシーケンス図で把握しましょう。
ポイントはMCPサーバーがNotion APIのラッパーとして機能し、Claude Codeがツールとして直接呼び出せる点です。Claude Code自身がHTTPリクエストを組み立てる必要はありません。
3. Notion側の設計
3.1 データベースのプロパティ設計
Notion側にタスク管理用のデータベースを作成します。以下のプロパティを設定してください。
| プロパティ名 | 型 | 用途 | 値の例 |
|---|---|---|---|
| Title | タイトル | チケット名 | ユーザー認証APIの実装 |
| Status | ステータス | 進捗管理 | Ready / In Progress / In Review / Done |
| Priority | セレクト | 優先度 | High / Medium / Low |
| Spec | リッチテキスト(本文) | 仕様の詳細 | 機能要件・API仕様など |
| PR URL | URL | 作成されたPRリンク | https://github.com/... |
| Branch Name | テキスト | 作業ブランチ名 | feat/user-auth-api |
| Assigned To | セレクト | 担当(AI or 人間) | Claude Code / Human |
3.2 ステータス遷移の設計
重要なルールは以下です。
- ReadyのチケットだけをClaude Codeが拾う
- Claude Code自身がステータスを Ready → In Progress → In Review と遷移させる
- Done への遷移は人間が行う(レビュー承認のゲート)
3.3 仕様テンプレート
Notionページの本文には、以下のテンプレートで仕様を記述します。Claude Codeが解釈しやすいように、構造化された見出しを使います。
## 概要
何を作るかの1-2行サマリ
## 機能要件
- [ ] 要件1
- [ ] 要件2
## API仕様(該当する場合)
- エンドポイント: POST /api/users
- リクエスト: { email: string, password: string }
- レスポンス: { id: string, token: string }
## 技術的な制約
- 使用するライブラリやフレームワークの指定
- パフォーマンス要件
## テスト要件
- 正常系テスト
- 異常系テスト
## 対象ファイル
- src/routes/users.ts
- src/services/auth.ts
Tip: 仕様本文はできるだけ簡潔にしてください。長大な仕様はトークンを消費し、Claude Codeの理解精度も落ちます。1チケット1機能の粒度を守ることが重要です。
4. Notion MCPサーバーの設定とClaude Codeへの接続手順
4.1 Notion APIインテグレーションの作成
- Notion Developers にアクセス
- 「新しいインテグレーション」を作成
- 権限は「コンテンツを読み取る」「コンテンツを更新する」を付与
- 生成されたインテグレーションキー(
ntn_で始まる文字列)を控える - 対象のNotionデータベースで「コネクション」から作成したインテグレーションを追加
4.2 Claude CodeにNotion MCPサーバーを登録
Claude Codeの設定ファイル ~/.claude/claude_desktop_config.json(デスクトップ版)、またはプロジェクトルートの .mcp.json にMCPサーバーを登録します。
プロジェクトルートの .mcp.json で設定する方法(推奨):
{
"mcpServers": {
"notion": {
"command": "npx",
"args": ["-y", "@notionhq/notion-mcp-server"],
"env": {
"OPENAPI_MCP_HEADERS": "{\"Authorization\": \"Bearer ntn_YOUR_INTEGRATION_KEY\", \"Notion-Version\": \"2022-06-28\"}"
}
}
}
}
注意:
@notionhq/notion-mcp-serverはNotion公式が提供するMCPサーバーパッケージです。コミュニティ製の@modelcontextprotocol/server-notionなども存在しますが、公式パッケージの利用を推奨します。利用可能なパッケージは時期により変わる可能性があるため、最新情報は公式リポジトリを確認してください。
4.3 接続確認
Claude Codeを起動して、MCPツールが認識されているか確認します。
claude
起動後、/mcp コマンドで接続中のMCPサーバー一覧を確認できます。
> /mcp
Connected MCP Servers:
- notion (running)
Tools: notion_search, notion_get_page, notion_update_page, ...
Notionのツールが表示されれば接続成功です。表示されない場合は、インテグレーションキーの値やJSON構文を確認してください。
5. CLAUDE.mdにワークフローを定義する
プロジェクトルートの CLAUDE.md に、Notionから仕様を読んで実装するワークフローを定義します。これがこの構成の最も重要な部分です。
# CLAUDE.md
## プロジェクト概要
このリポジトリはXXXアプリケーションのバックエンドです。
TypeScript + Express + Prisma で構成されています。
## Notion駆動開発ワークフロー
「Notionから仕様を読んで実装して」と指示された場合、以下の手順で作業すること。
### Step 1: 仕様の取得
1. Notion MCPを使い、タスクデータベース(DB ID: YOUR_DATABASE_ID)からStatusが「Ready」のページを検索する
2. 該当ページの本文(仕様)を取得する
3. 仕様内容をユーザーに提示し、着手してよいか確認する
### Step 2: ステータス更新(着手)
1. 確認が取れたらNotionページのStatusを「In Progress」に更新する
2. Branch Nameプロパティに作業ブランチ名を記入する
### Step 3: ブランチ作成と実装
1. `git checkout -b <branch-name>` で作業ブランチを作成する
2. 仕様に従ってコードを実装する
3. 既存のコード規約・パターンに従うこと
4. 必要に応じてテストを書く
### Step 4: テスト実行
1. `npm test` を実行し、全テストがパスすることを確認する
2. テストが失敗した場合は修正する
### Step 5: PR作成
1. 変更をコミット・プッシュする
2. `gh pr create --title "<チケット名>" --body "<仕様サマリとやったことの要約>"` でPRを作成する
3. PR URLを控える
### Step 6: ステータス更新(レビュー待ち)
1. NotionページのStatusを「In Review」に更新する
2. PR URLプロパティにPRリンクを記入する
3. ユーザーに完了を報告する
## コード規約
- ファイル名: kebab-case
- 関数: camelCase
- テスト: __tests__ディレクトリに配置
- コミットメッセージ: Conventional Commits形式
設計のポイント:
- Step 3の前に人間の確認を挟む(Step 1で提示 → 承認後に着手)。完全自律にせず、ゲートを設けることで事故を防ぎます
- データベースIDを
CLAUDE.mdに直接書くことで、毎回の指示を短縮できます - コード規約もこのファイルに集約し、Claude Codeが常に参照できるようにします
6. 実演: チケット作成からPR作成まで
6.1 Notionにチケットを作成
Notionデータベースに以下のチケットを作成します。
- Title: ヘルスチェックエンドポイントの追加
- Status: Ready
- Priority: High
- 本文:
## 概要
アプリケーションの死活監視用ヘルスチェックエンドポイントを追加する。
## 機能要件
- GET /api/health でステータス200を返す
- レスポンス: { status: "ok", timestamp: "<ISO8601>" }
- データベース接続確認を含む
## テスト要件
- 正常時に200とstatus:"ok"が返ること
- DB接続エラー時に503が返ること
6.2 Claude Codeで実行
claude "Notionから仕様を読んで実装して"
Claude Codeは CLAUDE.md のワークフロー定義に従い、以下を自動実行します。
🤖 Notionデータベースを検索しています...
📋 "Ready"状態のチケットが1件見つかりました:
- ヘルスチェックエンドポイントの追加(Priority: High)
仕様内容:
GET /api/health でステータス200を返す...
このチケットに着手してよろしいですか? (y/n)
y と回答すると、実装が始まります。
🔄 Notionステータスを "In Progress" に更新しました
🌿 ブランチ feat/health-check-endpoint を作成しました
📝 src/routes/health.ts を作成中...
📝 src/__tests__/health.test.ts を作成中...
✅ テスト実行: 2 passed, 0 failed
🔀 PR #42 を作成しました: https://github.com/your-org/your-repo/pull/42
🔄 Notionステータスを "In Review" に更新しました
完了しました!PR: https://github.com/your-org/your-repo/pull/42
黄色のノード(承認・レビュー)が人間のタッチポイントです。それ以外はすべてClaude Codeが自律的に処理します。
7. 運用Tips
7.1 トークン節約のためのページ構造最適化
Notion MCPはページの全内容を取得するため、無駄な情報があるとトークンを消費します。
やるべきこと:
- 仕様は1チケット1ページ、1ページ1機能を徹底する
- 画像・埋め込みブロックは避け、テキストベースで記述する
- 参考資料は本文に含めず、別ページへのリンクにする
- 不要なコメントやログは仕様ページに残さない
目安: 1チケットの仕様は500〜1,500文字程度に収めるとトークン効率が良いです。
7.2 エラー時のフォールバック設計
Claude Codeの実行中にエラーが発生するケースへの備えも重要です。
CLAUDE.md に追記するフォールバックルール:
## エラー時のルール
- テストが3回修正しても通らない場合:
Notionステータスを「Blocked」に変更し、
エラー内容をページのコメントに記載して作業を中断する
- Notion APIへの接続に失敗した場合:
ターミナルにエラーを表示し、ステータス更新は手動で行うよう報告する
- 仕様に不明点がある場合:
実装を始めず、不明点をリストアップしてユーザーに質問する
7.3 複数チケットの一括処理
複数の「Ready」チケットがある場合の運用ルールも定義しておきましょう。
## 複数チケット時のルール
- Priorityが「High」のチケットを優先する
- 同じPriorityの場合、作成日が古い順に処理する
- 1回の実行で処理するのは最大3チケットまでとする
- チケット間の依存関係がある場合はユーザーに確認する
7.4 セキュリティ上の注意
- Notionインテグレーションキーは
.mcp.jsonに直接書くとリポジトリにコミットされる危険があります。.mcp.jsonを.gitignoreに追加するか、環境変数経由で渡す設計にしてください -
CLAUDE.mdにデータベースIDを記載する場合も、公開リポジトリでは注意が必要です
まとめ
- Notion × MCP × Claude Codeで、仕様書を起点にした一気通貫の開発ワークフローが構築できる。 人間は仕様を書くことと最終レビューに集中でき、実装・テスト・PR作成・ステータス管理はClaude Codeが自律的に処理します
- CLAUDE.mdのワークフロー定義が鍵。 ステップ化された指示と、人間の確認ゲート、エラー時のフォールバックを明文化することで、再現性の高い自動化が実現します
- 運用では「1チケット1機能」の粒度と、トークン節約を意識したページ設計が重要。 巨大な仕様を渡さない、セキュリティに配慮するなど、実運用で効いてくるポイントを押さえましょう