Back to all posts
Engineering

Markdownとunified.jsの魔法

Markdownは、技術文書やブログを書くための標準フォーマットです。しかし、それをどのようにHTMLに変換するのでしょうか?

現代的なアプローチは、抽象構文木(AST)を介してコンテンツを処理するunifiedエコシステムを使用することです。

Unifiedパイプライン

典型的なパイプラインは次のようになります:

  1. 解析 (Parse):文字列をASTに変換します(remark-parseを使用)。
  2. 変換 (Transform):ASTを変更します(例:remark-rehypeとrehype-highlightを使用して構文ハイライトを追加)。
  3. 文字列化 (Stringify):ASTをHTML文字列に戻します(rehype-stringifyを使用)。
import { unified } from 'unified';
import remarkParse from 'remark-parse';
import remarkRehype from 'remark-rehype';
import rehypeHighlight from 'rehype-highlight';
import rehypeStringify from 'rehype-stringify';

const processor = unified()
  .use(remarkParse)
  .use(remarkRehype)
  .use(rehypeHighlight)
  .use(rehypeStringify);

const html = await processor.process('# Hello World');
console.log(html.toString());

このアプローチにより、ユーザー生成コンテンツを処理したり、独自の静的サイトジェネレーターを作成したりする際に、最大限の柔軟性とセキュリティが得られます!