Communityライティング&編集github.com

Leutenegger/book-to-skill

あらゆる技術書PDFをClaude Codeスキルに変換 — 作業中に学習、参照、活用できる状態にします。

book-to-skill とは?

このスキルは、技術書や専門書の内容を、GitHub Copilot CLI、Amp、Claude CodeなどのAIエージェントが直接利用可能なスキルファイルに変換します。単なる要約ではなく、著者のフレームワーク、原則、テクニック、アンチパターン、思考スタイルを構造化して抽出します。入力されたPDF、EPUB、DOCX、Markdownなどの文書からテキストを抽出し、章ごとの要約、用語集、パターン集、チートシートを生成。利用目的(フレームワーク適用、思考モデル習得、参照用など)に応じて深さを調整し、50kトークンを超える大規模書籍では効率的なプログラム的アクセスを行います。スキル名は著者-コンセプト形式やタイトル形式から選択でき、生成されたスキルは複数のエージェント環境で動作します。

対応✓Claude Code~Codex CLI~Cursor
npx skills add Leutenegger/book-to-skill

Installed? Explore more ライティング&編集 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Book-to-Skill コンバーター

書かれた知識を、要約ではなく構造を抽出することで、実用的なエージェントスキルに変換します。

哲学

書籍には結晶化された専門知識(フレームワーク、原則、テクニック)が何年もかけて開発された形で含まれています。このスキルは、その知識をGitHub Copilot CLI、Amp、Claude Code、またはその他の互換性のあるエージェントが繰り返し活用できる形式に抽出します。

構造を抽出し、要約はしない。 スキルは書評ではありません。それは以下のツールキットです:

  • 名前付きフレームワーク(明確な適用方法を持つメンタルモデル)
  • 実践可能な原則(意思決定を導くルール)
  • テクニック(ステップバイステップの方法)
  • アンチパターン(避けるべきこととその理由)
  • ボイスキャリブレーション(著者の思考と表現方法)

著者の正確さを保つ。 フレームワークには理由があって特定の名前が付いています。「5つのなぜ」は「なぜを複数回尋ねる」とは交換できません。正確な表現を捉えてください。

適切に深みをレイヤー化する。 シンプルな本 → シンプルなスキル。10以上のフレームワークを含む複雑な本 → 参照ファイルとオンデマンドチャプターを持つスキル。


動作モード

4つのパスがあります。ユーザーのリクエストに基づいてルーティングします:

1. フル変換(デフォルト)

トリガー: ユーザーが特別な指示なしに1つ以上のドキュメント/ディレクトリ/グロブパスを提供する アクション: 以下のすべてのステップ(ステップ0~9)を実行する 出力: SKILL.md、chapters/、用語集、パターン、チートシートを含む完全なスキル

2. 分析のみ

トリガー: ユーザーが「分析」「抽出だけ」「生成前に確認したい」と言う アクション: ステップ0~3を実行し、構造化された抽出レポート(フレームワーク、原則、テクニック)を生成する。停止 — スキルファイルは生成しない。 出力: ユーザーレビュー用の分析レポート

3. 事前分析から生成

トリガー: ユーザーが既存の分析ノートを持っているか、以前に分析のみを実行した アクション: ステップ0~3をスキップし、提供された分析を入力として使用し、ステップ4~9を実行する 出力: 提供された分析からのスキルファイル

4. 更新/統合(既存スキル)

トリガー: ユーザーが1つ以上の新しいソースパスを提供し、既存のスキルを更新したいと表明する(既存のスキルフォルダを指定するか、SKILLS_HOME に既に存在するスキルスラッグを提供するか、明示的に更新をリクエストする)。 アクション: ステップ0(範囲外チェック)、ステップ1(入力検証)、ステップ1.5(書籍タイプの特定)、ステップ2(新しいファイルの抽出)を実行する。その後、ステップ5(既存のスキルパスの特定/検出)にスキップし、更新/統合ワークフローを実行して、新しいコンテンツを既存のスキルファイルにマージする。 出力: 新しい/改訂されたチャプター要約とマージされたインデックス/用語集を持つ、更新された既存スキル


スキル保存場所

このコンバーターは複数のスキルシステムから実行できます。このコンバーターのヘルパースクリプトを探したり、生成されたブックスキルを書き込む際は、以下の場所を優先順に使用します:

  1. GitHub Copilot CLI 個人スキル: ~/.copilot/skills/
  2. クロスエージェント個人スキル(Copilot + Amp): ~/.agents/skills/
  3. Claude Code 個人スキル: ~/.claude/skills/
  4. プロジェクトローカル Copilot スキル: .github/skills/
  5. プロジェクトローカル Claude スキル: .claude/skills/
  6. プロジェクトローカル Amp / Copilot スキル: .agents/skills/
  7. Amp グローバルスキル: ~/.config/agents/skills/
  8. Amp レガシーグローバルスキル: ~/.config/amp/skills/

生成されたブックスキルについては、ユーザーのホストエージェントが実際に検出できる保存先を選んでください(ステップ5を参照)。有効なルートが複数存在する場合は、ユーザーに一度だけ尋ね、そのセッション中は答えを記憶してください — 黙ってデフォルトにしないでください。


ステップ0 — 範囲外チェック

引数が提供されていない場合、停止して応答:

「book-to-skill は、サポートされているドキュメントパス、フォルダ、またはグロブパターンが必要です。使用方法: book-to-skill <path-to-document-folder-or-glob>... [skill-name-slug]」

ワークフロー全体を通して:

  • 入力パスとオプションのスキルスラッグを特定します。
  • 最後の引数がファイル、フォルダ、または存在する/ファイルにマッチするグロブではなく、かつスキルスラッグのように見える場合(例: 小文字のハイフン、英数字)、それを SKILL_NAME として扱います。
  • 他のすべての引数を INPUT_PATHS のリストとして扱います。
  • いずれかの入力パスが既存のスキルディレクトリである場合(SKILL.md と chapters/ サブフォルダを含む)、または SKILL_NAME が SKILLS_HOME 内の既存のスキルスラッグと一致する場合、この実行を 更新/統合 操作(モード4)としてフラグ付けします。

ステップ1 — 入力の検証

INPUT_PATHS の中に、サポートされているファイル、ディレクトリ、またはグロブパターンが少なくとも1つあることを確認します。 ディレクトリとグロブについては、展開してマッチするサポート対象ファイル(.pdf、.epub、.docx、.txt、.md、.markdown、.rst、.adoc、.html、.htm、.rtf、.mobi、.azw、.azw3)を見つけます。

サポート対象ファイルが見つからない場合、明確なエラーメッセージを表示して停止します。


ステップ1.5 — コンテンツタイプの特定

抽出前に、ユーザーに質問します:

「これらのソースにはどのような種類のコンテンツがありますか?これは最適な抽出方法を選択するのに役立ちます。

  1. 技術書 — コードブロック、表、数式、図を含む(例: プログラミング書籍、学術論文、アーキテクチャガイド)
  2. テキスト中心 — 主に散文、表やコードはほとんどない(例: マネジメント、生産性、ノンフィクション)
  3. わからない — 高速な方法を使用し、品質が限定的な場合は警告します」

答えを BOOK_TYPE として保存:

  • 選択肢1 → BOOK_TYPE=technical
  • 選択肢2 → BOOK_TYPE=text
  • 選択肢3 → BOOK_TYPE=text

BOOK_TYPE=technical の場合、続行前にユーザーに通知:

「📐 テクニカルモード選択 — Docling を使用して構造認識抽出(表、コードブロック、数式はマークダウンとして保存)を行います。1ページあたり約1.5秒かかるため、長めのソースでは数分かかることがあります。開始します…」

BOOK_TYPE=text の場合、通知:

「📄 テキストモード選択 — 各ファイルタイプに最適な最速の抽出ツールを使用します。プレーンテキスト/マークダウン/HTMLは通常数秒で準備完了。PDFは利用可能な場合 pdftotext を使用します。」


ステップ2 — ソースドキュメントからテキストを抽出

抽出スクリプトを実行し、入力パスを渡します:

SCRIPT_PATH=""
for candidate in \
  "$HOME/.copilot/skills/book-to-skill/scripts/extract.py" \
  "$HOME/.agents/skills/book-to-skill/scripts/extract.py" \
  "$HOME/.claude/skills/book-to-skill/scripts/extract.py" \
  ".github/skills/book-to-skill/scripts/extract.py" \
  ".claude/skills/book-to-skill/scripts/extract.py" \
  ".agents/skills/book-to-skill/scripts/extract.py" \
  "$HOME/.config/agents/skills/book-to-skill/scripts/extract.py" \
  "$HOME/.config/amp/skills/book-to-skill/scripts/extract.py"
do
  if [ -f "$candidate" ]; then
    SCRIPT_PATH="$candidate"
    break
  fi
done

if [ -z "$SCRIPT_PATH" ]; then
  echo "book-to-skill の scripts/extract.py が見つかりませんでした" >&2
  exit 1
fi

PYTHON_BIN="${PYTHON_BIN:-python3}"
if ! command -v "$PYTHON_BIN" >/dev/null 2>&1; then
  PYTHON_BIN="python"
fi

"$PYTHON_BIN" "$SCRIPT_PATH" $INPUT_PATHS --mode <BOOK_TYPE> --install-missing ask

抽出前に、スクリプトは検出された形式に必要なオプションのPythonパッケージをチェックします。より良い抽出ツールがない場合、利用可能なフォールバックをユーザーにプロンプト表示します。非対話型セッションでは、インストールモードが明示的に yes でない限り、デフォルトでフォールバックが使用されます。

ヒント — 環境の事前確認: "$PYTHON_BIN" "$SCRIPT_PATH" --check を実行すると、どの抽出ツールがインストールされているかの形式ごとのレポートと、不足しているものをインストールするための正確なコマンドが、ファイルを処理せずに表示されます。ユーザーがセットアップや品質の問題を報告した場合に便利です。

これにより以下が作成されます:

  • <tempdir>/book_skill_work/full_text.txt — 全ソースの結合抽出テキスト(明確に視覚的に区切られた境界あり)
  • <tempdir>/book_skill_work/metadata.json — 全体の結合サイズ、単語数、ページ数、トークン数、および個別に処理された sources の詳細リスト

<tempdir>/book_skill_work/metadata.json を読み込んで結果を確認します。


ステップ2.5 — 事前コスト見積もり

<tempdir>/book_skill_work/metadata.json を読み込み、生成を行う前にユーザーに見積もりを提示します:

📖 検出されたソース: <total_sources> ソース
<ソースメタデータリストから各ソースファイル名と形式をリスト>
📄 結合ページ/セクション: ~<N> | 単語数: ~<N> | 総トークン数: ~<N>K

💰 推定トークンコスト(フル変換/更新):
   入力(読み取り+プロンプト): ~<N>K トークン
   出力(生成/更新されるスキルファイル):  ~<N>K トークン
   合計:                           ~<N>K トークン

   コスト: 上記のトークン数に、お使いのモデルの現在の100万トークンあたりの
   入出力レートを掛けてください(価格とモデル名は頻繁に変わります —
   ハードコードせず、今日のレートを引用し、見積もりとラベル付けしてください)。

   ⏱  推定時間: ~<N> 分

📁 生成/更新されるファイル:
   SKILL.md + チャプターファイル + 用語集 + パターン + チートシート

➡  フル変換/更新を続行しますか?(または「分析のみ」と入力して先にプレビュー)

見積もり方法:

  • 入力トークン ≈ メタデータの estimated_tokens × 1.3(チャプターごとのプロンプトオーバーヘッド)
  • 出力トークン ≈ チャプター数 × チャプター予算 + 4,000(SKILL.md)+ 4,500(用語集 + パターン + チートシート)
    • BOOK_TYPE によるチャプター予算の中間点(DEPTH はステップ4で後で決定され、引き上げられる可能性があります): text ≈ 1,000、technical ≈ 1,800。ユーザーがすでに参照のみか深い学習かを示している場合は、ステップ7のマトリックスの該当する行を使用します。
  • コスト: トークン数を報告し、ユーザーの現在の100万トークンあたりの入出力レートを掛けます。ドル金額をハードコードしないでください — モデル名と価格は変わります。表示する場合は、見積もりとラベル付けし、日付を記入してください。

続行する前にユーザーの確認を待ちます。「分析のみ」と言われた場合は、モード2に切り替えます。


ステップ2.6 — 大規模書籍(50kトークン超)向けREPLスタイルアクセス

再帰的言語モデル(RLM)パラダイムに着想を得て: full_text.txt を1回の読み取りではなく、クエリ可能なコーパスとして扱います。ファイル全体をコンテキストに読み込むと、後で生成に必要な予算を消費します。

約50kトークンを超える書籍では、範囲指定なしの Read(full_text.txt) よりもプログラム的なプローブを優先します:

# Read 前のサイズチェック
wc -w "$FULL_TEXT_PATH"

# ファイル全体を読み込まずにチャプターのオフセットを見つける
grep -n -E "^\s*(Chapter|CHAPTER)\s+[0-9]+" "$FULL_TEXT_PATH" | head -40

# 必要なチャプターだけを取得(開始行..終了行を含む)
sed -n '<start>,<end>p' "$FULL_TEXT_PATH"

# SKILL.md で主張する前に、フレームワークが実際に言及されているか確認
grep -c -i "westrum\|dora" "$FULL_TEXT_PATH"

# オフセット/リミット指定のターゲット Read は全ファイルダンプを避ける
# Read(file_path=full_text.txt, offset=<line>, limit=<lines>)

このアプローチをステップ3(構造分析)、ステップ7(チャプターごとの要約)、ステップ8(用語集/パターン抽出)で使用します。50kトークン未満の書籍では、単一の Read で問題ありません。

これが重要な理由: 200ページの書籍は約75kトークンです。チャプターごとに1回ずつ再読み取りすると(28パス)約200万入力トークンがかかります。 grep + sed を使用して関連するスライスのみを取得すると、生成コストをソースではなく出力に比例させることができます。


ステップ3 — 書籍構造の分析

抽出された full_text.txt の最初の8,000文字を読み、以下を特定します:

  • 書籍のタイトルと著者
  • チャプター構成(「第N章」「PART I」、番号付き見出し、目次を探す)
  • コアテーマと対象分野
  • おおよそのチャプター数

次に、存在する場合は目次セクションを読み、すべてのチャプターをマッピングします。

モードが「分析のみ」の場合: 今すぐ抽出レポートを生成して停止します。構造:

## 抽出レポート — <タイトル>

### 著者のコアフレームワーク
- **<フレームワーク名>**: <説明と適用タイミング>

### 主要原則
- <原則>: <実践可能なルール>

### テクニックと方法
- <テクニック>: <ステップバイステップまたは方法>

### アンチパターン
- <避けるべきこと>: <理由>

### 提案スキル名
`{著者姓}-{コアコンセプト}` — 例: `cialdini-influence`

### 検出されたチャプター
| # | タイトル | 主要フレームワーク |

ステップ4 — 目的の確認(フル変換のみ)

生成前に、ユーザーに質問します:

「このスキルは何をするのに役立てますか?(1つ以上選択)

  1. 作業中に著者のフレームワークを適用する
  2. 著者のメンタルモデルで考える
  3. 特定のチャプターやコンセプトを参照する
  4. すべて」

回答を使用して、SKILL.md のコアセクションで何を強調するかの重み付けを行います。

回答から DEPTH を導出する(追加のプロンプトは不要):

  • 回答が選択肢3のみ(参照)の場合 → DEPTH=reference — 軽量、高速ルックアップのチャプター。
  • 回答に選択肢1、2、または4が含まれる場合 → DEPTH=study — より詳細な作業、例、推論を含む深いチャプター。

DEPTH と BOOK_TYPE が一緒になって、ステップ7のチャプターごとのトークン予算を設定します。別途「学習 vs 参照」の質問はしない — ここで推論されます(モード2/3ではステップ4がスキップされるため、デフォルトは DEPTH=study)。


ステップ5 — スキル名の決定

SKILL_NAME が提供された場合、それをスキルスラッグとして使用します。 それ以外の場合は、2つのオプションを提案し、ユーザーに選択させます:

  • 著者-コンセプト形式: {著者姓}-{コアコンセプト}(例: cialdini-influence、meadows-systems)
  • タイトル形式: 書籍タイトルから小文字ハイフン(例: designing-data-intensive-apps)

書籍に強力な方法論的アイデンティティがある場合は、著者-コンセプト形式をデフォルトにします。

スキルの保存先ルート(SKILLS_HOME)を選択します。ユーザーのファイルシステムで既存のスキルホームをプローブし、ユーザーが実行しているホストに基づいて選択します:

| ホストエージェント | 個人

...

(元の翻訳が完了していない部分。必要なすべてのセクションを含む完全な翻訳が必要な場合は、全文を提供してください。)

関連スキル