learner について
learner は、デバッグや調査から再利用可能なプロジェクト固有の知見を抽出する、非推奨の互換スキルです。知見を検証して専門知識と手順に分類し、スキルファイルとして保存します。
主な機能
- 01苦労して得たプロジェクト固有の知見を特定
- 02一般的または検索しやすい助言を除外
- 03知識を専門知識または手順に分類
- 04必須の YAML frontmatter 付きでスキルを保存
活用シーン
- 01自明でない修正を後の作業向けに記録
- 02文書化されていないプロジェクトの挙動を保存
- 03検証済みのプロジェクト知識をチームで共有
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ yeachan-heo/ oh-my-claudecode --skill learnerインストール後、Claude Code で/learnerを入力して読み込まれたか確認します。
詳細
Learner Skill
非推奨の互換性エイリアス:新しいスキル抽出ワークフローでは
/oh-my-claudecode:skillifyを使用してください。このファイルは内部実装/履歴および互換性のために残されています。
これはレベル 7(自己改善型)のスキルです。次の 2 つのセクションで構成されています。
- Expertise:優れたスキルを作るためのドメイン知識です。パターンの発見に応じて自動的に更新されます。
- Workflow:安定した抽出手順です。変更されることはほとんどありません。
改善サイクルで更新するのは Expertise セクションだけです。
Expertise
このセクションには、時間とともに向上するドメイン知識が含まれています。 新しいパターンが見つかった場合、学習者自身が更新できます。
Core Principle
再利用可能なスキルとは、コピーして貼り付けるコードスニペットではなく、ある種の問題について Claude がどのように考えるべきかを教える原則と意思決定のヒューリスティックです。
違い:
- BAD(模倣):"ConnectionResetError が発生したら、この try/except ブロックを追加する"
- GOOD(再利用可能なスキル):"非同期ネットワークコードでは、クライアントとサーバーのライフサイクルの不一致により、どの I/O 操作も個別に失敗する可能性があります。原則:各 I/O 操作を個別にラップしてください。操作間の失敗は例外ではなく、よくあるケースだからです。"
Quality Gate
スキルを抽出する前に、次の 3 つすべてを満たす必要があります。
- "5 分で Google 検索できる内容か?" → NO
- "このコードベースに固有の内容か?" → YES
- "発見するために実際のデバッグ作業が必要だったか?" → YES
Recognition Signals
次の場合にのみ抽出してください。
- 深い調査が必要な厄介なバグを解決した
- このコードベース固有の、分かりにくい回避策を見つけた
- 忘れると時間を浪費する、見落としやすい落とし穴を発見した
- このプロジェクトに影響する、文書化されていない動作を突き止めた
What Makes a USEFUL Skill
-
Google 検索では見つけにくい:検索しても簡単には見つけられない内容
- BAD:"TypeScript でファイルを読み込む方法" ❌
- GOOD:"このコードベースでは ESM のカスタムパス解決を使用しており、fileURLToPath と特定の相対パスが必要" ✓
-
コンテキスト固有:このコードベースの実際のファイル、エラーメッセージ、パターンに言及している
- BAD:"エラー処理には try/catch を使う" ❌
- GOOD:"server.py:42 の aiohttp プロキシは ClientDisconnectedError でクラッシュするため、StreamResponse を try/except でラップする" ✓
-
正確で実行可能:何をどこで行うべきかを具体的に示している
- BAD:"エッジケースに対応する" ❌
- GOOD:"dist/ で 'Cannot find module' が発生したら、tsconfig.json の moduleResolution が package.json の type フィールドと一致しているか確認する" ✓
-
苦労して得た知見:発見するためにかなりのデバッグ作業が必要だった
- BAD:一般的なプログラミングパターン ❌
- GOOD:"worker.ts の競合状態:89 行目の Promise.all は、map コールバックが戻る前に await する必要がある" ✓
Anti-Patterns (DO NOT EXTRACT)
- 一般的なプログラミングパターン(代わりにドキュメントを使う)
- リファクタリング手法(普遍的なもの)
- ライブラリの使用例(ライブラリのドキュメントを使う)
- 型定義やボイラープレート
- 初級開発者でも 5 分で Google 検索できる内容
Workflow
このセクションには、安定した抽出手順が含まれています。 改善サイクルでは更新しないでください。
Step 1: Gather Required Information
-
Problem Statement:発生した具体的なエラー、症状、または混乱
- 実際のエラーメッセージ、ファイルパス、行番号を含める
- 例:"再起動後に sessionId が undefined の場合、src/hooks/session.ts:45 で TypeError が発生する"
-
Solution:一般的なアドバイスではなく、正確な修正内容
- コードスニペット、ファイルパス、設定変更を含める
- 例:"session.user にアクセスする前に null チェックを追加し、401 の場合はセッションを再生成する"
-
Triggers:この問題が再発したときに現れるキーワード
- エラーメッセージの一部、ファイル名、症状の説明を使う
- 例:["sessionId undefined", "session.ts TypeError", "401 session"]
-
Scope:本当に普遍的な知見でない限り、ほとんどの場合はプロジェクトレベル
Step 2: 品質の検証
次のスキルはシステムによって拒否されます。
- 汎用的すぎる(ファイルパス、行番号、具体的なエラーメッセージがない)
- Google で簡単に見つかる(標準的なパターン、ライブラリの使用方法)
- 解決策が曖昧(コードスニペットや正確な手順がない)
- トリガーの質が低い(何にでも一致する汎用的な語句)
Step 3: 専門知識かワークフローかを分類する
保存する前に、学習内容が次のどちらに該当するかを判断します。
- 専門知識(ドメイン知識、パターン、注意点)→
{topic}-expertise.mdとして保存します - ワークフロー(運用手順、手順の流れ)→
{topic}-workflow.mdとして保存します
この分類により、ワークフローを不安定にすることなく、専門知識を個別に更新できます。
Step 4: 保存場所
- ユーザーレベル:
${CLAUDE_CONFIG_DIR:-~/.claude}/skills/omc-learned/<skill-name>.md- まれに使用します。本当に移植可能な知見に限ります。 - プロジェクトレベル:
.omc/skills/<skill-name>.md- デフォルトです。チームにスキルを引き継ぐため、リポジトリとともにコミットすることを想定しています。リンクされたワークツリーでは、未コミットのスキルもワークツリー内にのみ存在し、そのワークツリーを削除すると失われます。
必須ファイル形式
学習済みスキルのフラットファイルを検出して読み込めるよう、学習済みスキルの各ファイルは必ず YAML フロントマターで始めてください。 フロントマターのないプレーンな Markdown は書かないでください。
必須の最小限のフロントマター:
---
name: <skill-name>
description: <one-line description>
triggers:
- <trigger-1>
- <trigger-2>
---
スキル本文テンプレート
---
name: <skill-name>
description: <one-line description>
triggers:
- <trigger-1>
- <trigger-2>
---
# [Skill Name]
## The Insight
What is the underlying PRINCIPLE you discovered? Not the code, but the mental model.
## Why This Matters
What goes wrong if you don't know this? What symptom led you here?
## Recognition Pattern
How do you know when this skill applies? What are the signs?
## The Approach
The decision-making heuristic, not just code. How should Claude THINK about this?
## Example (Optional)
If code helps, show it - but as illustration of the principle, not copy-paste material.
ポイント:Claude が同一の状況だけでなく、新しい状況にも適用できる場合、そのスキルは再利用可能です。
関連コマンド
- /oh-my-claudecode:note - コンパクション後も保持される簡単なメモを保存します(スキルより形式ばりません)
- /oh-my-claudecode:ralph - 学習内容の記録を含む開発ループを開始します