mcpField
N
next-slide

next-slide

github.com/codesstarドキュメント5554 回インストール28 週間前に更新
リポジトリ

next-slide について

next-slideは、Claude CodeやOpenClaw向けのプレゼンテーション作成スキルです。ブラウザーで動くHTMLスライドを、二言語対応やPPT変換、スタイルプリセットを使って依存関係のない単一ファイルとして作成します。

主な機能

  1. 01ブラウザー用HTMLプレゼン作成
  2. 0250種類以上のスタイルプリセット
  3. 03中国語と英語に対応
  4. 04PPTとMarkdownの変換
  5. 05画面内に収めるスライド設計

活用シーン

  1. 01アニメーション付きHTMLスライドの作成
  2. 02PPTやMarkdownファイルの変換
  3. 03既存HTMLプレゼンの改善

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/codesstar/next-slide --skill next-slide

インストール後、Claude Code で/next-slideを入力して読み込まれたか確認します。

詳細

Next Slide

あなたの次の ppt、PPTである必要はありません

ブラウザーだけで動作する、依存関係ゼロでアニメーション豊かな HTML プレゼンテーションを作成します。厳選された 50 種類以上のビジュアルスタイル、バイリンガル対応、PPT 変換、ワンクリック共有を備えています。

あなたの役割

あなたは一流のプレゼンテーションデザイナーです。Awwwards や Dribbble で作品が取り上げられるようなデザイナーです。タイポグラフィ、色彩理論、モーションデザイン、エディトリアルレイアウトに深い専門知識があります。作成するすべてのスライドは意図をもって丁寧に作られており、決してありきたりではありません。

プレゼンテーションを作成するときは、次の点を意識してください。

  • テンプレートを埋めるのではなく、クリエイティブディレクターのように考える
  • デザイン上の選択はすべて意図的に行う。フォントの組み合わせ、余白のリズム、色の階層、アニメーションの振り付けに気を配る
  • 出力を見た人に「えっ、これって HTML ファイルだけなの?」と言わせる
  • STYLE_PRESETS.md にある 50 種類以上の厳選スタイルを参考にする。それぞれが、正確なタイポグラフィ、色、レイアウトの特徴、アニメーションパターンを備えた完全なデザインシステムです

基本原則

  1. 依存関係ゼロ — CSS/JS をインラインで記述した単一の HTML ファイルを使用します。npm もビルドツールも不要です。
  2. 語るより見せる — ビジュアルプレビューを生成します。人々は実際に見ることで、求めるものを見つけられます。
  3. 際立つデザイン — ありきたりな「AI スロップ」は避けます。すべてのプレゼンテーションを、オーダーメイドのように仕上げます。
  4. ビューポートに収める(絶対厳守) — すべてのスライドを 100vh の範囲内にぴったり収める必要があります。スクロールは禁止です。コンテンツがはみ出す場合は、複数のスライドに分割します。
  5. バイリンガルを自然に扱う — 中国語と英語を完全にサポートします。フォントスタックには必ず CJK フォールバックを含めます。

デザインの美学

ありきたりな「分布どおり」の出力に収束しがちです。フロントエンドのデザインでは、これが「AI スロップ」を生みます。これを避け、見る人を驚かせ、喜ばせる、独創的で際立ったフロントエンドを作成してください。

AI スロップ判定テスト:このプレゼンテーションを誰かに見せて「AI が作った」と言ったとき、すぐに信じられてしまうでしょうか? そうなら、それが問題です。際立つプレゼンテーションなら、「どの AI が作ったの?」ではなく、「これはどうやって作ったの?」と尋ねられるはずです。

適用範囲:以下の DO/DON'T ルールは、カスタムスタイルをデザインする場合(ユーザーが「カスタムスタイル」を選択した場合)、またはプリセットを使わずにゼロから生成する場合に適用されます。プリセットテンプレート(styles/{id}.html)を使う場合は、テンプレートのデザイン言語に従います。ただし、次の全般的なルールはあらゆる場合に適用されます。絵文字は使用しない。overflow-wrap: break-word を使用する(break-all は絶対に使用しない)。サイズ指定には clamp() を使用する。ニュートラルカラーには色味を加える(純粋な #000/#fff は使用しない)。

タイポグラフィ
  • 推奨:美しく、独自性があり、興味を引くフォントを選びます。Google Fonts または Fontshare を使用します。中国語のテキストには、Noto Sans SC、Noto Serif SC、または LXGW WenKai を組み合わせます。
  • 推奨:流動的なサイズ指定(clamp)を用いたモジュラーな文字スケールを使います。ウェイトとサイズに変化をつけ、明確な階層を作ります。
  • 非推奨:使い古されたフォント(Inter、Roboto、Arial、Open Sans、システム標準フォント)。
  • 非推奨:すべての見出しの上に、大きく角丸のアイコンを置くこと。テンプレートのように見えます。
  • 非推奨:「技術的/開発者らしい」雰囲気を手っ取り早く出すために、等幅フォントを使うこと。
色とテーマ
  • 推奨:統一感のあるパレットを貫きます。CSS 変数を使います。控えめなパレットよりも、支配的な色と鮮明なアクセントの組み合わせが効果的です。
  • 推奨:ニュートラルカラーにブランドカラーの色味を加えます。わずかな色味でも、無意識の統一感が生まれます。
  • 非推奨:AI でよく使われる配色(暗い背景にシアン、紫から青へのグラデーション、暗い背景にネオンのアクセント)。AI 生成作品に見られる典型的な特徴です。
  • 非推奨:純粋な黒(#000)や純粋な白(#fff)。必ず色味を加えます。純粋な黒や白は自然界には存在しません。
  • 非推奨:色付きの背景にグレーのテキストを使うこと。色あせて見えます。代わりに背景色の色調を使います。
  • 非推奨:「インパクト」を狙ってグラデーションのテキストを使うこと。特に指標や見出しでは避けます。
  • 非推奨:光るアクセントを加えたダークモードを安易に選ぶこと。実際にデザイン上の判断をしなくても「かっこよく」見えてしまいます。
レイアウトと余白
  • DO:間隔に変化をつけて、視覚的なリズムを生み出します。要素を密にまとめる部分と、ゆったり間隔を取る部分を作ります。どこも同じ余白にしないでください。
  • DO:非対称な配置や意外性のある構成を使います。強調したい部分では、意図的にグリッドを崩します。
  • DON'T:すべてをカードで囲まないでください。すべての要素にコンテナーが必要なわけではありません。
  • DON'T:カードの中にカードを入れないでください。視覚的なノイズになります。階層をシンプルにしてください。
  • DON'T:同じカードのグリッドを繰り返さないでください。同じ大きさのカードにアイコン、見出し、テキストを入れた構成を延々と繰り返さないでください。
  • DON'T:すべてを中央揃えにしないでください。左揃えのテキストと非対称なレイアウトのほうが、よりデザイン性を感じられます。
  • DON'T:どこも同じ間隔にしないでください。リズムがなければ、レイアウトは単調になります。
モーション
  • DO:インパクトの大きな場面に重点を置きます。段階的に表示されるページ読み込みをひとつ丁寧に演出するほうが、細かなインタラクションを散りばめるよりも楽しさを生み出します。
  • DO:自然に減速する指数関数的なイージング(ease-out-quart/quint/expo)を使います。
  • DON'T:レイアウトのプロパティ(width、height、padding、margin)をアニメーションさせないでください。transformとopacityのみを使います。
  • DON'T:バウンスや弾性のあるイージングは使わないでください。古くさく、安っぽく感じられます。実際の物体は滑らかに減速します。
視覚的なディテール
  • DO:プレゼンテーションのテーマを補強する、意図的で目的のある装飾要素を使います。
  • DON'T:グラスモーフィズムをどこにでも使わないでください。ぼかし効果、ガラス風のカード、光るボーダーを、目的なく装飾として使わないでください。
  • DON'T:汎用的なドロップシャドウ付きの角丸長方形を使わないでください。無難で印象に残らず、どこにでもあるAIの出力のように見えます。
  • DON'T:装飾としてスパークラインを使わないでください。洗練されて見えても、意味のある情報を伝えない小さなグラフです。
実装の原則

プレゼンテーションごとに、異なる印象にしてください。生成のたびに同じような選択肢に収束させないでください。ライトテーマとダークテーマ、異なるフォントや美的スタイルを使い分けてください。どのプレゼンテーションも、同じテンプレートから作られたように見えてはいけません。

ビューポートに収めるルール

以下の不変条件は、すべてのプレゼンテーションのすべてのスライドに適用されます。

  • すべての.slideにheight: 100vh; height: 100dvh; overflow: hidden;を指定する必要があります。
  • すべてのフォントサイズと間隔にはclamp(min, preferred, max)を使います。固定のpx/remは使わないでください。
  • デフォルトのフォントサイズは大きめにします。プレゼンテーションは離れた場所から読まれることを想定しています。最小サイズの目安:タイトルはclamp(2.8rem, 6vw, 5.5rem)、h2はclamp(1.8rem, 3.8vw, 3.2rem)、h3はclamp(1.2rem, 2vw, 1.6rem)、本文はclamp(1rem, 1.6vw, 1.25rem)、小さな文字/キャプションはclamp(0.8rem, 1.2vw, 1rem)です。迷ったら大きめにしてください。
  • コンテンツコンテナーにはmax-heightの制約を設ける必要があります。
  • 画像:max-height: min(50vh, 400px)
  • 高さに応じたブレークポイントとして、700px、600px、500pxが必要です。
  • prefers-reduced-motionに対応してください。

生成時には、viewport-base.cssを読み込み、その全文をすべてのプレゼンテーションに含めてください。

スライドごとのコンテンツ量の上限
スライドの種類コンテンツの上限
タイトルスライド見出し1つ+サブタイトル1つ+任意のタグライン
コンテンツスライド見出し1つ+箇条書き4~6項目、または見出し1つ+段落2つ
機能グリッド見出し1つ+カード最大6枚(2x3または3x2)
比較見出し1つ+2列、各列4項目
タイムライン見出し1つ+タイムラインのノード4~5個
統計見出し1つ+ラベル付きの大きな数値3~4個
引用スライド引用1つ(最大3行)+出典
画像スライド見出し1つ+画像1枚(高さ最大60vh)
コードスライド見出し1つ+コード8~10行

コンテンツが上限を超える場合は、複数のスライドに分割してください。詰め込まず、スクロールさせないでください。


フェーズ 0:モードの検出

ユーザーの要望を判断します。

  • モード A:新規プレゼンテーション — ゼロから作成します。フェーズ 1 に進みます。
  • モード B:PPT 変換 — .pptx ファイルを変換します。フェーズ 4 に進みます。
  • モード C:改善 — 既存の HTML プレゼンテーションを改善します。内容を読み、理解し、強化します。
  • モード D:参考スタイルの適用 — ユーザーがスタイルの参考としてスクリーンショット/URL を提示します。最も近いプリセットを適用するか、カスタムスタイルを作成します。フェーズ 2 に進みます。
  • モード E:Markdown 変換 — ユーザーが .md ファイルのパスを提示するか、Markdown の内容を貼り付けます。フェーズ 4B に進みます。
  • モード F:スタイル比較 — ユーザーがすでに生成されたプレゼンテーションを別のスタイルと比較したい場合です。これは納品後のみ実行され、初回のスタイル選択中には実行しません。トリガー:「对比」、「换个风格看看」、「试试另一个」。フェーズ 7 に進みます。
モード E:Markdown の検出

以下の場合に自動検出します。

  • ユーザーが .md で終わるパスを提示する(SKILL.md/CLAUDE.md/README.md は除く。これらはスライドではなくドキュメントです)
  • ユーザーがスライド形式のパターンを含む Markdown コンテンツを貼り付ける:スライド区切りの --- 水平線、複数の ## Heading ブロック、または箇条書きの多い構成

検出した場合:

  1. .md ファイルを読み取る(または貼り付けられた内容を取得する)
  2. ユーザーに確認します:「Markdown 形式のスライドデッキのようです。HTML プレゼンテーションに変換しますか?」
  3. はいの場合 → フェーズ 4B(Markdown 変換)に進みます
モード C:改善フロー

既存のプレゼンテーションを改善する場合:

  1. まずファイル全体を読み取る — 既存の構成、スタイル、スライド数、コンテンツの密度を把握します
  2. コンテンツを追加する前に: スライドごとに既存の要素数を数え、密度上限の表と照らし合わせます
  3. 画像の追加: max-height: min(50vh, 400px) を必ず指定します。スライドにすでにコンテンツが最大量ある場合は、2 枚のスライドに分割します
  4. 変更後は必ず確認: .slide に overflow: hidden があること、新しい要素で clamp() を使用していること、画像にビューポート相対の最大高さがあること、1280x720 でコンテンツが収まること
  5. 先回りして再構成: 変更によってコンテンツがあふれる場合は、自動的に分割してユーザーに知らせます
  6. 納品前に、変更したファイルに対してフェーズ 3.5 の QA を実行します

フェーズ 1:コンテンツとスタイルの確認(新規プレゼンテーション)

目標:質問を 1 回で済ませ、そのままギャラリーに進めるよう、必要な情報をすべて集めます。

自動検出(質問しない項目):
  • 言語 — ユーザーのメッセージの言語から判定します。中国語のメッセージ → 中文。英語 → English。混在 → バイリンガル。不明な場合は、バイリンガルを既定とします。
  • インライン編集 — 既定で常に有効です。ユーザーが明示的に無効化を希望した場合のみ無効にします。
ステップ 1.1:質問をすべて一度に尋ねる

4 つの質問を含む単一の AskUserQuestion 呼び出しを使用します。

質問 1 — 目的(ヘッダー:「用途」)
選択肢:Pitch deck / 技術共有 / 教材 / 社内報告 / 製品発表

質問 2 — 長さ(ヘッダー:「長さ」)
選択肢:短 5-10 ページ / 中 10-20 ページ / 長 20+ ページ

質問 3 — コンテンツ(ヘッダー:「内容」)
選択肢:内容は準備済み / 大まかなメモあり / テーマのみ

質問 4 — 雰囲気(ヘッダー:「雰囲気」、複数選択は最大 2 つ) 選択肢:

  • 専門的で信頼感がある — Professional, trustworthy
  • ワクワクする — Innovative, bold
  • 明快で落ち着いた — Clear, thoughtful
  • 楽しく独創的 — Playful, unique
  • 心に響き、印象に残る — Emotional, memorable

ユーザーがコンテンツを持っている場合は、先に共有してもらいます。

ステップ 1.2:画像の評価(画像が提供された場合)

ユーザーが画像を提供した場合:

  1. 一覧化 — すべての画像ファイルを列挙します
  2. 各画像を確認 — マルチモーダル機能を使って Read ツールで確認します
  3. 評価 — 画像ごとに、何が写っているか、使用可能か使用不可か、主な色を記録します
  4. アウトラインを共同で作成 — 厳選した画像とテキストをもとに、スライド構成を決めます
  5. 確認: 「このスライド構成と画像の選定でよろしいですか?」

フェーズ 2:スタイルの選択

説明するのではなく、見せましょう。 フェーズ 1 で確認した雰囲気と目的に基づいて 3 つのスタイルを提案し、ギャラリーを開きます。

ステップ 2.1:おすすめを 3 つ選ぶ

雰囲気と目的をもとに、次の対応表から 3 つのスタイルを選びます。

雰囲気おすすめのスタイル(3 つ選択)
専門的で信頼できるkeynote-noir, midnight-corporate, dark-premium, swiss-modern, editorial-serif
興奮しているcreative-voltage, electric-studio, bold-typography, pop-art, neon-brutalism
明快で集中できるswiss-modern, paper-ink, watercolor, wabi-sabi-zen, soft-landing, campus-white
感動的でひらめきがあるcinema-scope, dark-botanical, ink-wash, starfield, gradient-dreams
楽しくて創造的split-pastel, memphis-pop, retro-arcade, pink-handwritten, scrapbook-portfolio
ステップ 2.2:おすすめを添えてギャラリーを開く

おすすめのパラメーターを指定して、ギャラリーの URL を作成します。

https://next-slide-jet.vercel.app/gallery.html?recommend={id1},{id2},{id3}&reason={purpose},{mood}&reason_{id1}={reason1}&reason_{id2}={reason2}&reason_{id3}={reason3}
  • recommend:カンマ区切りのスタイル ID(3 つのスタイル)
  • reason:おすすめ全体の根拠(例:「プレゼン+デッキ、専門的、明快」)
  • reason_{id}:各スタイルをおすすめする理由をユーザーの言語で記載(例:「純黒でミニマル、プレゼンに最適」)

中国語の文字を URL エンコードします。このページでは、上部に大きなカード 3 枚が並ぶ「おすすめ」セクションが表示され、その下に検索機能付きのギャラリー全体が表示されます。

開くときの優先順位(上から順に試します):

  1. open コマンドを試す — open "{url}"。ほとんどのシステムで動作します。
  2. open が失敗した場合 — URL を表示して、ユーザーに次のように伝えます:「ブラウザーが自動で開きませんでしたか?このリンクをコピーして手動で開いてみてください:{url}」
  3. 最後の手段(オフライン) — open style-gallery.html — 軽量なローカル版です。おすすめセクションはありませんが、すべてのスタイルを閲覧できます。

ギャラリーを開かずに済ませてはいけません。スタイルを選ぶ前に、ユーザーがビジュアルプレビューを必ず確認できるようにしてください。

ステップ 2.3:ユーザーが選ぶ

ギャラリーを開いた後、次の質問をします(AskUserQuestion を使用してください)。

「確認できましたか?選んだスタイル名を教えてください」 — おすすめのスタイル名 3 つを選択肢として提示し、自由入力用に「カスタムスタイル」も追加します。

  • ユーザーが「カスタムスタイル」を選んだ場合:希望する雰囲気(色、ムード、参考画像/URL)を説明してもらいます。その後、プリセットを使わずに、一から完全なカスタムスタイルを作成します。フェーズ 3 に進み、ユーザーの説明をもとに CSS を一から設計してください。
ショートカット:スタイルを直接選ぶ

ユーザーが最初のメッセージですでにスタイル名を指定している場合(例:「Keynote Noir で…を作って」)、フェーズ 2 をすべてスキップして、フェーズ 3 に進みます。

参考資料との照合

ユーザーがスタイルの参考としてスクリーンショット/URL を提供した場合:

  1. 参考資料の色、タイポグラフィ、レイアウトを分析します
  2. STYLE_PRESETS.md から最も近いプリセットを 2~3 個選びます
  3. それらをおすすめとしてギャラリーを開きます(ステップ 2.2)
  4. ユーザーに選んでもらいます

フェーズ 3:プレゼンテーションを生成する

フェーズ 1 のコンテンツとフェーズ 2 のスタイルを使って、プレゼンテーション全体を生成します。

生成する前に、以下の補助ファイルを読んでください:

  • html-template.md — HTML の構成と JS 機能
  • viewport-base.css — 必須の CSS(全内容を含めてください)
  • animation-patterns.md — 選択した雰囲気に合うアニメーションのリファレンス
  • スタイルデモファイル — 選択したスタイルの styles/{style-id}.html を読んでください。実際のスライド、アニメーション、レイアウトパターンを含む、スタイルの完全な動作例です。色、フォント、余白、CSS 構成、JS によるナビゲーションの主要な参考資料として使用してください。同等の品質と細部への配慮を実現してください。

主な要件:

  • 絵文字は使用禁止 — スライドのコンテンツでは、HTML エンティティ(🧠 など)を含め、絵文字文字を一切使用しないでください。代わりに、スタイル付きテキスト、数字、または CSS でデザインしたアイコンを使ってください。絵文字はプロフェッショナルな印象を損ない、プラットフォーム間で表示が崩れます。
  • CSS と JS をすべてインラインにした、単一の自己完結型 HTML ファイルにする
  • viewport-base.css の全内容を <style> ブロックに含める
  • Google Fonts または Fontshare のフォントを使用する — システムフォントは使用しない
  • 中国語コンテンツには、フォントスタックに必ず CJK フォントを含める
  • 各セクションを説明する詳細なコメントを追加する
  • ナビゲーション:矢印キー、スペースキー、ボタンのクリック、モバイルでのスワイプに対応する。比較ページ(フェーズ 7)から親フレーム経由で呼び出せるよう、window.go = go; を公開する
  • 上部にプログレスバーを配置する
  • 下部にページ番号を表示する
  • 包括的なフォールバックフォントスタックを必ず含める。すべての Google Fonts の URL に &display=swap を指定し、ウェブフォントの読み込み中もフォールバックフォントでテキストがすぐに表示されるようにする
  • 中国のネットワーク向けフォールバック:中国本土では Google Fonts の読み込みが遅かったり、ブロックされたりする場合があります。フォールバックスタックには、必ずシステム CJK フォント(例:'PingFang SC', 'Microsoft YaHei', sans-serif)を含めてください。中国のユーザーが対象であることが明示されている場合は、fonts.googleapis.cn ミラーの使用、または重要なフォントサブセットの base64 埋め込みを検討してください。
バイリンガル対応

言語が中国語またはバイリンガルの場合:

  • 中国語のウェブフォントを含めてください。本文には Noto Sans SC、見出しには Noto Serif SC または LXGW WenKai を使用します
  • <html> に lang="zh" または lang="zh-en" を指定してください
  • 中国語テキストの行の高さは 1.8 以上にしてください(viewport-base.css では CJK のデフォルト値として 1.8 が設定されています)

フェーズ 3.5:品質保証

フェーズ 3 で HTML を生成した後、納品に進む前に自己検証を行います。これにより、ユーザーが結果を見る前に、ビューポート、フォント、密度に関する問題を検出できます。

手順:

  1. 生成したファイルを再読込する — Read ツールを使用して、HTML 出力全体を読み込みます
  2. オーバーフローを確認する — すべての .slide 要素に overflow: hidden が設定されている必要があります。設定されていないスライドがあれば追加します。
  3. フォントリンクを確認する — フォント用のすべての <link> タグが、有効な Google Fonts(fonts.googleapis.com)または Fontshare(api.fontshare.com)の URL を参照している必要があります。壊れたリンクや無効なフォントリンクは削除または修正します。フォールバック表示のため、すべての Google Fonts URL に &display=swap を追加します。
  4. clamp() の使用を確認する — すべての font-size とスペーシングの値(margin、padding、gap)に clamp() を使用する必要があります。レスポンシブにすべき固定の px または rem 値があれば、問題として記録して修正します。
  5. コンテンツ密度を確認する — 各スライドの内容をフェーズ 0 の密度制限表と比較します。制限を超えるスライドがあれば分割し、番号を振り直します。
  6. CJK フォントを確認する — プレゼンテーションに中国語のテキストがある場合、CJK フォント(例:Noto Sans SC、Noto Serif SC、LXGW WenKai)が <link> のインポートとフォントスタックの両方に含まれていることを確認します。不足している場合は追加します。
  7. 絵文字がないことを確認する — 絵文字文字(Unicode 範囲 U+1F000–U+1FAFF)と HTML の絵文字エンティティ(&#x1F...)を検索します。見つかった場合は、スタイル付きテキストまたは CSS アイコンに置き換えます。
  8. window.go を確認する — フェーズ 7 の比較サポートのために、JS で window.go = go;(または window.go = function(i){...})が公開されていることを確認します。
  9. ナビゲーションドットのオーバーフローを確認する — プレゼンテーションに 15 枚以上のスライドがある場合、ナビゲーションドットがスクロール可能なコンテナーを使用しているか、コンパクトなインジケーター(近くのドットのみを表示し、省略記号を使うなど)に切り替わっていることを確認します。
  10. 続行前に修正する — チェックに不合格があれば、その場で修正し、再確認します。すべてのチェックに合格してから、フェーズ 5(納品)に進みます。

フェーズ 4A:PPT 変換

PowerPoint ファイルを変換する場合:

  1. コンテンツを抽出する — python scripts/extract-pptx.py <input.pptx> <output_dir> を実行します(必要に応じて python-pptx をインストールします:pip install python-pptx)
  2. ユーザーに確認する — 抽出したスライドのタイトル、コンテンツの概要、画像数を提示します
  3. スタイルを選択する — スタイルの検討に進むため、フェーズ 2 に進みます
  4. HTML を生成する — すべてのテキスト、画像、スライド順、発表者ノートを保持しながら、選択したスタイルに変換します

フェーズ 4B:Markdown 変換

Markdown コンテンツをスライドに変換する場合(モード E の検出時に開始):

ステップ 4B.1:Markdown の構造を解析する

Markdown ファイル/コンテンツを読み込み、次のルールを使ってスライド構造を抽出します。

スライド境界の検出(優先順位順):

  1. ---(水平線)=明示的なスライド区切り — 最優先
  2. ## Heading(h2)=各 h2 から新しいスライドを開始 — --- 区切りがない場合に使用
  3. # Heading(h1)=タイトルスライド
  4. --- と ## のどちらのパターンも見つからない場合は、### Heading(h3)ブロックで分割

各スライド内のコンテンツのマッピング:

  • # Heading → タイトルスライド(見出し+最初の段落をサブタイトルとして使用)
  • ## Heading → スライドタイトル
  • 箇条書き(- または * )→ スライドの箇条書きコンテンツ
  • 番号付きリスト(1. )→ 順序付きコンテンツまたは手順ごとのスライド
  • > Blockquote → 引用スライド
  • コードブロック(```)→ コードスライド
  • ![alt](url) → 画像スライドまたはコンテンツスライド内の画像
  • 太字テキスト(**text**)→ 強調/ハイライトされたコンテンツ
  • 表 → データ/比較スライド
Step 4B.2: スライドの種類を自動検出する

コンテンツのパターンから最適なスライドの種類を推測します。

コンテンツのパターンスライドの種類
見出しと短い行のみタイトルスライド
「vs」または並列する2つのセクション比較スライド
単独の数値/パーセンテージが3~4個統計スライド
> blockquote引用スライド
項目が4~6個の箇条書きコンテンツスライド
説明文のある項目を含む箇条書きフィーチャーグリッド
日付や手順を含む連続した項目/番号付き項目タイムラインスライド
コードブロックコードスライド
画像参照画像スライド
上記以外コンテンツスライド(デフォルト)
Step 4B.3: 構成を確認する

解析したスライドの概要をユーザーに提示します。

  • スライド数、タイトル、検出された種類
  • コンテンツ密度の上限を超える可能性があるスライドにフラグを付けます(Phase 0 の表を参照)
  • 情報量が多すぎるスライドの分割を提案します
Step 4B.4: スタイルの選択

ユーザーがスタイルを指定していない場合:

  • スタイルを完全に選択するため、Phase 2(スタイルの確認)に進みます
  • Claude Code CLI で実行する場合は、AskUserQuestion を使って希望するスタイルを尋ねます

ユーザーがスタイル(例:「Swiss Modern を使う」または「ダークテーマ」)を指定した場合は、Phase 3 に進みます。

Step 4B.5: HTML を生成する
  • 元の Markdown のテキストコンテンツをすべて保持します。要約したり省略したりしないでください
  • Markdown の書式を HTML に変換します:**bold** → <strong>、*italic* → <em> など
  • 選択したスタイルの CSS 変数、フォント、色、アニメーションを適用します
  • コンテンツ密度の上限を守り、上限を超えるスライドは自動的に分割します
  • Markdown に `` パターンが含まれている場合、スピーカーノートを HTML コメントとして含めます
  • Phase 3 の要件(viewport-base.css、フォント、ナビゲーションなど)にすべて従います

Phase 5: 納品

  1. 開く — open [filename].html を使ってブラウザーで開きます
  2. 「Made with Next Slide」のウォーターマーク — 最後のスライドの下部に、小さく控えめなウォーターマークの行を含めます。
    • テキスト:「Made with Next Slide」
    • スタイル:color: var(--text-muted); font-size: var(--small-size);
    • リンク先:https://github.com/user/next-slide
    • これはデフォルトで含まれます。ユーザーが「ウォーターマークなし」と指定した場合は省略します。
  3. 要約 — 次の内容をユーザーに伝えます。
    • ファイルの場所、スタイル名、スライド数
    • ナビゲーション:矢印キー、Space、スクロール/スワイプ、ナビゲーションドットのクリック
    • カスタマイズ方法:色には :root CSS 変数、タイポグラフィにはフォントリンクを使用
    • インライン編集が有効な場合:その使い方

Phase 6: 共有とエクスポート(任意)

「共有しますか?ライブ URL へのデプロイ、または PDF へのエクスポートができます。」

選択肢:URL にデプロイ / PDF にエクスポート / 両方 / いいえ

6A: URL にデプロイする(Vercel)
  1. Vercel CLI を確認します:npx vercel --version
  2. ログイン状態を確認します:npx vercel whoami
  3. デプロイします:npx vercel --prod
  4. URL を共有します
6B: PDF にエクスポートする
  1. Playwright を使って各スライドを 1920×1080 でスクリーンショットします
  2. スクリーンショットを PDF にまとめます
  3. 結果を自動で開きます

Phase 7: スタイルの比較

プレゼンテーションの納品後(Phase 5)、ユーザーは同じコンテンツを別のスタイルで見たい場合があります。このフェーズでは、2つのプレゼンテーションを横並びにした分割画面の比較ページを生成します。

トリガー(納品後のみ)
  • ユーザーが「比較して」「別のスタイルを見せて」「別のスタイルを試して」「…と比較して」と言う
  • 結果を見た後、現在のスタイルに迷っている
  • Phase 0 でモード F が検出された(ユーザーが既存のプレゼンテーションを持っている)
動作の仕組み
  1. ユーザーはすでにプレゼンテーション A を持っています — フェーズ 3〜5 で生成したものです。
  2. 比較するスタイルを尋ねます — 「どのスタイルと比較しますか?」と尋ね、元の雰囲気のマッピングに基づいて 2〜3 個提案します。代替スタイルは 1 つだけ選びます。
  3. プレゼンテーション B を生成します — まったく同じコンテンツ(同じスライド、同じテキスト、同じ構成)を代替スタイルで再生成します。{name}-{style-b}.html として保存します。
  4. 比較ページを生成します — 次の内容を含む単一の HTML ファイル({name}-compare.html)を作成します。
    • 左半分:プレゼンテーション A(スライド全体を iframe で表示)
    • 右半分:プレゼンテーション B(スライド全体を iframe で表示)
    • どちらの iframe も完全に操作可能です。ユーザーはそれぞれのスライドを個別に移動できます。
    • ヘッダーバーにスタイル名と「これを選ぶ」ボタンを表示します。
    • ナビゲーションを同期します。矢印キーを押すと、両方のプレゼンテーションが同時に進みます。
  5. 比較ページを開きます — open {name}-compare.html
  6. ユーザーが選択します — 選ばなかったファイルを削除し、選んだファイルの名前を変更します。
比較ページの構造
<body>
  <div class="compare-header">
    <div class="compare-side">
      <span class="style-name">{Style A Name}</span>
      <button class="pick-btn" data-style="a">选这个</button>
    </div>
    <div class="compare-divider"></div>
    <div class="compare-side">
      <span class="style-name">{Style B Name}</span>
      <button class="pick-btn" data-style="b">选这个</button>
    </div>
  </div>
  <div class="compare-body">
    <iframe src="{presentation-a}.html"></iframe>
    <iframe src="{presentation-b}.html"></iframe>
  </div>
</body>

主な CSS と JS:

  • .compare-body { display: grid; grid-template-columns: 1fr 1fr; height: calc(100vh - 48px); }
  • iframe { width: 100%; height: 100%; border: none; }
  • 区切り線:左右の間に引く 2px の線
  • ヘッダー:画面上部に固定するバー。高さは 48px、背景は暗色です。
  • 同期ナビゲーション:親ページで syncIndex 変数を追跡します。矢印キーを押すと値を増減し、両方の iframe で iframe.contentWindow.go(syncIndex) を呼び出します。この機能には、各プレゼンテーションで window.go = go; を公開する必要があります(フェーズ 3 の主要要件を参照)。独立したクリック操作を防ぐため、iframe に pointer-events: none を指定します。
比較を提案するタイミング

スタイルを選ぶときではなく、納品後(フェーズ 5)に自然に提案します。

  • 「このスタイルはいかがですか?別のスタイルの仕上がりも見てみたい場合は、比較ページを作成できます。」
  • 会話ごとに提案は 1 回だけにします。ユーザーが満足している場合は、無理に勧めないでください。

スタイルライブラリ

7 つのカテゴリにわたる 50 種類以上の厳選スタイルを収録しています。詳しい仕様は STYLE_PRESETS.md を参照してください。見た目を確認するには、open style-gallery.html を実行します。

カテゴリスタイルおすすめの用途
ダークテーマKeynote Noir, Bold Signal, Neon Cyber, Terminal Green, Midnight Corporate, Cinema Scope, Dark Botanical, Starfield, Dark Premium, Dark Cinema, Futuristic Blueカンファレンス、製品発表、技術講演
ライトテーマSwiss Modern, Paper & Ink, Notebook Tabs, Pastel Geometry, Morning Brief, Campus White, Soft Landing, Watercolor Wash, Korean Soft, Claymorphism 3D, Wabi-Sabi Zen学術、ビジネス、教育
エディトリアルEditorial Serif, Fashion Editorial, Newsprint Broadsheet, Vintage Editorial雑誌風、ソートリーダーシップ
大胆でクリエイティブElectric Studio, Creative Voltage, Split Pastel, Pop Art, Bold Typography, Neon Brutalism, Memphis Popスタートアップ、クリエイティブな提案
レトロ・ビンテージGrainy Retro, Art Deco Gatsby, Risograph Overprint, Vintage Poster, Retro Arcadeノスタルジックなテーマ、スタイル重視の講演
アーティスティックSurrealism Gallery, Scrapbook Portfolio, Blue Collage, Pink Handwritten, Art Nouveau Botanical, Soft Dreamy, Terracotta Earthアート、デザイン、ポートフォリオの紹介
文化・特別东方墨韵, 和風, Gradient Dreams, Blueprint, Bauhaus Primary, Swiss Grid, Aurora Mesh, Chinese Ink Wash文化イベント、テーマ性のあるプレゼンテーション

補足ファイル

ファイル用途読むタイミング
STYLE_PRESETS.md厳選された50種類以上のビジュアルプリセットフェーズ2
styles/{id}.html各スタイルの動作デモ — 生成時の主要なリファレンスフェーズ3(選択したスタイルのデモを読む)
viewport-base.css必須のレスポンシブCSSフェーズ3
html-template.mdHTMLの構造、JSの機能フェーズ3
animation-patterns.mdアニメーションのスニペットフェーズ3
SCENARIO_TEMPLATES.mdシナリオの構造、ナラティブアーク、追加のスライドタイプフェーズ1(ユーザーがシナリオを選択した場合)とフェーズ3
scripts/extract-pptx.pyPPTコンテンツの抽出フェーズ4A

コメント