Cursorでコードと仕様書を「完全同期」させる極意:`.cursorrules`とCI/CDで実現するドキュメント自動更新ルーチン
こんにちは!開発環境アーキテクトの先輩エンジニアです。
日々、情熱を傾けて素晴らしいコードを書いていらっしゃるかと思います。しかし、プロジェクトがスケールするにつれて、私たちの心を密かに痛めつける「ある問題」が存在しますよね。
そう、「ドキュメントの陳腐化(ドキュメント・ドリフト)」です。
新機能を実装し、リファクタリングを終え、テストもPassした。しかし、`README.md` や API仕様書の記述は3ヶ月前の仕様のまま……。次にそのコードを開く未来の自分や、新しくチームに入ったメンバーがどれほど苦労するか、想像に難くありません。
そして何より残酷なのは、ドキュメントが古くなると、AIアシスタント(Cursor自身)の回答精度までもが急速に劣化していくという事実です。
今回は、単なる「AIでの文章生成」を超えて、Cursorの内部メカニズム(ベクトル検索やコンテキスト補完)を逆手に取り、コードの変更を検知してREADMEや仕様書を常に『最新かつ高精度』に保つ自動化フローを解説します。これをマスターすれば、あなたの開発環境は「コードを書けばドキュメントが勝手に育つ」理想のサイクルへと生まれ変わりますよ。
—
1. なぜ「ドキュメントの鮮度」がCursorのIQを左右するのか?
仕組みの解説から始めましょう。Cursorは単なるテキストエディタではなく、プロジェクト全体をベクターデータベース化(Indexing)し、RAG(検索拡張生成)技術を用いて最適なコードや回答を生成しています。
[最新のソースコード] ──(変更発生)──> [陳腐化したREADME/仕様書]
│ │
└─────────────┬─────────────────────┘
▼
[CursorのIndexing / RAG]
│
▼
AIが矛盾を検知し「ハルシネーション」が発生!
コードを変更したのにドキュメントを放っておくと、Cursor内部で「コードの記述」と「仕様書の記述」の間に情報の矛盾が生じます。AIに「ログインAPIの使い方を教えて」と尋ねた際、AIは古いREADMEを参照して誤った実装例を提案してしまうのです。
つまり、ドキュメントの鮮度を保つことは、人間のためだけでなく、AIのIQを極限に維持するための絶対条件なのです。
—
2. `.cursorrules` でドキュメント生成の標準化を強制する
まずは、Cursorがドキュメントを更新・生成する際の「ルール」を定義しましょう。プロジェクトのルートディレクトリに `.cursorrules` ファイルを作成します。
このファイルは、Cursor内のすべてのAI機能(Chat, Edit, Composer)に対する最優先のシステムプロンプトとして機能します。
設定例:`.cursorrules`
==========================================
Cursor Rules: ドキュメント品質および自動同期規約
==========================================
[Global Rule]
- あなたは世界最高峰のテクニカルライター兼ソフトウェアアーキテクトです。
- コードベースの変更がドキュメントに及ぼす影響を常に監視し、整合性を保ちます。
[Documentation Standards]
- ドキュメント記述言語: 日本語(標準的で簡潔な技術的表現を用いること)
- マークダウンの構文指定:
- 見出しは `#` から始め、深さは H3 (`
`) までとする。
- コードブロックには必ず言語識別子(typescript, yaml, bash等)を指定すること。
- APIエンドポイントを記述する際は、必ず [HTTPメソッド] / [パス] の形式を遵守する。
[Auto-Update Strategy for README & Docs]
- ソースコード(特に `/src` や `/api` 配下)の変更提案を行う際、関連するドキュメント(README.md, docs/配下)の修正案も同時に生成してください。
- 記述変更の際は「何が変わったか」ではなく「新仕様でどう使うか」を中心に記述してください。
- 曖昧な推測による記述は一切禁止します。コード上の型定義や実装を唯一の真実(Single Source of Truth)として扱ってください。
この設定がもたらすアーキテクチャ上の利点
- 表記揺れの撲滅: AIが生成するMarkdownのトーン&マナーやコードブロックの記述法が固定されます。
- Single Source of Truthの徹底: コメントやドキュメントを追記する際、コード上の「型(Type/Interface)」を最優先参照するように縛りをかけています。
—
3. インタラクティブな実務ルーチン:Composerを使った「Hello World」自動更新
それでは、実際にコードを変更し、CursorのComposer機能(`Cmd + I` または `Ctrl + I`)を使ってドキュメントを同期させる最も効率的なルーチン(Hello World的ステップ)を体験してみましょう。
ステップ1: ソースコードを変更する
例として、ユーザー情報を取得する関数に「最終ログイン日時(`lastLoginAt`)」を追加する変更を行ったとします。
`src/user.ts`:
// 変更前: ユーザー情報の型定義
export interface User {
id: string;
name: string;
email: string;
}
// ——————————————
// 変更後: lastLoginAt を追加
export interface User {
id: string;
name: string;
email: string;
/ 最終ログイン日時(ISO8601形式) /
lastLoginAt: string;
}
export function formatUserResponse(user: User) {
return {
id: user.id,
name: user.name,
email: user.email,
last_login: user.lastLoginAt,
};
}
ステップ2: Composerで同期指示を飛ばす
コードの変更を保存したら、ショートカットキー `Cmd + I` (Mac) / `Ctrl + I` (Windows) を押して Composer を起動します。
そして、次のように入力します。
> プロンプト入力例:
> `@git` の差分を確認し、`src/user.ts` の変更内容を反映するように `docs/api.md`(または `README.md`)の該当箇所を更新してください。
[Composer 画面のイメージ]
┌────────────────────────────────────────────────────────┐
│ @git の変更に基づき、docs/api.md を自動更新してください │
└────────────────────────────────────────────────────────┘
ステップ3: AIの提案を差分(Diff)で確認して採択する
Cursorは変更されたコードのAST(抽象構文木)やDiffを解析し、`docs/api.md` の修正差分を生成してくれます。
ユーザー情報取得レスポンス仕様
| フィールド | 型 | 説明 |
| :— | :— | :— |
| `id` | string | ユーザーID |
| `name` | string | ユーザー名 |
| `email` | string | メールアドレス |
+ | `last_login` | string | 最終ログイン日時(ISO8601形式) |
緑色(追加)と赤色(削除)で視覚的に変更箇所が提示されるため、人間は「Accept (承認)」ボタンを押すだけでドキュメントの更新が完了します。わずか5秒のルーチンです。
—
4. 完全自動化の領域へ:GitHub Actionsを用いた「ドキュメント・ドリフト検知」CI/CD
ローカルでの更新ルーチンが身についたら、次はチーム開発で「ドキュメント更新を忘れて提出されたPR」をガードするCI/CDパイプラインを組み上げましょう。
ここでは、GitHub Actionsを利用して、コード変更があった際にドキュメントの更新漏れがないかをAIが自動監査し、必要であれば自動で更新PRを作成するワークフローを構築します。
`.github/workflows/doc-sync-check.yml`
name: “Documentation Sync Check”
PRがオープンされた時、または main ブランチにコードが推し進められた時に発火
on:
pull_request:
types: [opened, synchronize]
paths:
- ‘src/’ # ソースコードに変更があった場合のみ実行
jobs:
check-and-update-docs:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
# 1. リポジトリのチェックアウト
- name: Checkout Repository
uses: actions/checkout@v4
with:
fetch-depth: 0 # 全コミット履歴を取得(差分比較のため)
# 2. 変更されたコード差分の抽出
- name: Get Changed Code Files
id: changed-files
run: |
# mainブランチとの差分ファイル一覧を取得
CHANGED=$(git diff –name-only origin/main…HEAD — ‘src/’)
echo “files=$CHANGED” >> $GITHUB_OUTPUT
# 3. LLM (OpenAI API等) を呼び出してドキュメントの差分チェック&自動修正
# ※ Cursorのバックエンドと同様のプロンプト処理をCLI経由で実行します
- name: Run AI Document Synchronizer
if: steps.changed-files.outputs.files != ”
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
run: |
echo “コードの変更を検知しました。ドキュメントの整合性を検証中…”
# Node.jsスクリプトや軽量CLI等を使ってドキュメントをチェック・自動更新する処理
# (ここでは概念をわかりやすくするためインラインスクリプトとして記述)
node -e ‘
const fs = require(“fs”);
// ソースコードの変更差分を読み込み、API経由でREADME/docsを更新するロジックを実行
console.log(“AIがコード差分に基づき README.md を解析・再構成しました。”);
‘
# 4. 差分が発生した場合、自動的にコミットしてPRにプッシュ
- name: Commit Updated Documentation
run: |
git config –global user.name “Cursor Doc Bot”
git config –global user.email “cursor-bot@example.com”
# ドキュメント類に変更があればコミット
git add README.md docs/
if git commit -m “docs: AIによるコード変更に伴う仕様書自動同期”; then
git push
echo “ドキュメントの更新分をPRに追加プッシュしました。”
else
echo “ドキュメントに変更の必要はありませんでした(最新状態です)。”
fi
このCI/CDパイプラインのポイント
1. トリガーの最適化: `src/` の変更時のみ動作させることで、CI/CDの実行コストと時間を最小限に抑えます。
2. 人為的ミスの100%防止: 開発者がREADMEの更新を忘れてPRを出しても、Botが自動で追いついて差分コミットを積んでくれます。
—
5. まとめ:手に入れたアーキテクチャのROI(投資対効果)
今回ご紹介したルーチンと仕組みを導入することで、あなたのチームには以下のような劇的な変化が訪れます。
1. オンボーディングコストの激減: 新規参画メンバーが「READMEの通りに動かない」と悩む時間がゼロになります。
2. Cursorの回答精度の極大化: エディタ内のAIが常に最新かつ正確な文脈(Context)を参照できるようになり、コード生成の精度が跳ね上がります。
3. 心理的安全性の向上: 「ドキュメントの更新を忘れていないか」という無駄な認知負荷から解放され、ロジックの実装に100%集中できるようになります。
「ドキュメントは後からまとめて書くもの」という時代は終わりました。Cursorという最高峰の相棒と一緒に、「コードを書くと同時に、ドキュメントが勝手に研ぎ澄まされていく快感」をぜひ本日の開発から体験してみてください!
何か設定で躓いたところがあれば、いつでも聞いてくださいね。あなたの開発効率が劇的に向上することを心から応援しています!