reverse-outliner について
reverse-outliner は、本のテキストから構造化された分析アウトラインを作り、物語の構成を調べるスキルです。場面の分割、機能分析、ジャンル判定、人物の変化の追跡を段階的に行い、結果を Markdown にまとめます。
主な機能
- 01本を章と場面に分割
- 02Goal/Conflict/Disaster による場面分析
- 03ジャンル判定と重要場面の対応付け
- 04主人公と人物の変化の追跡
- 05構造化された Markdown アウトラインの生成
活用シーン
- 01出版済み小説の構成の研究
- 02ジャンルの慣例と作品での運用の比較
- 03場面を通じた人物の変化の追跡
- 04場面ごとの参照用アウトラインの作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jwynia/ agent-skills --skill reverse-outlinerインストール後、Claude Code で/reverse-outlinerを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
data/key-moments-by-genre.jsonscene-markers.jsonscripts/analyze-scene-batch.tsdetect-genre.tsgenerate-outline.tsreverse-outline.tssegment-book.tstrack-characters.ts詳細
リバース・アウトライナー:書籍からアウトラインを分析
出版された書籍をリバースエンジニアリングして、構造化された学習用アウトラインを作成します。完成した文章から物語の根底にある構成を抽出し、読者の体験を生み出した技法上の判断を明らかにするのが役割です。
基本原則
完成した書籍は、その構成を覆い隠しています。アウトラインは、文章の下にある骨格を明らかにします。
すべてのシーンには、構造上、感情上、人物造形上の役割があります。これらの役割を体系的に抽出することで、物語がどのように効果を生み出しているかを示すマップを作成できます。
状態
RO0:入力なし
症状: ユーザーは書籍を分析したいものの、テキストを提供しておらず、書籍も特定していません。
主な質問:
- どの書籍を分析しますか?
- テキストファイルは用意できていますか?
- 学習の目的は何ですか?(技法の分析、ジャンルの研究、教育)
対応: テキスト入力を準備するようユーザーを案内します。分析範囲(書籍全体か、一部か)について話し合います。
RO1:未分割のテキスト
症状: テキストはありますが、章やシーンの区切りが特定されていません。
主な質問:
- 書籍に明示的な章のマーカーはありますか?
- シーンの区切りは、空白、記号、視点の切り替わりのどれで示されていますか?
- このジャンルでは、シーンの長さは一般にどのくらいですか?
対応: segment-book.ts を実行して、章とシーンを特定します。
RO2:分割済み、未分析
症状: 章やシーンは特定されていますが、構造分析はまだ行われていません。
主な質問:
- シーンは全部でいくつありますか?
- シーンごとの分析を始める準備はできていますか?
対応: analyze-scene-batch.ts を実行して、G/C/D 分析を行います。
RO3:ジャンル未特定
症状: シーンの分析は済んでいますが、ジャンル固有の重要な場面はまだ割り当てられていません。
主な質問:
- 主要なエレメンタルジャンルは何ですか?
- 副次的なジャンルはありますか?
- どの「重要な場面」のフレームワークが当てはまりますか?
対応: detect-genre.ts を実行し、その後、重要な場面を割り当てます。
RO4:登場人物の追跡未実施
症状: シーンとジャンルは割り当て済みですが、登場人物のアークは追跡されていません。
主な質問:
- 主人公は誰ですか?
- 特に重要な脇役は誰ですか?(3~5人)
- それぞれ、どのタイプのアークをたどりますか?
対応: track-characters.ts を実行して、アークを特定し、追跡します。
RO5:統合の準備完了
症状: すべての分析が完了し、アウトラインを作成できる状態です。
主な質問:
- どの程度の詳しさで出力しますか?(要約、標準、詳細)
- すべてのシーンを含めますか、それとも重要なシーンだけにしますか?
対応: generate-outline.ts を実行して、Markdown 形式の出力を生成します。
RO6:アウトライン完成
症状: Markdown 形式のアウトラインが生成され、利用可能になっています。
主な質問:
- アウトラインは書籍の構成を捉えていますか?
- 抜けている箇所や、手作業での確認が必要なシーンはありますか?
対応: 手作業での調整、エクスポート、比較分析を行います。
診断プロセス
- ファイルや分析結果の有無を確認して、現在の状態を判断する
- 上記の状態一覧に基づき、次に行う対応を特定する
- 適切なツールを実行して、次の状態へ進む
- 次に進む前に、出力を検証する
- RO6 に到達するまで繰り返す
利用可能なツール
segment-book.ts
書籍の生テキストを章とシーンに分割します。
deno run --allow-read scripts/segment-book.ts book.txt [options]
オプション:
--chapter-pattern <regex>- 章を検出するカスタムパターン--scene-break <marker>- シーン区切りを示すカスタムマーカー--output <file>- 出力する JSON ファイル(デフォルト:標準出力)
出力: 章、シーン、行の範囲、単語数を含む JSON。
analyze-scene-batch.ts
すべてのシーンに対して、シーンの連鎖分析(目標/葛藤/災難)を適用します。
deno run --allow-read scripts/analyze-scene-batch.ts segments.json book.txt [options]
オプション:
--depth quick|standard|detailed- 分析の詳しさ--output <file>- 出力する JSON ファイル
出力: シーンごとの G/C/D 分析を含む JSON。
detect-genre.ts
テキストのパターンから、主要および副次的なエレメンタルジャンルを特定します。
deno run --allow-read scripts/detect-genre.ts book.txt [options]
オプション:
--sample-size <n>- サンプリングするシーン数(デフォルト:10)--output <file>- 出力する JSON ファイル
出力: ジャンルの検出結果と重要な場面の割り当てを含む JSON。
track-characters.ts
主人公と主要キャラクターを特定し、それぞれのアークを追跡します。
deno run --allow-read scripts/track-characters.ts segments.json book.txt [options]
オプション:
--protagonist <name>- 主人公の名前を指定します--max-secondary <n>- 脇役の最大数(デフォルト:5)--output <file>- 出力する JSON ファイル
出力: キャラクターのアークと主要シーンの参照を含む JSON。
generate-outline.ts
すべての分析結果を、構造化された Markdown のアウトラインにまとめます。
deno run --allow-read --allow-write scripts/generate-outline.ts [options]
オプション:
--segments <file>- セグメントの JSON--scenes <file>- シーン分析の JSON--genre <file>- ジャンル判定の JSON--characters <file>- キャラクター追跡の JSON--depth summary|standard|detailed- 出力の詳細度--output <file>- 出力する Markdown ファイル
reverse-outline.ts (Orchestrator)
book.txt から outline.md まで、パイプライン全体を実行します。
deno run --allow-read --allow-write scripts/reverse-outline.ts book.txt [options]
オプション:
--output <dir>- 出力ディレクトリ(デフォルト:./reverse-outlines/{book-name}/)--depth quick|standard|detailed- 分析の詳細度--protagonist <name>- 主人公を指定します--genre <type>- ジャンル判定を上書きします
出力: outline.md と、すべての中間 JSON を含む analysis/ フォルダーを格納したディレクトリ。
アンチパターン
表面的な分析
問題: アウトラインに何が起きたかは記されていても、なぜ起きたかが記されていません。 対処法: 各シーンについて、どのような構造上の役割を果たすのか、削除した場合に何が崩れるのかを考えます。
ジャンルを考慮しない分析
問題: 恋愛小説にスリラーのパターンを当てはめたり、その逆を行ったりします。 対処法: 必ず最初にジャンルを判定し、ジャンルに適した主要な出来事を用います。
主人公だと思い込む
問題: 最初に登場する POV キャラクターが主人公だと決めつけます。 対処法: すべての POV キャラクターについて、目標への結びつきとアークの有無を追跡します。
シーン境界の推測
問題: 段落の区切りをシーンの区切りとして扱います。 対処法: 複数の検出方法を使い、手動レビューを行う前提で、保守的に分割します。
行わないこと
- オリジナルのストーリーを生成する
- 本の質を評価する
- 求められない限り、ほかの本と比較する
- 状態を飛ばす(各状態は前の状態を基に構築されます)
- ソーステキストを変更する
出力の保存
このスキルでは、作業内容をセッションをまたいで保持するため、主要な出力をファイルに書き込みます。
出力先の確認
ほかの作業を始める前に、次のことを行います:
- プロジェクト内に
context/output-config.mdがあるか確認します - 見つかった場合は、このスキルの項目を探します
- 見つからない場合は、
./reverse-outlines/{book-name}/に出力を作成します
主要な出力
このスキルでは、以下を保存します:
- outline.md - 最終的な Markdown アウトライン
- analysis/segments.json - 章/シーンの分割
- analysis/scenes.json - シーンごとの G/C/D 分析
- analysis/genre.json - ジャンル判定の結果
- analysis/characters.json - キャラクターのアーク追跡
会話とファイルの使い分け
| ファイルに保存 | 会話内に残す |
|---|---|
| セグメントデータ | 確認の質問 |
| シーン分析 | 方法論についての議論 |
| ジャンル判定 | 判断が曖昧な場合の選択肢 |
| キャラクターのアーク | リアルタイムのフィードバック |
| 最終アウトライン | 執筆者による検討 |
統合グラフ
インバウンド(ほかのスキルから)
| ソーススキル | ソースの状態 | 遷移先の状態 | 目的 |
|---|---|---|---|
| story-sense | SS7: 評価の準備完了 | RO0 | 公開済み作品を分析し、自作と比較する |
| dna-extraction | EX7: 抽出完了 | RO5 | 抽出した機能を、検出した構造と比較する |
アウトバウンド(ほかのスキルへ)
| この状態 | 遷移先のスキル | 対象の状態 | 目的 |
|---|---|---|---|
| RO6: アウトライン完了 | story-zoom | Z2 | 公開済みの本を自作の構造に照らしてマッピングする |
| RO6: アウトライン完了 | scene-sequencing | SQ1 | シーン構造の参考として使用する |
| RO6: アウトライン完了 | character-arc | CA1 | アーク設計の参考として使用する |
| RO6: アウトライン完了 | genre-conventions | GC1 | ジャンルの表現手法を学ぶ |
補完的なスキル
| スキル | 関係 |
|---|---|
| scene-sequencing | 再利用されるコアの G/C/D 分析パターン |
| genre-conventions | ジャンル検出パターンの参照元 |
| character-arc | アークタイプの特定パターンの参照元 |
| dna-extraction | 機能分類を借用 |
| story-zoom | 比較用に出力形式が互換 |
| revision | 類似した構造分析アプローチ |