Claude Codeと学習して賢くなるCLIツール「claude-pattern-lang」を作ってnpmに公開した
普段はAIツール、特にClaude Codeで遊んでいます。
先日、自分で作ったCLIツールをnpmに公開しました。その名も「claude-pattern-lang」。
Claude Codeを使って開発していると、毎回同じようなやり取りをしていることに気づきませんか?
- 「ファイル編集する前にReadツール使ってね」
- 「ESMでモジュールエラーが出たら.js拡張子をつけてね」
- 「エラーが出たらまずログを見せてね」
こういう「うまくいくパターン」を自動で抽出して、次回からのセッションで使えるようにするツールを作りました。
claude-pattern-langって何?
claude-pattern-langは、Claude Codeのセッションログを分析して、再利用可能なパターンを自動抽出・カタログ化するCLIツールです。
ざっくり言うと:
- セッションログを分析 → LLMが自動でパターンを抽出
- パターンをカタログ化 → YAML形式で保存・管理
- CLAUDE.mdに同期 → 次回のセッションから自動的に参照
これにより、Claudeが過去の成功パターンを学習して、より効率的にタスクをこなせるようになります。
なぜ作ったのか
Claude Codeを使い始めて、すごく便利だな〜と思いつつ、一つ課題を感じていました。
「毎回同じような指示を出している」
例えば、TypeScript + ESM環境で開発していると、インポートエラーがよく出るんですよね。で、いちいち「.js拡張子をつけてね」と指示する。これが1回や2回ならいいけど、10回も20回もやると正直面倒くさい。
で、ふと思ったんです。
「これ、CLAUDE.mdに書いておけばいいんじゃない?」
でも、手動で書くのめんどくさいし、何より「どんなパターンがあるか」自分でも把握しきれてない。
じゃあ「自動で抽出すればいいんじゃない?」という発想になりました。
驚きの検証結果:開発効率35%アップ
ツールを作って、実際に効果を測ってみたら、結構な結果が出ました。
検証方法
同じタスク(API実装)を2つの条件で実行:
| 条件 | 会話ターン数 | コード行数 |
|---|---|---|
| パターンなし | 14ターン | 69行 |
| パターンあり | 9ターン | 39行 |
| 削減率 | 35%削減 | 44%削減 |
つまり:
- 会話ターンが約5回減少
- コード量が約3割減少
パターンがあると、Claudeが「あ、このパターン使えばいいんだな」とすぐに最適解にたどり着けるんですよね。
検証の詳細
検証には以下のタスクを使用:
- REST APIエンドポイントの実装
- TypeScript + Express環境
- エラーハンドリングとバリデーション含む
パターンなしの場合:
- まず基本的な実装
- エラーハンドリングの指摘
- リファクタリングの提案
- というように、試行錯誤のやり取りが発生
パターンありの場合:
- 最初からパターン通りの実装
- エラーハンドリングも含めて一発で完了
主な機能
1. 自動パターン抽出
セッションログをLLMが分析して、以下の3種類のパターンを抽出:
| パターン種類 | 説明 | 例 |
|---|---|---|
prompt |
効果的なプロンプト構造 | 「エラーログ先行確認」 |
solution |
問題解決アプローチ | 「ESMインポートパス解決」 |
code |
コーディングイディオム | 「react-form-controlled-components」 |
2. パターンカタログ管理
抽出したパターンはYAML形式で保存:
patterns:
- name: read-before-edit
type: solution
context: コードの修正を依頼されたとき
problem: ファイルの現状を確認せずに編集すると、意図しない変更や失敗が発生する
solution: Editツールを使う前に必ずReadツールでファイル内容を確認する
tags: [ファイル編集, 基本原則, 安全性]
3. CLAUDE.md自動同期
cpl syncコマンド一発で、パターンをプロジェクトのCLAUDE.mdに反映:
<!-- CPL:PATTERNS:START -->
@.claude/patterns.md
<!-- CPL:PATTERNS:END -->
この@インポート機能は、Claude Codeの標準機能で、自動的にパターンを読み込んでくれます。
4. 便利な管理コマンド
# パターン一覧
cpl list
# 特定のパターンを表示
cpl show <pattern-name>
# 手動でパターン追加
cpl add
# パターン削除
cpl remove <pattern-name>
5. アナリティクス機能
# Claude Codeのセッション分析
cpl session
# CPLツールの使用メトリクス
cpl metrics
開発中のハマりどころ
実際に開発していて、いくつかハマったポイントがありました。
LLMプロンプトの調整が難しい
最初は「パターンを抽出して」とだけ頼んでいたんですが、抽出されるパターンの品質にばらつきがあって。何度かプロンプトを調整して、「コンテキスト」「問題」「解決策」の構造を明示するようにしたら、品質が安定しました。
重複排除の処理
似たようなパターンが何回も抽出される問題があったんですね。そこで、既存のパターンと比較して、類似度が高い場合はマージする処理を入れました。ここは結構悩んで、結局簡単な文字列ベースのマッチングに落ち着きました。
セキュリティ配慮
セッションログにはAPIキーやパスワードが含まれる可能性があるので、自動マスキング処理を入れました。正規表現でパターンマッチして、機密情報を***で置き換えています。
使い方
インストール
npm install -g @gonzui/claude-pattern-lang
初期化
cpl init
これで設定ディレクトリが作成されます。
パターン抽出
# 最近のセッションを分析
cpl analyze
# 特定のセッションを分析
cpl analyze --session <session-id>
# 特定のプロジェクトのセッションを分析
cpl analyze --project /path/to/project
CLAUDE.mdに同期
# 現在のプロジェクトに同期
cpl sync
# グローバルのCLAUDE.mdに同期
cpl sync --global
パターンの確認
# パターン一覧
cpl list
# 種類でフィルタ
cpl list --type solution
# キーワード検索
cpl list --search "error"
# JSON出力
cpl list --json
サンプルパターン
ツールには、あらかじめいくつかのサンプルパターンが含まれています:
- コーディングパターン: Reactのフォーム、エラーハンドリングなど
- デバッグパターン: モジュールエラー段階的調査、エラーログ先行確認など
- プロンプトパターン: 効果的な指示の出し方
- アーキテクチャパターン: 設計に関するパターン
これらをベースに、自分のプロジェクト固有のパターンを追加していくことができます。
まとめ
改めて、claude-pattern-langの要点をまとめます。
claude-pattern-langでできること:
- 自動パターン抽出: Claude Codeのセッションログから、再利用可能なパターンをLLMが自動抽出
- パターンカタログ管理: YAML形式でパターンを保存・管理
- CLAUDE.md自動同期: ワンコマンドでパターンをプロジェクトに反映
- 効果の実証: 検証では会話ターン35%削減、コード量44%削減を達成
向いている人:
- Claude Codeをガッツリ使っている人
- チーム開発でClaudeの指示を統一したい人
- 過去のセッションから学習させたい人
- CLAUDE.mdを手動でメンテするのが面倒な人
個人的には、このツールを導入してからClaudeとのやり取りがスムーズになったと感じています。特に、チームメンバーと同じパターンを共有できるのは大きいですね。
まだv1.0.1なので、これから機能を追加していく予定です。GitHubのスターも待ってます!
参考文献
Discussion