markstream-custom-components について
Markstreamの特定ノードやカスタムタグの描画を変更する開発者向けのスキルです。スコープ付きコンポーネントマッピングを優先し、描画の差し替え、タグ対応、パーサー変換の選択を案内します。
主な機能
- 01組み込みノード・タグ・パーサー要件の分類
- 02スコープ付きコンポーネントマッピングの優先
- 03ネストしたMarkdown描画への対応
- 04コンポーネントのpropsと後処理の維持
- 05対象を絞ったチェックによる検証
活用シーン
- 01リンクやコードブロック描画器の差し替え
- 02信頼されたカスタムタグの描画
- 03タグ内のネストしたMarkdownの維持
- 04Mermaidや画像ノードの描画変更
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ simon-he95/ markstream-vue --skill markstream-custom-componentsインストール後、Claude Code で/markstream-custom-componentsを入力して読み込まれたか確認します。
同梱ファイルagents/openai.yamlreferences/patterns.md
詳細
Markstream カスタムコンポーネント
Markstream が特定のノードやカスタムタグをどのようにレンダリングするか変更する場合に、このスキルを使用してください。
オーバーライド方法を選ぶ前に、references/patterns.md を読んでください。
ワークフロー
- リクエストを分類します。
built-in override:image、link、code_block、mermaid、d2、inline_codeなど、既存のレンダラーを置き換えます。custom tag:thinkingのような信頼できる HTML 風タグに対応します。parser-level:トークン変換や AST の再構成が必要です。この場合に限り、このスキルを離れて低レベルのパーサーフックを使用します。
- スコープを限定したマッピングを優先します。
- Vue、Vue 2、Svelte、および Angular の共有登録では、可能な限りグローバルマッピングの代わりに
setCustomComponents(customId, mapping)を使用し、同じcustomId/custom-idを渡します。 - React のカスタムタグでは、パーサーが扱うノードにはレンダラー単位の
streamingComponentsを、サニタイズ済み HTML の props とchildrenにはhtmlComponentsを優先します。型付きマップにはdefineStreamingComponents(...)/defineHtmlComponents(...)を使用します。setCustomComponentsは、組み込みノードのオーバーライドや共有のレガシー登録に使用します。 - Svelte と Angular では、オーバーライドを共有レジストリに登録しない場合、レンダラー単位の
customComponentsマップも渡せます。 - Vue 3 のアプリ/プラグインのセットアップで、オーバーライドを Vue アプリインスタンスに限定する場合は、
markstream-vueから{ VueRendererMarkdown }をインポートし、{ components }を指定してインストールします。
- Vue、Vue 2、Svelte、および Angular の共有登録では、可能な限りグローバルマッピングの代わりに
- 最小限で安全なオーバーライドから始めます。
- リーフノード(
image、link、inline_code、mermaid)は、コンテナノード(heading、paragraph、list_item)より扱いやすいです。 - Mermaid だけを変更するリクエストには、
code_blockではなくmermaidを使用します。
- リーフノード(
- 必要に応じて、ネストされた Markdown を保持します。
- 内部に Markdown を含む信頼できるカスタムタグでは、ネストしたレンダラーで
node.contentをレンダリングします。 - ネストしたレンダラーには、同じカスタムタグの許可リストを渡します。
- スムーズストリーミングを行う親の内部にあるネストしたレンダラーは、二重ペーシングを防ぐため自動的に抑制されます。子レンダラーに
smooth-streamingを追加しないでください。 - React では、
streamingComponentsのキーが有効なカスタムタグのリストに自動的に追加されます。別のパーサーパスで必要な場合を除き、それらのキーをcustomHtmlTagsに重複して指定しないでください。
- 内部に Markdown を含む信頼できるカスタムタグでは、ネストしたレンダラーで
- props とクリーンアップを維持します。
node、loading、indexKey、customId、isDarkを保持します。mermaidとinfographicのオーバーライドでは、再マウント時に非同期プレビューのシェルが高さを維持できるよう、estimatedPreviewHeightPxを保持します。- スコープが不要になったら、
removeCustomComponents(customId)で一時的なスコープ付きマッピングを削除します。
- 必要最小限のチェックで検証します。
- ローカルデモ、対象を絞ったテスト、またはドキュメントのビルドを優先します。
- 実装が、繰り返し使われるカスタムタグやネストしたカスタムタグに安全かどうかを明記します。
デフォルトの判断
- スコープ付きオーバーライドを優先し、アプリ全体で本当に必要な場合にのみグローバルオーバーライドを使用します。
- コンテナノードよりリーフノードのオーバーライドを優先します。
- パーサーフックより
customHtmlTagsとスコープ付きカスタムコンポーネントを優先します。 - React では、レジストリの変更よりレンダラー単位のコンポーネントマップを優先します。
- Markdown を含むタグの本文には、ネストしたレンダラーを使用します。
参考ドキュメント
docs/guide/component-overrides.mddocs/guide/custom-components.mddocs/guide/react-components.mddocs/guide/components.mddocs/guide/advanced.md
コメント
Markdown 対応