portable-text-conversion について
外部コンテンツをSanity Portable Textに変換するためのガイドです。開発者がMarkdownまたはHTMLの変換方法を選び、ほかのソースからブロックを手動で構築する手順も示します。
主な機能
- 01markdownToPortableTextによるMarkdown変換
- 02htmlToBlocksによるHTML変換
- 03Portable Textブロックの手動構築
- 04ブロック、スパン、マーク、リストの構造解説
- 05入力形式ごとの変換ルール
活用シーン
- 01MarkdownコンテンツのSanityへの移行
- 02コンテンツ移行時のHTML変換
- 03APIやデータベースからのPortable Text構築
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ sanity-io/ agent-toolkit --skill portable-text-conversionインストール後、Claude Code で/portable-text-conversionを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
rules/html-to-pt.mdmanual-construction.mdmarkdown-to-pt.md詳細
ポータブルテキスト変換
外部コンテンツ(HTML、Markdown)をSanity用のポータブルテキストに変換します。主な方法は3つあります。
markdownToPortableText—@portabletext/markdownを使ってMarkdownを直接変換します(Markdownに推奨)htmlToBlocks—@portabletext/block-toolsを使ってHTMLをPTブロックに解析します(HTMLの移行用)- 手動構築 — あらゆるソース(API、データベースなど)からPTブロックを直接構築します
ポータブルテキストの仕様
変換前に、出力先の形式を理解してください。PTはブロックの配列です。
[
{
"_type": "block",
"_key": "abc123",
"style": "normal",
"children": [
{"_type": "span", "_key": "def456", "text": "Hello ", "marks": []},
{"_type": "span", "_key": "ghi789", "text": "world", "marks": ["strong"]}
],
"markDefs": []
},
{
"_type": "block",
"_key": "jkl012",
"style": "h2",
"children": [
{"_type": "span", "_key": "mno345", "text": "A heading", "marks": []}
],
"markDefs": []
},
{
"_type": "image",
"_key": "pqr678",
"asset": {"_type": "reference", "_ref": "image-abc-200x200-png"}
}
]
主なルール:
- すべてのブロックとスパンには
_key(配列内で一意)が必要です _type: "block"はテキストブロックに使用します。カスタムタイプにはそれぞれ独自の_typeを使用しますmarkDefsには注釈データを格納します。スパンのmarksはmarkDefs[*]._keyまたは装飾文字列を参照します- リストでは、通常のブロックに
listItem("bullet" | "number")とlevel(1、2、3...)を使用します
変換ルール
ソース形式に対応するルールファイルを確認してください。
- Markdown → ポータブルテキスト:
rules/markdown-to-pt.md—markdownToPortableTextを使う@portabletext/markdown(推奨) - HTML → ポータブルテキスト:
rules/html-to-pt.md—htmlToBlocksを使う@portabletext/block-tools - 手動でのPT構築:
rules/manual-construction.md— あらゆるソースからプログラムでブロックを構築します
注:
@sanity/block-toolsは旧パッケージ名です。新しいプロジェクトでは必ず@portabletext/block-toolsを使用してください。APIは同じです。
コメント
Markdown 対応