markstream-react について
React 18+や互換性のある Next アプリに Markstream を導入するためのスキルです。レンダラーの選択、ストリーミング、SSR 境界、コンポーネントのカスタマイズを扱います。
主な機能
- 01React・Next レンダラーの設定
- 02ストリーミングと履歴表示の指針
- 03SSR 境界の推奨事項
- 04カスタムコンポーネントのマッピング
活用シーン
- 01React チャット UI への Markstream 導入
- 02ストリーミング出力と完了済み履歴の表示
- 03Next.js でのクライアント専用境界の選択
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ simon-he95/ markstream-vue --skill markstream-reactインストール後、Claude Code で/markstream-reactを入力して読み込まれたか確認します。
同梱ファイルagents/openai.yaml
詳細
Markstream React
ホストアプリが React または Next の場合に、このスキルを使用して Markstream を安全に接続します。
ワークフロー
- リポジトリが React 18 以降、またはベータ版レンダラー API に対応した Next ホストであることを確認します。
markstream-reactと、リクエストされたオプションのピア依存関係のみをインストールします。- アプリのシェルまたはクライアントエントリーポイントから
markstream-react/index.cssをインポートします。 - レンダリング境界に合ったエントリーポイントを選択します。
- 通常のクライアントレンダラーには
markstream-reactを使用します。 - Next 専用のコンポーネント API には
markstream-react/nextを使用します。 - クライアントフックを使わずにサーバーレンダリングする場合は
markstream-react/serverを使用します。
- 通常のクライアントレンダラーには
- まずは
contentを使用します。- ストリーミングや高頻度の AI 出力では、
contentを維持し、まず組み込みのスムーズストリーミングを使用します。smoothStreaming="auto"がデフォルトで、typewriter={true}またはmaxLiveNodes <= 0の場合に有効になります。typewriterは点滅カーソルのみを制御し、デフォルトはfalseです。fadeはノードの表示時とストリーミングテキストのフェードアニメーションを制御し、デフォルトはtrueです。
- ストリーミングと履歴の復元:チャット UI では、同じレンダラーでストリーミングを開始し、後から
final={true}にして履歴へ切り替えます。- ストリーミング:
smoothStreaming="auto"、fade={false}、typewriter={true}。これは慎重を期した表示・パフォーマンス上の選択であり、API の非互換性によるものではありません。このアダプターでは Vue 3 の制限付き追加フェードを採用していないため、両方を有効にする前にアニメーションの動作を確認してください。 - 履歴の復元:
smoothStreaming={false}、fade={true}、typewriter={false}。コンテンツはすでに完成しているため、表示のペース調整は遅くなりますが、フェードによって洗練された表示アニメーションになります。 - 動的な切り替え:
smoothStreaming={isStreaming ? 'auto' : false}、fade={!isStreaming}。
- ストリーミング:
- ワーカープロセスで事前解析したコンテンツ、共有 AST ストア、またはカスタム AST の制御が必要な場合に限り、
nodesとfinalに移行します。 htmlPolicyのデフォルト値はsafeになり、Mermaid の厳格モードはmermaidPropsを通じてデフォルトで有効になっていることに注意してください。
- ストリーミングや高頻度の AI 出力では、
- Next の SSR 境界を守ります。
- ブラウザー専用のピア依存関係を使用する場合は、
use client、ssr: falseを指定した動的インポート、またはその他のクライアント専用境界を優先します。
- ブラウザー専用のピア依存関係を使用する場合は、
- カスタムパーサーを作成する前に、レンダラーにローカルなコンポーネントを使用します。
streamingComponentsはパーサーに基づくNodeComponentPropsを受け取り、未完了のカスタムタグに対応し、そのキーを有効なcustomHtmlTagsリストに自動的に追加します。htmlComponentsはサニタイズ済み HTML 属性とchildrenを受け取ります。パーサーノードや読み込み状態のインターフェースは受け取りません。- 型付きマップには
defineStreamingComponents(...)とdefineHtmlComponents(...)を優先して使用します。 - 組み込みノードのオーバーライドや共有の互換性登録には、スコープ付きの
setCustomComponentsを使用します。 parseOptionsの変換は、移行にトークンや AST の変更が必要な場合に限って使用します。
- 必要最小限の開発、ビルド、または型チェック用コマンドで検証します。
デフォルトの判断基準
- まずレンダラーの配線を行い、その後に移行時の整理を行います。
- リポジトリですでに
react-markdownを使用している場合は、このスキルとmarkstream-migrationを併用してください。 - ほとんどの AI チャット/トークンストリーミング画面では、組み込みのスムーズなストリーミング機能を備えた
contentを優先してください。 - ストリーミングと履歴の復元:チャットメッセージがストリーミングから履歴に切り替わるとき(例:
finalがtrueになるとき)は、プロパティを動的に切り替えてください。ストリーミング中はsmoothStreaming="auto"、fade={false}、履歴ではsmoothStreaming={false}、fade={true}を設定します。詳しい例はdocs/guide/ai-chat-streaming.mdを参照してください。 - 解析や AST 変換を別のレイヤーが担当している場合に限り、
nodesに切り替えてください。 - グローバルレジストリの変更より、レンダラー内のカスタムタグマップを優先してください。
- SSR の問題を解決するために必要な、最小限のクライアント専用境界を使用してください。
- 画面の最初の SSR コンテンツを空の状態から意図的に開始する場合を除き、
smoothStreaming={true}は避けてください。auto モードではマウント済みゲートが使用されます。 - 信頼できる従来のレンダリングを維持する場合を除き、
htmlPolicy="safe"と Mermaid の strict モードを維持してください。 - 信頼できる画面で以前の動作が必要な場合は、その画面に限って
htmlPolicy="trusted"とmermaidProps={{ isStrict: false }}を使用し、その理由を説明してください。
参考になるドキュメント
docs/guide/react-quick-start.mddocs/guide/react-installation.mddocs/guide/react-components.mddocs/guide/react-next-ssr.mddocs/guide/react-markdown-migration.mddocs/guide/component-overrides.md
コメント
Markdown 対応