Firecrawl⁠オフィス文書やPDFをMarkdownへ変換する「anydoc」オープンソースで公開

AI向けWebデータAPIを提供するFirecrawlは2026年8月5日、WordやPowerPoint、Excel、PDFなどの文書をMarkdownへ変換するRust製ライブラリ「anydoc」をオープンソースで公開した。ローカル環境で動作し、CLIのほかRust、Node.js、Pythonから利用できる。ライセンスはMIT。

anydocは、Word、PowerPoint、Excel、OpenDocument、RTF、EPUB、CSV、PDFをGitHub Flavored Markdown(GFM)へ変換する。PDF以外の各形式では、共通の文書モデルを経由して単一のシリアライザーでMarkdownを生成する。これにより、見出し、表、リスト、脚注などを形式間で一貫して出力できるという。

PDF以外の形式では、埋め込み画像やオブジェクトの画像データやMarkdownの画像記法を出力しない。手元のDOCXファイルで、通常の段落に配置した画像を変換したところ、代替テキストがあれば、その文字列だけを本文として出力することを確認した(画像のMarkdown形式では出力しなかった⁠⁠。一方、同じ文書のPDFをMarkdownに変換してみたところ、画像の代替テキストは出力されなかった[1]。画像などのバイト列は、Node.js、Python、RustのAPIで文書モデルを取得すれば参照できるが、現在のところ、付属CLIには埋め込み画像を個別の画像ファイルとして保存する機能はない。なお、外部URLを持つ画像はMarkdown形式の画像記述を出力する。

DOCXファイルを変換した例。画像の代替テキストがMarkdownの画像記法を伴わない本文として出力された

ファイル形式は、PDFヘッダー、RTFの開始グループ、OLEストリーム名、ZIPパッケージのMIMEタイプやコンテンツタイプといったファイル内の情報から判定し、判定できない場合は拡張子を使う。識別用のマーカーがないCSVでは、拡張子または明示的な形式指定が必要になる。PDFの変換には、Firecrawlが開発するオープンソースのRust製ライブラリpdf-inspectorを利用する。anydoc単体で変換できるのは文字情報を抽出できるPDFで、スキャン文書や画像のみのPDFにはOCRが必要になる。Firecrawlはanydocの変換機能にOCRモデルを加えたホスト型APIFirecrawl Parseを提供している。

anydocをローカルで利用する場合、npmパッケージ@firecrawl/anydocに含まれるCLIは、次のようにnpxで実行できる。初回実行時には、実行環境向けのビルド済みバイナリがダウンロードされる。

# 対応形式やオプションを確認
npx @firecrawl/anydoc --help

# report.docxを変換し、Markdownを標準出力へ表示
npx @firecrawl/anydoc report.docx

# slides.pptxを変換し、Markdownをslides.mdへ保存
npx @firecrawl/anydoc slides.pptx -o slides.md

APIとして利用する場合、Node.jsではnpm install @firecrawl/anydoc、Pythonではpip install firecrawl-anydocでパッケージを追加する。いずれもanydocのRustコアを呼び出すネイティブバインディングとして提供される。Rustではcargo add anydocでクレートを追加し、anydoc::to_markdownなどのAPIを直接呼び出せる。このほか、anydocのCLIによる文書変換手順を定義したAgent Skillもリポジトリに含まれる。

公開時点のREADMEには、PDFを除く14形式、計100件の実文書を使い、anydocとほかの6つの変換ツールを比較した独自ベンチマークも掲載されている。anydocは変換時間の中央値が4.7ミリ秒、総合スコアが100点満点中80だった。一方、同種のドキュメント変換ツールMarkItDownは、このベンチマークでは6形式に対応し、変換時間の中央値は134.8ミリ秒、総合スコアは65だった。ただし、総合スコアは各ツールが対応した形式ごとのスコアの平均で、単純には比較できない。品質スコアを形式別に比較できる5形式では、anydocが4形式で上回り、EPUBではMarkItDownが上回った。なお、品質評価にはLLMを用い、変換時間はCPU環境で測定している。評価用の文書群はリポジトリに含まれない。速度測定では、anydocとPythonライブラリ群はプロセス起動時間を除外し、CLIツールは起動時間を含めている。

おすすめ記事

記事・ニュース一覧