/teach-me — エビデンスベースのコースジェネレーター
ユーザーが学びたい任意のトピックについて、自己学習用のマークダウンコース+自己完結型のHTMLミニコースを生成します。成人学習者(CEFR B1読解レベル、事前知識不要)向けに設計され、認知心理学と教育設計研究に基づいています。
使用するタイミング
- ユーザーが
/teach-me <トピック>を呼び出した場合(引数なしの場合はトピックを尋ねる) - ユーザーが「Xについて教えて」「Xを学びたい」「Xを深く掘り下げて」「Xのコースを作成して」「Xを一緒に勉強しよう」と言った場合
- 以下の場合は使用しないでください: 簡単な事実を尋ねる質問(「Xとは何か」— 単に答える)、コードヘルプ、デバッグ、ドキュメント検索、ライブラリAPIの質問(代わりに
context7を使用)
教育法の基盤(作業を開始する前に読むこと)
このスキルは、よく再現性のある学習科学に基づいています。以下のルールは交渉可能なデフォルトではなく、ユーザーが求めているものです:
- 具体から抽象へ (Goldstone, Fyfe et al.)。各章は、抽象的な定義の前に、具体的で観察可能なインスタンスで始まります。
- 再読よりも検索練習 (Roediger & Karpicke; Rowland 2014 メタ分析)。各章の最後に、3~5個の自由再生プロンプトと1個の章をまたぐコールバックがあります。
- 意図的なコールバックによる分散学習 (Cepeda et al. 2006)。主要な概念はすべて、後の少なくとも2つの章で(再定義ではなく)使用されます。
- ワーキング例+後方フェーディング (Sweller, Renkl & Atkinson)。初期の章: 完全なワーキング例。中期: 段階的に空白を埋めていく。後期: プロンプトのみ。
- 認知負荷理論 (Sweller, Mayer)。1章あたり新しく名前付けられる概念は最大約4つ。一度に導入する難易度の次元は1つ。
- セグメント化/カード (Mayer & Pilegard)。各章は250~500語のカードのデッキで、カード1枚につき概念1つ、図1つです。
- 図解ファーストの視覚的一貫性 (Mayer マルチメディア原則)。関係概念には図が必須です。装飾的な画像はなし。ラベルは図の上にインラインで、別の凡例にはしないでください。
- 比喩の健全性 (Gentner 構造マッピング)。すべての比喩の後に、2文以内に「ここで比喩が通用しなくなる点」を明示する免責事項を記載してください。
- 専門用語ゲート (Nathan/Koedinger エキスパートブラインドスポット研究)。すべての専門用語は、初出時に定義するか、以前の章の用語集エントリにリンクしてください。「一般的な」用語であっても例外はありません。
- 制約付き自己説明プロンプト (Chi et al.; Bisra et al. 2018 g≈0.55)。カード間に: 「次の文を完成させてください: Xが機能する理由は___」というプロンプトと、トグルで表示される模範解答。
- B1読者向けの平易な言葉遣い。平均文長18語以下、最大25語。従属節は1文あたり最大1つ。受動態は10%以下。能動態。二人称。イディオムなし。
- 学習者が既に知っていることに基づいて構築する (Ausubel)。事前インタビューでユーザーの既知のドメインを把握し、ライティングガイドがそれらを比喩バンクに変換します。
- 状態変化を表示し、説明しない (Larkin & Simon 1987; Tversky & Morrison 2002 把握原則; Wong/Leahy/Marcus/Sweller 2012 一時的情報効果; Tufte スモールマルチプル; Mayer のセグメント化)。散文が連続する状態を説明する場合(「最初にこれ、次にそれ、クラッシュした後は…」)、代わりに2~5パネルの
<div class="state-sequence">を使用してください。すべてのパネルで同じ形状、変化部分に注釈、キャプション=トリガー+不変条件。読者は進化を見るのであって、それについての物語を読むのではありません。
否定されたもの — 決して使用しないでください: 学習スタイル(VAK)、10,000時間ルール、ゲーミフィケーションの連続ログインボーナス/バッジ、「エンゲージメント」のための装飾画像、「右脳/左脳」、「デジタルネイティブ」。
プロセスフロー
digraph teach_me {
rankdir=TB;
"呼び出しの解析" [shape=box];
"既存フォルダ?" [shape=diamond];
"出力場所" [shape=box];
"事前インタビュー" [shape=box];
"調査(4つの並列エージェント)" [shape=box];
"統合 + OUTLINE.md 作成" [shape=box];
"ユーザーが章を選択" [shape=box];
"WRITING_GUIDE.md 作成" [shape=box];
"章の生成(並列バッチ)" [shape=box];
"一貫性パス" [shape=box];
"index.html 構築" [shape=box];
"フォルダとブラウザを開く" [shape=doublecircle];
"呼び出しの解析" -> "既存フォルダ?";
"既存フォルダ?" -> "出力場所" [label="いいえ"];
"既存フォルダ?" -> "出力場所" [label="拡張 / 新規 / キャンセル"];
"出力場所" -> "事前インタビュー";
"事前インタビュー" -> "調査(4つの並列エージェント)";
"調査(4つの並列エージェント)" -> "統合 + OUTLINE.md 作成";
"統合 + OUTLINE.md 作成" -> "ユーザーが章を選択";
"ユーザーが章を選択" -> "WRITING_GUIDE.md 作成";
"WRITING_GUIDE.md 作成" -> "章の生成(並列バッチ)";
"章の生成(並列バッチ)" -> "一貫性パス";
"一貫性パス" -> "index.html 構築";
"index.html 構築" -> "フォルダとブラウザを開く";
}
フェーズをスキップしないでください。 進捗をTaskCreateで追跡し、ユーザーが現在地を確認できるようにしてください。
フェーズ0 — 呼び出しの解析
- 引数からトピックを取得します。引数がない場合は、次のように返信します: 「どのトピックを学びたいですか?技術的なもの(ライブラリ、言語、概念)でも、非技術的なもの(哲学、分野、スキル)でも構いません。」 そして待機します。
- トピック検証ガード:
- トピックが有害な場合(兵器の合成、悪意のあるハッキングの対象、違法行為)— 簡潔に拒否して停止します。説教はしません。
- トピックが不可能なほど広い場合(
プログラミング、科学、すべて)— ユーザーに2~3の具体的な例で絞り込むよう依頼します: 「それは非常に広いですね。'TypeScriptの非同期プログラミングパターン'や'コンパイラの仕組み'のように絞り込みませんか?」 より狭い回答を待ちます。 - トピックが曖昧だが扱える場合(
AI、データベース)— そのまま進みます。インタビューの自由形式の範囲質問でさらに絞り込まれます。
- スラッグを計算します: 小文字にし、英数字以外を
-に置換し、連続する-を1つにまとめ、先頭と末尾の-を削除します。例:Asynchronous Programming→asynchronous-programming。
フェーズ1 — 既存フォルダの確認
- メモリから出力場所を読み取ります(その保存方法についてはフェーズ2を参照)。メモリに場所がない場合、この確認はフェーズ2で場所を収集するまで延期します。
<output-location>/learn-<slug>/が既に存在するか確認します。- 存在する場合、
AskUserQuestionを使用して3つのオプションを提示します:- 拡張 — 新しい章を追加したり、特定の章を新しいスタイルノートで再生成したり、調査をリフレッシュして再度選択します。
- 新規作成 — 既存のフォルダを
learn-<slug>-archived-YYYY-MM-DD/にリネームし、新しいコースを進めます。 - キャンセル — 停止します。
- 拡張の場合: サブオプション — (a) 新しいサブトピックに関する章を追加(以前の OUTLINE.md をコンテキストとして調査にスキップ)、(b) 特定の章番号を新しいノートで再生成(該当する章の作成フェーズにスキップ)、(c) 調査をリフレッシュして章を再選択(以前の OUTLINE.md をマージして完全に再実行)。
- 以前のコースを破壊的に上書きしないでください。
フェーズ2 — 出力場所
teach-me-output-locationまたは類似のタグが付いたエントリをメモリで検索します。C:/Users/AlemTuzlak/.claude/projects/F--projects/memory/*.mdでGlobを使用し、Grepでteach-meを検索します。- 見つかり、そのパスがまだ存在する場合は、それを使用します。簡潔に表示: 「
<path>に書き込みます。」 - 見つからない場合、
AskUserQuestionで尋ねます:F:/projects/learning/を使用(フォルダがない場合は作成)— 推奨。- 現在の作業ディレクトリを使用 (
./)。 - 別のパスを指定 — ユーザーが「その他」で指定します。
- ユーザーが回答した後、尋ねます: 「この場所を今後の
/teach-me実行のデフォルトとして保存しますか?」 —AskUserQuestionで yes/no。 - yes の場合、フロントマター
type: userと本文にパスを記載したメモリファイルteach_me_output_location.mdを作成します。MEMORY.mdに1行追加します。 - 解決した場所でフェーズ1の既存フォルダ確認を再試行します。
フェーズ3 — 事前インタビュー
2回のラウンドトリップで尋ねます:
ラウンド1 — 4つの構造化質問を含む1つの AskUserQuestion
Q1 [現在の知識]: <トピック>についてどの程度知っていますか?
- 聞いたことがない
- 用語は知っているが、実践経験はない
- 基本的なものを作ったことがある
- 中級レベルの実践者
Q2 [目標とする習熟度]: 最終的にどのレベルになりたいですか?
- 概念的な概要のみ
- 基本的なものを作れるようになりたい
- 本番品質のものを作れるようになりたい
- 他人に教えられるようになりたい
Q3 [深さの予算]: どの程度の深さを希望しますか?
- クイックプライマー(約3~5章)
- 標準(約6~10章)
- ディープダイブ(調査したすべて、10~15章以上)
Q4 [練習量]: どの程度の実践練習を希望しますか?
- 軽め(読書中心)
- 標準(読書+検索+時々練習問題)
- 多め(すべての章にワーキング例と練習問題あり)
ラウンド2 — 1つのプレーンテキストメッセージ返信
次のメッセージを正確に送信します(<トピック> を置き換える):
調査を開始する前に、あと2つお聞きします:
1. 既に得意としていることは何ですか? 言語、フレームワーク、分野、趣味など、真剣に取り組んだことのあるものをすべて挙げてください(例: 「TypeScript、React、音楽理論、料理、チェス」)。これらを比喩のソースとして使用し、新しい概念をあなたが既に知っていることに結び付けます。
2. <トピック>内で特定の角度はありますか? それとも広くカバーすべきですか?「任せる」と答えると、全範囲をカバーします。
両方を含む1つの返信を待ちます。カンマ区切りリスト、箇条書き、自由形式など、緩く解析します。
回答を作業用構造体に保存します(後で OUTLINE.md と WRITING_GUIDE.md に書き込みます)。
フェーズ4 — 調査(4つの並列エージェント)
1つのバッチ化された Agent 呼び出し をディスパッチし、4つの general-purpose サブエージェントを含めます。それらは並列に実行されます。各エージェントは自己完結した指示を受け取り、構造化されたレポートを返します。
レーンA — 権威あるコンテンツ。 <トピック> に関するトップ記事、チュートリアル、カンファレンストーク、論文を見つけます。最もシグナルの高い結果を WebSearch + WebFetch します。8~15件を、それぞれの「読む理由」を1行で返し、[article|tutorial|talk|paper] でタグ付けします。
レーンB — ニッチなインフルエンサーと実践者。 <トピック> で知られている特定の人々を見つけます — テクノロジーセレブではなく、このニッチに深く切り込む独自のブログ/ニュースレター/Twitterを持っている実践者。4~8人を、名前、個人アウトレット(ブログURL)、シグネチャーポストURL、フォローする価値がある理由を1行で返します。アウトプットが企業マーケティングだけの人はスキップします。
レーンC — 公式リファレンス。 公式ドキュメント、仕様、リファレンス実装、決定版テキスト。<トピック> がライブラリ/フレームワーク/CLIツールの場合、context7 MCP(resolve-library-id してから query-docs)を使用して現在の公式ドキュメントを取得します。3~8のソースをバージョン情報とともに返します。
レーンD — サブトピックマップと標準言語。 トピックを調査して、1行の説明付きのサブトピックのツリーを生成します(通常8~15のサブトピック)。前提条件を最初に、発展的な内容を最後にした、指導上の順序を提案します。トピックが技術的な場合、公式ドキュメント/本番で最も一般的に使用される標準言語を特定します(例: Temporal → TypeScript または Go; LangGraph → Python)。明示的に次のように述べます: 「標準言語: X、理由はY。」
各エージェントは800語未満で、構造化されて報告します。4つすべてが戻ってきたら、統合します。
フェーズ5 — アウトラインと章の選択
<output-location>/learn-<slug>/OUTLINE.mdを次の構造で作成します:
# <トピック>を学ぶ
## あなたの目標(記録済み)
- **現在のレベル**: <Q1の回答>
- **目標習熟度**: <Q2の回答>
- **深さ**: <Q3の回答>
- **練習量**: <Q4の回答>
- **既知のドメイン(比喩バンク)**: <ラウンド2のカンマ区切り>
- **範囲/角度**: <ラウンド2の回答>
## サブトピックマップ(調査より)
1. <サブトピック1> — <1行説明>
2. <サブトピック2> — <1行説明>
...
## 推奨順序
前提条件を考慮し、各ステップの根拠を示した順序。
## 推奨される章(深さの予算に基づく約N章)
提案された章の番号付きリスト。各エントリ: 短いタイトル+カバー内容の1行+推定カード数(1章あたり5~9枚)。
## 標準言語(技術トピックのみ)
<言語と1行の根拠>
## 推奨ソース
- [ソース1](url) — [タイプ] — 読む理由
...
## フォローする価値のあるニッチインフルエンサー
- **名前** — [ブログURL] — シグネチャーポスト: [ポストURL] — フォローする価値がある理由を1行
...
- ファイルを自動的に開きます:
Bash code --new-window "<OUTLINE.mdの絶対パス>" - 次のメッセージを適宜置き換えてユーザーに返信します:
アウトラインを
<絶対パス>に作成し、開きました。どの章を作成するか返信してください:
all— 推奨されるすべての章を作成1,3,5-7— 特定の章または範囲- 自由形式 — 自分の言葉で焦点を当てる内容を説明
reshape— 確定前に追加、削除、マージ、並べ替えを指示
reshapeを選択した場合、OUTLINE.md を修正し、再度尋ねます。
- ユーザーが
reshapeと言った場合、メモを取り、OUTLINE.md を修正し、保存し、再度開き、再度尋ねます。確定するまでループします。 - 選択を解析して、最終的な順序付けられた章リスト
picks = [...]にします。
フェーズ6 — WRITING_GUIDE.md の作成
<output-location>/learn-<slug>/WRITING_GUIDE.md を作成します。このファイルは、すべての章作成エージェントと一貫性パスエージェントの共有ブリーフです。包括的かつ具体的である必要があります。
<skill-dir>/assets/templates/WRITING_GUIDE.template.md のテンプレートを出発点として使用し、ユーザーの記録されたインタビュー回答をプレースホルダー({{TOPIC}}、{{CURRENT_LEVEL}}、{{TARGET_PROFICIENCY}}、{{PRACTICE_LOAD}}、{{KNOWN_DOMAINS}}、{{SCOPE}}、{{CANONICAL_LANGUAGE}})に置き換えます。
また、章作成者には <skill-dir>/assets/COMPONENTS.md のコンポーネントライブラリリファレンスを参照するよう指示します — 作成前にざっと目を通す必要があります。コールアウト、図カード、比較ブロック、タブ、統計カード、プラットフォームピル、ステップリストがすべて利用可能です。一部はマークダウン規約から自動生成され、残りはマークダウン内の明示的なHTMLです。
生成されたファイルが、この SKILL.md の上部にある「教育法の基盤」セクションにリストされている12の教育ルールすべてを適用していることを確認します。ルールがガイドに表現されていない場合は、続行する前に追加します。
フェーズ7 — 章の生成(並列バッチ)
選択された章を、ラウンドごとに3~5の作成サブエージェントの並列バッチで生成します。ラウンドは順次実行されます。
各ラウンドについて:
- バッチ内の各章に対して、
WRITING_GUIDE.mdが共有ブリーフとなるgeneral-purposeAgentサブエージェントをディスパッチします。各サブエージェントは次の指示を受け取ります:- 章番号とタイトル
- アウトラインからの内容
- 生成のための特定の指示
- 各サブエージェントは、フェーズ6の教育ルールに従って、章コンテンツをマークダウンで生成します。
- すべてのサブエージェントが完了したら、出力を収集し、
<output-location>/learn-<slug>/chapters/に保存します。 - 進行状況をユーザーに報告します。
フェーズ8 — 一貫性パス
すべての章が生成されたら、単一の general-purpose Agent をディスパッチして一貫性パスを実行します。このエージェントはすべての章を読み、以下を確認します:
- 用語の一貫性
- 相互参照の正確性
- 教育ルールの適用
- 章間のコールバックの存在
- 比喩の健全性
必要に応じて章を修正します。
フェーズ9 — index.html の構築
<output-location>/learn-<slug>/index.htmlを作成します。これは、すべての章を1つのページに結合し、ブラウザで表示できる自己完結型のHTMLファイルです。- HTMLファイルには以下を含める必要があります:
- 目次
- すべての章のコンテンツ(マークダウンからHTMLに変換)
- 図のインラインSVG
- スタイル(CSS)
- インタラクティブ要素(トグル、クイズなど)のためのJavaScript
- ファイルを
<output-location>/learn-<slug>/に保存します。 AskUserQuestionで許可を求めた後、Startを使用してデフォルトブラウザで開きます。
フェーズ10 — フォルダとブラウザを開く
Bash start "<output-location>/learn-<slug>"でフォルダを開きます。- 許可があれば、ブラウザで
index.htmlを開きます。
付録: コンポーネントリファレンス
利用可能なコンポーネントの詳細については、<skill-dir>/assets/COMPONENTS.md を参照してください。
図カード
:::diagram
**図: [タイトル]**
[SVGまたはASCIIアート]
*キャプション: [説明]*
:::
コールアウト
:::tip[覚えておきましょう]
重要なポイント。
:::
:::warning[注意]
よくある間違い。
:::
状態シーケンス
<div class="state-sequence">
<div class="panel">
<div class="panel-label">開始</div>
[状態1の図]
</div>
<div class="panel">
<div class="panel-label">トリガー後</div>
[状態2の図、変化部分に注釈]
</div>
</div>
<p class="caption">キャプション: トリガー + 不変条件</p>