LLM(大規模言語モデル)やRAG(検索拡張生成)システム構築において、最大の課題の一つが「ドキュメントのパース速度と一貫性」です。
Webスクレイピングサービスで有名な Firecrawl が開発した新進気鋭の文書パースツール 「anydoc」 について、その特徴から、Python環境構築時に高確率でハマる「偽パッケージ名の罠」、そして正しい使い方までを網羅的にまとめました。
1. anydoc とは?
anydoc は、各種フォーマットのドキュメントをLLMが最も理解しやすい GitHub-Flavored Markdown (GFM) へ超高速変換するために作られたオープンソースツールです。コア部分は Rust で実装されており、PythonおよびNode.js、WebAssembly(WASM)のバインディングが提供されています。
主な特徴
- 圧倒的な低レイテンシ: ピュアRust実装により、1ドキュメントあたりの変換時間中央値は 5ms未満(実測値4.4ms)。UnstructuredやDoclingなどの既存ツールと比較して数十倍〜百倍以上の速度を誇ります。
- 広範なフォーマット対応:
.docx,.pptx,.xlsx,.pdf,.rtf,.epub,.csv,.odtなど全14種類のファイルフォーマットを単一のインターフェースで処理可能。 - 完全ローカル・プライバシー設計: 外部API送信や重いモデルのダウンロードを必要とせず、ローカル環境のみで完全に動作します。
2. 【超重要】インストール時のハマりポイント(パッケージ名の罠)
Pythonでanydocを使おうとした際、一番最初にハマりやすいのがインストールするパッケージ名です。
❌ やってはいけないインストール(エラーの原因)
pip install anydoc # これはダミーパッケージです!これを実行すると、PyPI上に存在する全く関係のない空のパッケージ(v0.0.0)がインストールされてしまいます。 「Requires-Python <3.11(Python 3.10以下じゃないと入らない)」という謎のエラーが出たり、インストール後に AttributeError: module 'anydoc' has no attribute 'to_markdown' と言われたら、この罠に引っかかっています。
⭕ 正しいインストール方法とPythonバージョン
Firecrawlが提供している公式のPythonパッケージ名は firecrawl-anydoc です。必ずこちらをインストールしてください。
# pip を使用する場合
pip install firecrawl-anydoc
# uv を使用する場合(推奨)
uv pip install firecrawl-anydoc【対応Pythonバージョンについて】 公式の firecrawl-anydoc は Stable ABI(cp310-abi3)でビルドされているため、Python 3.10 以上(3.11, 3.12, 3.13…)の最新環境でそのまま動作します。 わざわざPythonのバージョンを3.10に下げる必要はありません。
3. Pythonでの基本的な使い方とコード例
正しいパッケージ(firecrawl-anydoc)がインストールされていれば、インポート名は anydoc となり、非常にシンプルな関数でMarkdown化が可能です。
単一ドキュメントの変換コード
ファイルのパスを渡して直接Markdownの文字列を取得するには anydoc.to_markdown() を使用します。
import anydoc
def convert_to_markdown(file_path: str) -> str:
# anydoc.to_markdown() で直接Markdown文字列を取得
markdown_text = anydoc.to_markdown(file_path)
return markdown_text
if __name__ == "__main__":
# Windows環境でのパス指定例
file_path = r"files\260819.docx"
try:
docx_md = convert_to_markdown(file_path)
print("--- 変換結果 (先頭200文字) ---")
print(docx_md[:200])
except Exception as e:
print(f"変換エラー: {e}")結果

ディレクトリ一括処理(RAG前処理パイプライン)
pathlib を組み合わせることで、多様な拡張子が混在するフォルダを一括で変換できます。数十〜数百のファイルも数秒で処理が終わるため、バッチ処理に最適です。
from pathlib import Path
import anydoc
def process_docs_folder(input_dir: str, output_dir: str):
input_path = Path(input_dir)
output_path = Path(output_dir)
output_path.mkdir(parents=True, exist_ok=True)
supported_extensions = {".docx", ".doc", ".pptx", ".xlsx", ".pdf", ".epub", ".rtf", ".csv"}
for file_path in input_path.rglob("*"):
if file_path.suffix.lower() in supported_extensions:
try:
# ファイルパスから直接Markdownへ変換
markdown_text = anydoc.to_markdown(str(file_path))
# 出力先のMarkdownファイル名を生成
out_file = output_path / f"{file_path.stem}.md"
out_file.write_text(markdown_text, encoding="utf-8")
print(f"[OK] Converted: {file_path.name}")
except Exception as e:
print(f"[ERROR] Failed to convert {file_path.name}: {e}")
if __name__ == "__main__":
process_docs_folder("./raw_documents", "./processed_markdowns")結果


4. まとめ
Firecrawlの anydoc は、圧倒的なスピード(4.4ms)と高いMarkdown再現度を持つ期待のドキュメントパースライブラリです。
PyPIのパッケージ名が firecrawl-anydoc である点さえ間違えなければ、最新のPython環境でもスムーズに導入でき、その爆速前処理の恩恵をフルに受けることができます。
これまでRAGのデータインジェクションやローカルでの前処理の遅さに悩んでいた方は、ぜひプロジェクトに組み込んでみてください!


コメント