LLMに何かを「読ませる」とき、入力がMarkdownかどうかはけっこう重要なのよ。PDFそのままやHTMLのゴミまみれのテキストをコンテキストに突っ込むより、構造が整ったMarkdownの方がトークン効率も精度も上がるわよね。
最近この「何でもMarkdown化」の文脈でいくつかのツールが話題になってたから、実際にインストールして比べてみたわよ。今回試したのはこの4つ:
- markitdown(Microsoft製)
- Jina r.jina.ai(比較対象)
- opendataloader-pdf(Java製OSS)
- Docling(IBM製OSS)
構成は「Webサイトを Markdown 化したい」「PDF を Markdown 化したい」の2軸で整理するわよ。どっちのニーズかで選ぶツールが変わってくるから。
Webサイトを Markdown 化したい
Webサイトをまるっと Markdown に変換したいとき、候補になるのは markitdown と Jina(あるいはFirecrawl)よ。実際に2つのサイトで試したわよ。
SPA(React / Next.js)のサイト:swandive.co.jp
Next.js / React で作られたサイトを対象に試したわよ。
markitdown:完全に空振り。
JS を実行しないとコンテンツが HTML に入ってこない SPA だから、HTTP レスポンスをそのまま解析する markitdown には手も足も出ないの。出力はほぼゼロよ。
Jina:バッチリ取れた。
経営理念・ビジョン・メンバー紹介・事業内容、全部 Markdown 化されてた。Jina はヘッドレスブラウザで JS を実行してからコンテンツを取るから、SPA でも平気なのよ。
静的サイト(Astro):0xkyosuke.xyz
今度は Astro で作られた静的サイトを試したわよ。
markitdown:取れた。しかもきれい。
Astro はビルド時に HTML を生成するから、HTTP レスポンスにコンテンツが含まれてる。記事タイトル・日付・概要テキスト・リンクが、ちゃんと階層構造を保ったままMarkdownになってたわよ。
Jina:こっちも取れた。でも markitdown の方がきれい。
内容は同じだけど、Jina は画像・テキスト・リンクを一行に連結しがちで、読みにくい Markdown になってた。markitdown は構造的に分かれてて読みやすいわよ。
Webサイト変換まとめ
つまり、SPAか静的サイトかで向き不向きが真逆になるのよ。
| サイトの種類 | markitdown | Jina / Firecrawl |
|---|---|---|
| 静的 HTML(Astro / Hugo 等) | ✅ きれいに取れる | ✅ やや冗長 |
| SPA(React / Next.js 等) | ❌ 空振り | ✅ ちゃんと取れる |
| PDF・Word・Excel などのファイル | ✅ 対応 | ❌ 非対応 |
| コスト | 無料・ローカル実行 | Firecrawl は有料 API |
markitdown と Jina / Firecrawl は競合じゃなくて補完関係ね。
PDF を Markdown 化したい
PDF の変換は、チャットボットやRAGのナレッジ作りで需要が多いケースよね。今回は markitdown・opendataloader-pdf・Docling の3ツールを、Uber の日本語請求書PDF(テーブル含む1ページ)で比べたわよ。
markitdown:テキストは取れるけど、テーブルが消える
uv tool install 'markitdown[all]'
markitdown ./invoice.pdf
テキストは取れるんだけど、テーブル構造が完全に失われるのよ。さらに日本語 PDF で文字の二重化バグがあったわ。
取取引引年年月月日日 説説明明 数数量量 JCT 金金額額
取引年月日 が 取取引引年年月月日日 になる。こんなのナレッジに入ったら回答がおかしくなるに決まってるじゃない。
opendataloader-pdf:本命はJSON出力なのよ
https://github.com/opendataloader-project/opendataloader-pdf
GitHubスター15,000超えのJava製OSS。Markdown変換の品質は markitdown と大差ないけど、このツールの本番はJSON出力よ。
uv tool install opendataloader-pdf
opendataloader-pdf -f json --to-stdout ./invoice.pdf
{
"type": "paragraph",
"id": 3,
"page number": 1,
"bounding box": [282.971, 802.472, 311.702, 808.52],
"font": "WenQuanYiZenHei",
"font size": 9.603,
"content": "請求書"
}
各要素のページ番号・座標・フォント情報まで取れるのよ。RAGで「PDFの何ページ目のどの部分に書いてあるか」を正確に引用したいシステム向けね。Markdown化が目的なら別のツールを使いなさいよって話。
Docling:同じPDFで試したら、差は明確だった
https://github.com/DS4SD/docling
GitHubスター25,000超えのIBM製OSS。
uv tool install docling
docling --to md --output ./output ./invoice.pdf
同じUber請求書PDFの出力がこれよ:
| 取引年月日 | 説明 | 数量 | JCT | 金額 |
|-----------------|----------|------------|-------|---------|
| 2026 年 3 月 25 日 | 輸送サービス料金 | 1 | 10% | ¥ 2,295 |
| | | 合計金額(税込) | | ¥ 2,295 |
| | | 合計 JCT 10% | | ¥ 209 |
テーブルが Markdown テーブルとして正確に出力されてる。文字の二重化もなし。これよ、これ!
他の強みを挙げると:
- テキストPDF・スキャンPDF・混在PDF すべてに対応
- OCR 内蔵(80言語サポート)
- 見出し階層・テーブル・図のキャプションまで構造を保持
- 完全無料・ローカル実行
- LangChain / LlamaIndex との統合も用意されてる
PDF変換まとめ
| ツール | テーブル構造 | 日本語 | OCR | 強み |
|---|---|---|---|---|
| markitdown | ❌ フラット | ⚠️ 文字二重化あり | ✅ | 多フォーマット対応 |
| opendataloader-pdf | ❌ フラット | ✅ 正常 | ✅ | 座標・構造化JSON出力 |
| Docling | ✅ テーブル保持 | ✅ 正常 | ✅ 内蔵 | Markdown品質が別格 |
結局どれを使うか
チャットボット・RAGのナレッジ用途(PDF)→ Docling
テーブル構造と OCR 対応を両立できるのはこれだけよ。Markdown の品質が回答精度に直結するから、ここで妥協すると後で絶対後悔するわ。
SPA サイトの Markdown 化 → Jina / Firecrawl
React / Next.js 製のサイトは markitdown では何も取れない。JS レンダリングが必要なら Jina / Firecrawl 一択ね。
静的サイト・多フォーマットの Markdown 化 → markitdown
Astro・Hugo みたいな静的サイトや、PDF 以外(HTML・CSV・Word・Excel)を一括変換したいときは markitdown が便利よ。
PDFの座標・精密引用が必要なシステム → opendataloader-pdf
「このPDFの何ページ目のどこに書いてある」まで返したいシステム向けね。Markdown 品質より構造化データの精度を優先する場面で選びなさいよ。
用途の分解ができれば、あとは目的に合ったツールを選ぶだけじゃない。全部入りの万能ツールは(まだ)ないのよ、残念ながらね。