はじめに
こんにちは、tips4youです。
今話題のClaude Codeを使って個人開発する機会があったので、そこで学んだことをアウトプットしました。全員が使えるものだと思うのでぜひ参考にしていただけると幸いです!
てことで、早速話題に入るのですが
せっかくAIが開発してくれるなら...
AIにたくさんコード書かせたいじゃん!!
プライベートで開発していると人も巻き込みずらいし、コードたくさん書いていたら資格の勉強もできないし...そんな感じで、私はProプランで毎日お世話になっているのですが、Claude Codeを使って開発していると壁にぶち当たります。
それはずばり...コンテキストの忘却です。
Claude Codeはスレッドが長引くにつれて、コンテキストをコンパクト化する仕様となっているため、最初の方のプロンプトに書いた前提条件や目的、開発における制約などを忘れていってしまいます。
でもこれは仕方ないですよね...
実際の画面だとこんな感じでウルトラマンの3分タイマーを想起させます。嫌だァァ!!
かといって、スレッドはステートレスに実行されるので切り替えてしまうとコンテキストがリセットされるんですよね。
そのため、現時点で考えられる対策としてはコンテキストを言語化して、別の場所に一時的に保管して次のスレッドを開始した時にそれを読んでからタスクを実行するというものが考えられます。
コンテキストを次のスレッドにつなぐ方法
さすがですね。
Claude CodeではCLAUDE.md
をスレッド初期化時に読み込む仕組みを採用しています。
そのため、CLAUDE.md
に今まで何をしていたかなどを明記すれば次のスレッドでエージェントが解釈してくれるというわけです。(CLAUDE.md
は/init
コマンドで自動的に生成されます)
ただし、CLAUDE.md
に記載した文章と現状のコードからしか情報を収集できないため、CLAUDE.md
に情報の不足があると次のスレッドでの再現性が劣ってしまうことには注意が必要です。
CLAUDE.mdの構成
公式サイトでは、以下の要素を含めることをおすすめしています。
- 一般的なbashコマンド
- コアファイルとユーティリティ関数
- コードスタイルガイドライン
- テスト手順
- リポジトリのエチケット (例: ブランチの命名、マージとリベースなど)
- 開発者環境の設定(例:pyenv の使用、どのコンパイラが動作するか)
- プロジェクト特有の予期しない動作や警告
- Claudeに覚えておいてもらいたいその他の情報
# CLAUDE.md
This file provides guidance to Claude Code when working with this repository.
## Development Commands
### Backend (from /backend directory)
- `npm run dev` - Start development server with nodemon on port 3001
- `npm start` - Start production server
- No test command configured
### Frontend (from /frontend directory)
- `npm run dev` - Start Vite development server on port 5173
- `npm run build` - Build for production
- `npm run lint` - Run ESLint
- `npm run preview` - Preview production build
## Database Schema
SQLite database auto-initializes with three tables:
- `categories`: id, name, color, icon (pre-populated with 9 default categories)
- `transactions`: id, type (income/expense), amount, description, category_id, date
- `savings_goals`: id, title, target_amount, current_amount, target_date
ただ、Claude本人に聞くと20行程度で書いて欲しいらしく、なんとこの中に作業の進捗などを書くことはナンセンスってことで。
⭐️ 以下の構成をとっています↓↓↓
結論
MYベストプラクティス✌️
結局、タスク管理を含めたコンテキストっていつでも把握したいでしょ? ってことでCONTEXT.md
をプロジェクトルートに作成してしまいます。
名前のこだわりは特にないです。
で、そこに何をしたかをトレースできるようにスレッド切り替え前かつコンテキストのコンパクト化が始まる前に進捗報告させるのです。
プロンプト例を示します。(あくまで一例です)
# タスク
続きの作業を新たなスレッドでもタスクを問題なく行えるようにあなたの持つコンテキストを言語化(テキストだけでなく、図を挿入するなどしても良い)して構造化してプロジェクトルートにCONTEXT.mdを作成して、そこに出力してください。すでに存在すれば追記を行いましょう。
# 組み込むべき最低限の項目
- システムの仕様書に関する理解など
- タスクの進捗報告
もし、継承させるコンテキストが不足していると感じるなら仕様書を再度web検索して調査してください。
仕様書URL: xxx.example.com
さらに、引き継ぎのためにスレッドを切り替えたら以下のプロンプトを実行します。
また、読み込みプロンプトに関してはCLAUDE.mdに直接記載しても良いかと思います。そっちの方がスマートでかっこいい...(私はできていない)
# タスク
CONTEXT.mdを参照して前回のスレッドの引き継ぎを行って下さい。
# 読み込む最低限の内容
- システムの仕様書に関する理解など
- タスクの進捗
# 注意点
- CONTEXT.mdに記載された内容が膨大である場合は上記の最低限の内容のみ読み込み、タスク実行に必要な知識が必要となった場合にその他の箇所を参照してください。
もし、継承するコンテキストが不足していると感じるなら仕様書を再度web検索して調査してください。
仕様書URL: xxx.example.com
課題
上記の方法で一応対応可能ですが、開発を進めていくにあたり下記の注意点が必要です。
- CONTEXT.mdが膨大になっていく
- 膨大になったCONTEXT.mdを読み込むだけでもトークンを使ってしまう
なので、開発規模が大きくなるにつれ、CONTEXTフォルダを作成して、ファイルごとに役割を与えてCLAUDE.mdで制御するなどの対応を行うなどの対策が必要かと思われます。
こちらについても今後考えてまいります。
最後まで読んでいただきありがとうございました!!!
Happy Hacking 🤩
補足
公式サイトにはプロジェクトルートに配置されたCLAUDE.mdと作業ディレクトリに配置されたCLAUDE.md両方が初期化時に読み込まれると記載されています。