open-slide
自然言語とコーディングエージェントで React スライドを書き切るためのランタイム(MIT)
各スライドは 1920 × 1080 の固定キャンバス上に描画される任意の React コンポーネントである。制約 DSL ではなく、エージェントが普段どおり TSX を書ける。キャンバス・スケーリング・ページ遷移・ホットリロード・プレゼンモード・静的 HTML と PDF のエクスポートまでをフレームワーク側が担う。
公開ソースは GitHub の 1weiho/open-slide。npm では @open-slide/cli がスキャフォールド、@open-slide/core がランタイムと Vite プラグインを提供する。
初期化されたワークスペースには、スライド作成と実装ルールを読ませるためのエージェントスキルが含まれる。Claude Code 向けに揃えられているが、Codex や Cursor など他のエージェントでも同じリポジトリを編集する使い方が想定されている。
@slide-comment をソースに反映し、マーカーを消す。
slideId と pageIndex に解決する。
themes/ からテーマを選ぶか、トピック・ aesthetic・枚数・テキスト密度・モーション有無を質問する。slide-authoring に従い export const design でパレットを宣言し、slides/<id>/index.tsx を書く。スライドは slides/<kebab-case-id>/index.tsx がエントリ。画像・動画・フォントは同フォルダの assets/ に置く。1 デッキ = 1 TSX + assets のみ(兄弟コンポーネントファイルは作らない)。
// slides/my-deck/index.tsx
import type { Page, SlideMeta } from '@open-slide/core';
const Cover: Page = () => (
<div style={{ width: '100%', height: '100%' }}>…</div>
);
export const meta: SlideMeta = {
title: 'My deck',
createdAt: '2026-05-16T12:00:00Z',
theme: 'aurora', // 任意: themes/ の id
};
export default [Cover] satisfies Page[];export defaultは props なし React コンポーネントの非空配列(表示順 = 配列順)。- 各ページは 1920×1080 を前提に px 指定。フォントサイズは hero 140–200px、本文 32–44px など段階表を起点にする。
meta.createdAtは ISO 8601 文字列リテラル。ホーム画面の「新しい順」ソートに使われる。
- インスペクタ: 開発サーバー上で要素をクリックし、コメントを付与。コメントはソース内の
@slide-commentとして保持される。 - アセット: 画像・動画・フォントをデッキ単位で管理。ブランド SVG は svgl カタログから検索して取り込める。
- プレゼン: 全画面再生、キーボード操作、プレゼンターモード(現在/次スライド、スピーカーノート、タイマー)。
- エクスポート: 自己完結した静的 HTML サイト、または印刷向け PDF を CLI から出力。
- スライドマネージャ: 複数デッキをフォルダと絵文字で整理し、ドラッグで並べ替え。
成果物は静的ファイルのみ。Vercel、Cloudflare Pages、Netlify 等の静的ホスティングにそのまま載せられる(サーバ常駐ランタイムは不要)。
| コマンド | 説明 | 主なフラグ |
|---|---|---|
npx @open-slide/cli init <name> |
最小ワークスペースを生成。Vite / React / tsconfig は core に隠蔽される。 | — |
open-slide dev |
開発サーバーを起動。 | -p, --port · --host · --open |
open-slide build |
静的サイトをビルド。 | --out-dir(既定 dist) |
open-slide preview |
本番ビルドをプレビュー。 | -p, --port · --host · --open |
設定(任意)
ワークスペース直下の open-slide.config.ts でスライドディレクトリやポートを上書きできる。
import type { OpenSlideConfig } from '@open-slide/core';
const openSlideConfig: OpenSlideConfig = {
slidesDir: 'slides',
port: 5173,
};
export default openSlideConfig;README が示すループを、処理の順序として整理した。
flowchart TD
A[プレビュー] --> B[要素クリック]
B --> C["@slide-comment 付与"]
C --> D["/apply-comments"]
D --> E[ソース更新]
E --> A
| パス | パッケージ | 役割 |
|---|---|---|
packages/core | @open-slide/core | ホーム、スライドビューア、プレゼン、インスペクタ、Vite プラグイン、open-slide CLI。 |
packages/cli | @open-slide/cli | init スキャフォールドとプロジェクトテンプレート。 |
apps/demo | private | ローカル開発用。workspace 参照で core を dogfood するサンプルデッキ。 |
apps/web | private | 公式ドキュメント/マーケ用 Next.js サイト。 |
ルートは pnpm ワークスペースと Turbo でオーケストレーション。品質ゲートは Biome(format + lint)と Vitest が担う。
新規デッキ
npx @open-slide/cli init my-slide
cd my-slide
pnpm devエージェント運用の制約事項はリポジトリ直下の CLAUDE.md にまとまっている。スライド本体は slides/<id>/index.tsx から編集する。
フレームワーク本体の開発
pnpm install
pnpm dev # demo が local core を参照
pnpm build
pnpm check # biome
pnpm test # vitest- GitHub: 1weiho/open-slide
- npm: @open-slide/cli
- npm: @open-slide/core
- svgl — ロゴ SVG 検索(製品連携)