Claude Codeを使うようになったので色々試行錯誤しているメモを残しておく (一瞬で環境が変わるため適宜更新する可能性がある)
前提
- 2025/08/28時点
- 主に古いWebアプリを最新の技術に置き換える用途で使っている
- 開発環境はWSL2だったりMacだったりするので適宜読み替えること
- Max 5xか20x
設定
共通(=非プロジェクト固有)
CLAUDE.md
ユーザーとの応答は日本語で行ってください
- 英語のほうが性能が良いだろうがすっぱり諦めている
~/.claude/settings.json
{ "hooks": { "Notification": [ { "matcher": "", "hooks": [ { "type": "command", "command": "terminal-notifier -title \"Claude Code\" -message \"Waiting for your response...\" -sound default" } ] } ], "Stop": [ { "matcher": "", "hooks": [ { "type": "command", "command": "terminal-notifier -title \"Claude Code\" -message \"Waiting for your response...\" -sound default" } ] } ] }, "mcpServers": { "playwright": { "type": "stdio", "command": "npx", "args": [ "@playwright/mcp@latest", "--config", "./playwright-config.json" ], "env": {} } }, "env": { "DISABLE_MICROCOMPACT": true } }
- hookで作業完了やユーザーへの問いかけを通知
- playwrightのMCP
- 導入方法は省略
- 使えば使うほどClaudeCodeくんの頭がどんどん悪くなっていくため
DISABLE_MICROCOMPACTを試している
~/.serena/serena_config.yml
gui_log_window: false web_dashboard: false
- serena導入後に行う
- Serena有効化でClaude Code起動時にWebに飛ばされるのをやめる
プロジェクトごと
よくやる構成
{project}
├── .claude/
│ ├── commands/
│ │ ├── go.md
│ │ └── prepare-command.md
│ ├── bugs.md
│ ├── features.md
│ ├──settings.json
│ └── tasks.md
├── doc/
│ ├── requirements/
│ ├── designs/
│ ├── guidelines/
├── app/
├── CLAUDE.md
CLAUDE.md
# CLAUDE.md
このファイルは、このリポジトリでコードを扱う際の Claude Code (claude.ai/code) へのガイダンスを提供します。
## プロジェクト概要
{プロジェクト概要を記載}
## 重要なルール(必須)
### エラー対応
- エラーを 2 回解決できなかった場合、ユーザーに今後の進め方の確認を取ってください
### 開発フロー
1. **features.md の新規要件を確認**
1. `{project_root}/.claude/features.md` の新規要件を確認
2. 要件に基づいて必要な設計ドキュメントを doc/ 配下に作成・更新
3. 要件を具体的なタスクに分解して `{project_root}/.claude/tasks.md` に追加
4. `{project_root}/.claude/features.md` から内容を削除
2. **bugs.md の新規バグを確認**:
1. `{project_root}/.claude/bugs.md` のバグ内容を確認
2. バグを修正タスクに分解して `{project_root}/.claude/tasks.md` に追加
3. `{project_root}/.claude/features.md` から内容を削除
3. **tasks.md のタスクを確認**:
1. `{project_root}/.claude/tasks.md` を参照してタスクを確認
2. **重要**: 一度に実装するのは**tasksの1セクション(###で区切られた範囲)まで**
3. タスクに記載されている作業を実施
4. 実装したページを playwright で確認し、エラーが発生しないことを確認
1. エラーが発生する場合、ユーザーに確認
5. タスクが完了したら、`{project_root}/.claude/tasks.md` のチェックボックスに記録
4. **ドキュメンテーション**:
1. 必要に応じて doc/ディレクトリに記録
5. **commit 前作業**:
1. **commit 前に必ず lint・format・type-check を実行** - `pnpm lint && pnpm format && pnpm type-check` を実行
6. **ユーザーに確認を依頼**:
1. commit 前にユーザーに修正内容の確認を依頼する
7. **適切な粒度で commit**:
1. ユーザーの承認を得られたら、機能追加、バグ修正、リファクタリングなど論理的な単位で commit
2. **commit message に絵文字を使用しない** - シンプルで読みやすいメッセージにする
8. `{project_root}/.claude/tasks.md` のタスクがなくなるまでこのフローを 1 から繰り返す
1. 途中で features や bugs に追記されることがある
## 開発コマンド
開発コマンドの詳細は `doc/guidelines/development-commands.md` を参照してください。
## ドキュメンテーション
ドキュメンテーションガイドラインの詳細は `doc/guidelines/documentation-guidelines.md` を参照してください。
## プロジェクト構成
プロジェクト構成の詳細は `doc/designs/project-structure.md` を参照してください。
/initしたあとに開発ルールを記載- doc配下にドキュメントを作らせてこのファイルから参照させる
- たとえばファイル名ルール等は早めに手をつけないと後で酷い目に合う
- 最初のほうは
doc/requirements/**.mddoc/designs/**.mdに要件や設計を起こすところから始め、固まってきたら初めてtasksを作らせる
.claude/settings.json
{ "permissions": { "allow": [ "Bash(mkdir:*)", "Bash(mv:*)", "Bash(find:*)", "Bash(grep:*)", "Bash(npm install)", "Bash(npm install:*)", "Bash(npm run:*)", "Bash(npm test)", "Bash(npx playwright test:*)", "Bash(git add:*)", "Bash(git commit:*)", "Bash(npm test:*)", "mcp__serena", "mcp__playwright", "mcp__ide__executeCode", "mcp__ide__getDiagnostics", ], "deny": [], "ask": [ "Bash(rm:*)" ] } }
- このあたりはプロジェクト毎に結構違ってくるのでglobalでなく個別に出し入れしている
- 他人と開発するときは
settings.local.jsonにしてgitignoreするほうが良いかも
MCP追加
- serena
- セマンティック解析
- 導入後に
/mcp__serena__initial_instructionsする .claude/settings[.local].jsonでmcp__serenaをallowしておかないと色々確認されて面倒なので早めに入れる
- playwright
- playwright testや、画面を開いて確認させるときに使う
- context7
- ドキュメントで調べて実装してくれ!なときに
use context7を付けて指示する
- ドキュメントで調べて実装してくれ!なときに
commands
.claude/commands/prepare-commit.md
- 必要に応じて、.claude/tasks.md に進捗を記録してください - lint, format, type-check を行い、修正してください - 上記完了後に適切な単位で commit してください
- ユーザーが実装内容を確認した後にコミットさせるときに使う
/.claude/commands/go.md
開発フローに従って進めてください
- 毎回これを打つのが面倒で定義した
- 「開発フローに従って」を付けないと酷い目にあう(つけても無視されることもあるが)
