# AI向けにPDFやWordファイルをテキストに変換する方法：MicrosoftのMarkItDown

> 詳細レビュー：AI向けにPDFやWordファイルをテキストに変換する方法：MicrosoftのMarkItDown。

Source: https://ailoot.ai/blog/ja/markitdown-pdf-word-to-text/
Canonical: https://ailoot.ai/blog/ja/markitdown-pdf-word-to-text/
Language: ja
Publisher: Ailoot (https://ailoot.ai/)
Translation: guide-171
Revision: sha256-8120b96969fadf61967ff728e4fb2f699d2e7793c27a18bb450f53250ffc0dba


<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重要なポイント">

重要なポイント

MarkItDownは、Word、Excel、プレゼンテーション、PDFをAI向けの構造化テキストに変換する、Microsoftの無料ユーティリティです。Officeファイルは数分の一秒で正確に解析します。複雑なレイアウトのPDFは混乱した状態に変換し、スキャン画像では終了コードが0なのに空のファイルを返します。以下では、動作するインストールコマンド、キリル文字を含む文書での測定結果、別のツールを使うべきタイミングを紹介します。

</div>



詳しい手順は[Ailootのドキュメント](https://ailoot.ai/docs/)をご覧ください。

## MarkItDownとは何か、何に使うのか？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重要なポイント">

重要なポイント

MarkItDownは、ファイルを読み取り、その内容を構造化テキストとして返すMicrosoft製のPythonユーティリティです。見出しは見出しに、表は表になります。MITライセンスのオープンなGitHubリポジトリで公開され、コマンド1つでインストールでき、すべての処理が自分のマシン上で行われます。役割は1つ。AIが単語だけでなく構造も認識できるよう、文書を整えることです。

</div>

AIに契約書、レポート、会計データのエクスポートを渡したのに、文書と関係のない回答が返ってくることがあります。原因はたいていモデルではありません。ファイルには形式があるからです。Wordはマークアップ付きのアーカイブ、Excelはセル同士がリンクされたスプレッドシート、PDFはページ上の座標を伴う文字の集合です。モデルが扱えるのはテキストであり、そのテキストを取り出す必要があります。

それを行うのがMarkItDownです。リポジトリは[github.com/microsoft/markitdown](https://github.com/microsoft/markitdown)にあり、MITライセンスなので制限なく利用できます。2026年8月18日時点で、スターは174,412、フォークは12,756です。最新リリースの0.1.7は7月29日に公開されました。プロジェクトは活動中ですが、開発から保守へ重点が移っています。オープンなプルリクエストは481件で、これまでにマージされたものは累計183件です。

開発者は、その目的を次のように説明しています。

<figure>
<blockquote>
<p>MarkItDownは、大規模言語モデルや関連するテキスト分析パイプラインで使うために、さまざまな形式のファイルをMarkdownに変換する軽量なPythonユーティリティです。</p>
</blockquote>
<figcaption>— Microsoft、プロジェクトの説明（翻訳）、https://github.com/microsoft/markitdown</figcaption>
</figure>

説明の次の一文を読むと、このツールに寄せられる不満の半分が理解できます。

<figure>
<blockquote>
<p>出力は見た目がかなり整っていて人にも読みやすいことが多いものの、テキスト分析ツールでの利用を想定しています。人が読む文書を忠実に変換する用途には、最適とは限りません。</p>
</blockquote>
<figcaption>— Microsoft、プロジェクトの説明（翻訳）、https://github.com/microsoft/markitdown</figcaption>
</figure>

出力はモデルに渡すための素材です。美しい文書にはなりません。プロジェクトは最初のセクションでそのことを率直に述べています。

説明では、なぜMarkdownを使うのかも明確に答えています。主要なモデルは、学習時に膨大な量のMarkdownを見ているため、すでにこのマークアップを「話し」、指示されなくても回答に含めます。また、マークアップは簡潔です。見出しを示すのに、メタデータを何十行も並べる代わりに、シャープ記号を3つ使えます。

## MarkItDownは通常のコンバーターとどう違うのか？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重要なポイント">

重要なポイント

pandocのようなコンバーターは、あるマークアップ言語を別の言語に変換し、人が読むためのレイアウトを保ちます。pandocはPDFを入力として受け付けません。MarkItDownが解決するのは逆の問題です。Officeファイルから内容を取り出し、トークンを無駄にせずモデルがすぐ理解できる形に整えます。見た目のレイアウトを保つことは目的ではありません。そこが違いのすべてです。

</div>

違いは1つの例から明らかです。PDFが20個入ったフォルダーをpandocで処理してみましょう。うまくいきません。[pandoc](https://pandoc.org/)はPDFを出力できますが、入力として読み込めないからです。そして「書類が山ほどある。モデルに渡せるようにしてほしい」という状況が、最もよくあります。

MarkItDownの作者は、自分たちを、どこからでも単にテキストを取り出すライブラリtextractと比較しています。違いは、MarkItDownが見出し、リスト、表、リンクといった構造を保とうとすることです。

| 機能 | pandoc | MarkItDown |
|----|----|----|
| PDFを読み込む | いいえ | はい、ただし注意点あり |
| Word、Excel、プレゼンテーションを読み込む | 一部 | はい |
| 出力の対象 | 人 | モデル |
| 主な価値 | レイアウトの忠実さ | 構造と文字数の少なさ |
| インストール | 単独プログラム | Pythonのコマンド1つ |

実務上の結論は単純です。記事を出版用のレイアウトに変換するならpandocを使います。AIに契約書を20件理解させたいなら、MarkItDownを使います。

## 最初のリリースをインストールせずにMarkItDownを入れるには？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重要なポイント">

重要なポイント

リリース0.1.8では、プロジェクトの説明にあるコマンドを使うと、Python 3.14と3.12で最新版がインストールされます。これはクリーンな環境8つで再確認されています。一方、プロジェクトの履歴で2番目のリリースである0.0.2への意図しないダウングレードは、Python 3.15、3.14を使うIntel Mac、macOSの古いバージョンで3.13と3.14を使う場合に、依然として起こります。こうした場合も、インストーラーは成功と報告します。そこでPython 3.12を使い、必要な形式を名前で指定して、直後にバージョン番号を確認してください。

</div>

まず正しいコマンドを示し、次にその理由を説明します。

1.  ### Pythonのバージョンを確認する

    最も信頼できるのはPython 3.12です。テストしたすべての環境で、最新のMarkItDownがインストールされました。`python3 --version`を実行すれば、現在のバージョンが分かります。Intel Macや古いmacOSを使うMacでは、Python 3.13と3.14で意図しないダウングレードが起きることがあります。Python 3.15はまだサポートされていません。詳しくは後述します。

2.  ### 形式を指定してインストールする

    `pip install 'markitdown[pdf,docx,xlsx,pptx]'`を実行します。引用符は必須です。付けないとシェルが角括弧を解釈してしまいます。Intel Macでは、`install`の後に`--prefer-binary`フラグを追加してください。

3.  ### インストール直後に確認する

    `markitdown --version`を実行します。応答は`markitdown 0.1.8`以降である必要があります。これより低い番号なら、インストール時にダウングレードされています。その理由をこのセクションで説明します。

```bash
pip install 'markitdown[pdf,docx,xlsx,pptx]'
markitdown --version
```

プロジェクトの説明では、すべてを一度にインストールするメインコマンドとして、`pip install 'markitdown[all]'`が紹介されています。0.1.8が公開された1週間後の2026年9月28日、Apple Silicon MacでPython 3.14.6と3.12.12を使い、クリーンな環境で4つのコマンドを実行しました。

| コマンド | Python 3.14でのインストール | Python 3.12でのインストール |
|----|----|----|
| `pip install markitdown` | 0.1.8 | 0.1.8 |
| `pip install 'markitdown[pdf,docx,xlsx,pptx]'` | 0.1.8 | 0.1.8 |
| `pip install 'markitdown[all]'` | 0.1.8 | 0.1.8 |
| `pip install 'markitdown[all]==0.1.8'` | 0.1.8 | 0.1.8 |

8回のインストールはすべて「Successfully installed」で終わり、`markitdown --version`はどのケースでも0.1.8を返しました。8月、最新版が0.1.7だったころ、Python 3.14で3番目のコマンドを実行すると、2025年3月8日に公開された0.0.2がインストールされました。これはプロジェクトの歴史で2番目のリリースです。現在は0.0.1から0.1.8までの安定版が11回、プレリリースを含めると26回リリースされています。

原因は依存関係の連鎖です。0.1.7では、`[all]`オプションが特定のリリース系列のYouTube字幕ライブラリを取り込み、その系列のすべてのリリースがPython 3.14で動作しないと宣言しています。インストーラーはそれらを拒否しますが、バージョンが固定されていないため、インストールできるバージョンが見つかるまでMarkItDownのバージョンをさかのぼります。0.0.2を見つけてインストールし、1年半前のリリースをマシンに入れてしまいます。0.1.8では、字幕ライブラリの要件が3.14で動作する系列に引き上げられ、ダウングレードはそこで止まりました。

この仕組みはまだ残っています。システムに必要なコンポーネントの1つが見つからないと、インストーラーは同じように0.0.2まで黙ってさかのぼります。最近のバージョンで該当するのは、ファイル形式の検出に使われるonnxruntimeエンジンです。Mac向けのビルド要件は次のとおりです。Python 3.12ではmacOS 11以降、3.13ではmacOS 13、3.14ではmacOS 14以降のApple Siliconのみです。Macがこの要件を満たさない場合、`pip install markitdown`だけでも0.0.2がインストールされます。Rosetta経由でPython 3.14を動かすIntel Macでのテストでは、まさにその結果になりました。「Successfully installed」と表示され、警告はなく、中身は0.0.2でした。

Intel Macには別の問題もあります。2026年6月以降、PDFの読み込みに使われるcryptographyライブラリは、このプロセッサ向けのビルド済みバージョンなしで公開されています。そのため、インストーラーはソースからのビルドを試みます。コマンドに`--prefer-binary`フラグを追加すると、ビルド済みパッケージがある以前のバージョンを使います。Intel向けPython 3.13でのテストでは、これによって0.1.8がインストールされ、PDFを開けました。このフラグでは、既知の脆弱性が3つあるcryptography 48.0.1がインストールされます。脆弱性はPKCS#7の復号と証明書チェーンの検証に関するものです。MarkItDownがこのライブラリを使うのは、暗号化されたPDFを復号するときだけで、文書の読み込みではその部分に到達しません。

Python 3.15では、2つの理由でダウングレードが起きます。バージョン0.1.8がサポート対象としているのは3.10から3.14までで、3.15用のエンジンもまだありません。Python 3.15でのインストーラーの解決結果からも確認できます。基本コマンドでも形式を指定したコマンドでも、同じ0.0.2がインストールされます。

ダウングレード時の警告は、コマンド内の各オプションについて1行ずつ表示されます。

```
WARNING: markitdown 0.0.2 does not provide the extra 'all'
```

この行は何十行ものダウンロード表示に埋もれ、代わりにインストールされたバージョンについては何も伝えません。オプションを付けない基本コマンドでは、警告すら出ません。最後の報告は「Successfully installed」と明るいものです。

オプションを付けずにインストールするのも解決策ではありません。基本パッケージは入りますが、PDFを開けません。

```
PdfConverter recognized the input as a potential .pdf file, but the
dependencies needed to read .pdf files have not been installed. To resolve
this error, include the optional dependency [pdf] or [all] when installing
MarkItDown. For example:

* pip install 'markitdown[pdf]'
* pip install 'markitdown[all]'
```

ツール自身は`[all]`を推奨しており、0.1.8ではPython 3.14と3.12で再びその方法が使えます。それでも、形式は名前で指定するほうがよいでしょう。`[all]`を付けると、プレリリースのAzureライブラリや、一度インストールを失敗させたYouTube依存関係の連鎖を含め、さらに15個ほどのパッケージと約55メガバイトが追加されるためです。

Azureのプレリリースは、インストーラーが自動的に処理します。通常pipはプレリリースを省きますが、ここでは要件にプレリリースが明記されているため、インストールします。Python 3.12でpipのバージョンを23.2から26.2まで4種類試し、いずれも0.1.8が選ばれました。

<div class="aside" data-semantic="callout" role="note" aria-label="注意">

注意

インストールした直後に`markitdown --version`を実行してください。5秒で済み、頼んだものをインストールできたか分かる唯一の方法です。成功の表示は、ここでは何の意味もありません。

</div>

8月に別のクリーンな環境で再インストールしたときも、結果は同じでした。0.0.2と「Successfully」です。

事前に知っておくと役立つ実用上の情報がいくつかあります。

サイズはかなり大きく、基本インストールで143メガバイト、4つの形式を指定すると303メガバイトです。最も重いコンポーネントは81メガバイトのファイル形式検出器で、基本インストールにも含まれます。ノートパソコンでは問題になりませんが、サイズ制限のあるクラウド関数では重要です。

ミラーを代替手段として当てにしないでください。テストしたミラーからインデックスは取得でき、MarkItDownのファイルも見つかりましたが、必要な依存関係の1つが欠けていたため、Python 3.14と3.12の両方でインストールに失敗しました。

インストールは、より大きな問題に比べれば小さなことです。多くの場合、AIがでたらめな回答をするのは、誤った情報や、その情報の誤った表現がコンテキストウィンドウに入っているからです。タスクの前にモデルへ渡す情報を選ぶ能力はコンテキストエンジニアリングと呼ばれ、文書の準備もその一部です。



## 最初の文書をテキストに変換するには？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重要なポイント">

重要なポイント

ターミナルでプログラム名とファイルパスを指定するだけです。既定では結果がウィンドウに表示されるので、そのままファイルに保存できます。方法は3つあります。コンソールに出力する方法、フラグを使って書き出す方法、ファイルをストリームとして渡す方法です。自分のスクリプトに組み込む場合は、URLも受け付ける3行のPythonラッパーを使えます。

</div>

最も短い方法はこちらです。

```bash
markitdown dogovor.docx
```

テキストはターミナルに表示されます。ファイルに保存する方法は2つあります。

```bash
markitdown dogovor.docx -o dogovor.md
markitdown dogovor.docx > dogovor.md
```

MacとLinuxでは両者の違いはほとんどありませんが、Windowsでは重要です。`>`でリダイレクトすると、出力にキリル文字が含まれるときにプログラムがクラッシュすることがあります。

ファイルをストリームとして渡すこともできます。その場合は拡張子のヒントが役立ちます。

```bash
cat dogovor.docx | markitdown -x docx
```

以下は、0.1.8のヘルプにある主なフラグです。

| フラグ | 機能 |
|----|----|
| `-o`, `--output` | 画面に表示する代わりに、結果をファイルに書き込む |
| `-x`, `--extension` | ファイルがストリームとして渡されたときの拡張子のヒント |
| `-m`, `--mime-type` | コンテンツタイプのヒント |
| `-c`, `--charset` | 文字エンコーディングのヒント |
| `-d`, `--use-docintel` | Microsoftの有料クラウドサービス経由で処理する |
| `-v`, `--version` | バージョンを表示する |

同じヘルプには、テスト済みの便利なフラグがさらに3つあります。`--list-plugins`はインストール済みのプラグインを表示し、`-p`は特定の実行でプラグインを有効にし、`--keep-data-uris`は文書に埋め込まれた画像を出力に残します（既定では切り抜かれます）。残りはMicrosoftのクラウドサービス用の設定です。

Pythonラッパーは3行です。

```python
from markitdown import MarkItDown

md = MarkItDown()
print(md.convert("ostatki.xlsx").text_content)
```

同じ呼び出しでURLも受け付けます。シンプルなページを処理したところ、見出しとリンクを含む167文字のきれいなテキストが返され、メニューとフッターは含まれませんでした。

```python
r = md.convert("https://example.com")
```

## MarkItDownが対応する形式と、その実際の意味は？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重要なポイント">

重要なポイント

プロジェクトの説明には、Officeファイル、PDF、画像、音声、アーカイブ、YouTubeのリンク、電子書籍など、幅広い形式が挙げられています。しかし、期待どおりに動かない項目が3つあります。無料版には画像の文字認識機能がありません。音声は英語用のエンジンに送られます。解析できなかったファイルは、警告なくアーカイブから消えます。

</div>

謳われている内容と、実際の動作をまとめます。

| 形式 | 対応状況 | 実際の動作 |
|----|----|----|
| Word、Excel、プレゼンテーション | はい | きれいに動作し、これが得意分野 |
| CSV、JSON、XML、HTML | はい | 動作するが、CSVには区切り文字の落とし穴がある |
| PDF | はい | レイアウトによる。1段組みは組み立てられるが、2段組みは崩れる |
| 画像 | 「メタデータと認識」 | 認識はできず、メタデータ取得か有料のビジョンモデルだけに対応 |
| 音声 | 「音声の書き起こし」 | Googleの英語用エンジンに送られる |
| ZIPアーカイブ | 「内容を順に処理」 | 解析できないファイルは警告なく消える |
| YouTubeのリンク | はい | `'<OFFICIAL_URL>'?...`形式の完全なリンクのみ |
| EPUB電子書籍 | はい | 動作する |

3項目を詳しく見ていきます。

画像。説明にはOCRという言葉があるため、写真からテキストを読み取れると思う人もいます。しかし、できません。別のプログラムであるexiftoolを使ってメタデータを読み取り、自分のキーでビジョンモデルを接続すれば、画像を送って説明を生成できます。

音声。音声の書き起こしには対応していますが、言語は渡されず、エンジンは既定で英語を想定します。また、Googleの非公式な無料エンドポイントを呼び出しますが、キーごとに1日約50件のリクエストに制限されています。

アーカイブ。プログラムはZIPファイルを解凍して中のファイルを順に処理し、結果を連結します。ファイルを解析できない場合、エラーは捕捉されて抑制されます。そのファイルは結果に現れず、処理されたかどうかも分かりません。

## キリル文字を含む文書ではどうなるのか？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重要なポイント">

重要なポイント

キリル文字を含む3つのファイル、Wordの契約書、Excelの在庫表、プレゼンテーションを最新版で処理しました。3つともキリル文字と数字はそのまま残りました。問題が起きるのは3か所です。セミコロンを使うCSV、Excelセルの通貨書式、Windowsコンソールへの出力です。いずれも回避策があります。

</div>

以下のファイルはテスト専用に作成したもので、データは架空です。



Excelの在庫表も同じようにきれいに変換され、シート名は見出しになりました。

```markdown
## Stock
| Item | In stock | Reserved | Available |
| --- | --- | --- | --- |
| Coffee beans, kg | 420 | 38 | 382 |
| Loose-leaf tea, kg | 180 | 52 | 128 |
```

プレゼンテーションはテキストになり、スライド番号は注釈、スライドタイトルは見出しとして表示されました。ここでもキリル文字はそのまま残っています。「MarkItDownはキリル文字を理解しない」という一括りの主張は誤りです。

では、問題が起きる3つの箇所を見ていきます。

セミコロン区切りのCSV。同じ請求書のエクスポートを2つ用意し、比較しました。カンマ区切りの方は4列の適切な表になりました。セミコロン区切りでは、行全体が1つのセルに入ります。

行全体が1つのセルに入ってしまいました。エンコーディングは正しく認識され、エラーもありませんでした。`-c`フラグも役に立ちません。モデルにはこの表が渡されても、どの値が金額でどれがステータスなのか分かりません。原本を残し、区切りをカンマ、文字コードを正しく指定して再出力してください。引用符内の区切り記号や小数のカンマは値の一部になりうるため、一括置換はしません。再出力できない場合は、実際の区切りで元ファイルを解析し、値と引用符を保つCSV対応ライターで別ファイルへ書きます。分析前に列数、行数、検算用合計を元のエクスポートと比較してください。

Excelの通貨書式。通貨記号はセルの表示設定に保存され、値そのものには入りません。プロジェクトのメンテナーが原因を確認しています。価格表や請求書では重要です。モデルは、どの通貨なのか分からないまま数字を見ることになります。

Windowsコンソール。非ラテン文字を含むファイルでは、プログラムがクラッシュすることがあります。

エラートレースには`cp1251`エンコーディングとあり、Windowsコンソールの問題だと分かります。文書自体は正しく解析されており、結果をターミナルウィンドウに表示するときに失敗します。回避策は2つあります。

```powershell
markitdown dogovor.docx -o dogovor.md
$env:PYTHONUTF8 = "1"; markitdown dogovor.docx > dogovor.md
```

1つ目はコンソールを完全に迂回し、2つ目はPythonにUTF-8で書き込ませます。ツール自体でこの問題を修正する変更は少なくとも6回提出されましたが、マージされずに終了した提案もあり、残りは未解決です。そのため、回避策を使う必要があります。

PDFでは、文字の代わりに`(cid:1090)`のような並びが現れるという4つ目の症状があります。これは標準外のフォントテーブルがあり、文字をデコードできなかったことを意味します。そのような文書をMarkItDownで処理しても意味はありません。別のツールが必要です。

## PDFが混乱した状態になるのはなぜか？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重要なポイント">

重要なポイント

PDFには構造がなく、ページ上の座標を伴う文字しかありません。1段組みのテキストはそこそこ適切に組み立てられます。2段組みは混乱した状態になります。段をまたいで行がつながり、単語が続けて連結され、文書に存在しない表がレイアウトの代わりに作られます。MarkItDownはPDF内の見出しをまったく認識しません。ソースコードと独立した測定結果の両方が、そのことを示しています。

</div>

テストでは、サイズ2.16メガバイトの2段組み科学論文を処理しました。終了コードは0で、0.9秒後には88,000文字の出力がありましたが、ほとんどがでたらめでした。88,000文字あると、すべてうまくいったように見えます。ファイルを開くまでは。

```
|     | Hybrid |          | OCR-LLM     |     | Framework  |
| --- | ------ | -------- | ----------- | --- | ---------- |
...
Informationextractionfromcopy-heavydoc-
5202 tcO 11  ]LC.sc[  1v83101.0152:viXra
```

一度に3つの問題が起きています。2段組みのレイアウトが、論文にない表になりました。単語は空白なしで連結されています。最後の行は、ページ上の縦書きサイドバーを逆向きに抽出したものです。

さらに奇妙なことがありました。テスト対象の論文は、MarkItDownを測定し、他のツールと比較した研究そのものだったのです。ツールは自分自身の測定結果を報告する段落を、次のように変換しました。

```
cues. This name-matching error could be miti-  OCRpreprocessingoverhead(0.056s),whileDo-
gatedthroughpromptengineeringtoprovidemore  clingandMinerUadoptmorecomputationallyin-
explicit matching instructions or fine-tuning the  tensive strategies with OCR latencies of approxi-
```

左右の段が行ごとにつながっています。これを渡されたモデルは、ある段落の前半と別の段落の後半を読んでしまいます。

原因は技術的ですが単純です。Wordには「これは見出し」「これは表のセル」と明示的に保存されています。PDFに保存されているのは「これは文字」「ページ上のこの座標にある」という情報だけです。座標から構造を再構成するのは、別の難しい作業です。MarkItDownはほとんど試みません。PDF解析のソースコードには見出しの検出がありません。ページがフォームや表として認識されなければ、文書全体が基本的なテキスト抽出に回されます。

この問題は、科学論文や表を含め、プロジェクトのリポジトリでたびたび報告されています。

ソースコードに示されているとおり、ツールはPDFの見出しを1つも検出しません。

「MarkItDownの精度は82%」という数字が、評価方法の説明なしにネット上で広まっています。出典をたどっても、元の情報には行き着きません。リンクをたどった先のページは読み込めません。この数字を測定結果として扱うことはできません。

## スキャンした契約書はどうなるのか？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重要なポイント">

重要なポイント

何も起こりません。ファイルは処理され、プログラムは成功を報告しますが、出力の文字数は0です。エラーも警告もありません。画像から作ったPDFで2回テストし、画像そのものも別に処理しましたが、結果は同じでした。このツールが抽出するのは、ファイル内にすでにテキストとして保存されている文字だけです。無料版に文字認識機能はありません。

</div>

この挙動は、失敗に見えないという点で、ほかの問題より危険です。

テストでは、契約書を撮影またはスキャンしたときと同じ状態を再現するため、文字を含む画像からPDFを作成しました。偶然ではないことを確かめるため、実行を繰り返しました。

| 入力 | 終了コード | 出力の文字数 | エラーメッセージ |
|----|----|----|----|
| 画像から作成したPDF、1回目 | 0 | 0 | なし |
| 画像から作成したPDF、2回目 | 0 | 0 | なし |
| PNG画像を直接入力 | 0 | 1（改行） | なし |

2回続けて、文字数もエラーも0でした。終了コード0は「すべて正常に完了した」という意味です。終了コードで成功を判定するスクリプトは、この文書も処理済みとして数えます。その後、空の出力がモデルに渡され、モデルは何も見えないまま、根拠のない回答を作り始めます。

<div class="aside" data-semantic="callout" role="note" aria-label="注意">

注意

文書を一括処理する場合は、出力の長さを確認してください。終了コードからは何も分かりません。スキャン画像は、終了コードが0で中身が空のファイルとして処理されます。

</div>

回避策は2つあり、どちらも有料です。1つ目は`-d`フラグで、文書をMicrosoftのクラウド文字認識サービスに送ります。このフラグのヘルプにも、有効なサービスエンドポイントが必要だと明記されています。2つ目は、ページを自分のキーでビジョンモデルに送る別のアドオンパッケージです。ページごとにモデル提供元へ料金を支払います。2026年4月以降、この2つ目の方法についての公開ディスカッションでは、複数ページのスキャンでも最初のページしか処理されないと報告されています。

自分のマシン上で文字認識モデルを動かすこともできますが、それは別のプロジェクトです。

文書が1件だけなら、開いて手作業でテキストをコピーするほうが簡単です。スキャンを連続して処理するなら、文字認識機能が組み込まれたツールが必要です。

## ファイルをオンラインコンバーターにアップロードすればよいのか？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重要なポイント">

重要なポイント

技術的には可能で、同じ名前を使ったドメインはたくさんあります。しかし、Microsoftと提携しているものはありません。「ファイルがブラウザーの外に出ることはありません」という主張は、クリック1回で確認でき、必ずしも正しいとは限りません。契約書や個人名が含まれるエクスポートをアップロードする前に、ファイルの送信先を自分で確かめてください。

</div>

「MarkItDown online」は、よく検索候補に出てくる語句で、実際にサービスを提供するサイトもあります。しかしMicrosoftの本家ツールにはウェブサイトがありません。自分でインストールするプログラムとしてのみ提供されています。似た名前でブラウザーから開くものは、すべて他者が作ったものです。

そのようなサービスは1分で確認できます。開発者ツールのネットワークリクエストタブを開き、無害なファイルをアップロードして、サーバーに送られるかを確認します。サーバーに送られているなら、FAQでどれほど自信ありげに説明されていても、ブラウザー内で処理するという主張は誤りです。

<div class="aside" data-semantic="callout" role="note" aria-label="注意">

注意

契約書、請求書、従業員名が含まれるエクスポートには個人データが含まれています。そのようなファイルを第三者のウェブサイトに送るのは、あなた自身です。ローカルユーティリティならファイルが自分のマシンから出ないため、この問題を避けられます。

</div>

そのため、組織外に文書を送れない環境でMarkItDownが重宝されます。あるディスカッションでは、仕事用のノートパソコンで任意のプログラムは禁止されているものの、Pythonライブラリは許可されており、ローカルユーティリティが唯一使える選択肢だったという状況が紹介されています。

## MarkItDownで実際にどれくらい節約できるのか？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重要なポイント">

重要なポイント

主な利点は、モデルが文書そのものを理解できることです。サイズにも違いがあります。Officeファイル内のマークアップ部分と抽出されたテキストのサイズを比べると、5倍から7倍ほど小さくなります。また、フォント、余白、セルの色の説明など、モデルが読む必要のない情報も取り除かれます。

</div>

Officeファイルは、マークアップを含むアーカイブとして構成されています。3つのテストファイルを解凍して、内容が入った部分のサイズと出力のサイズを比較すると、次のようになります。

| ファイル | 内部のマークアップ | 抽出されたテキスト | 縮小率 |
|-----------------|-----------------|---------------|-----------------------|
| Wordの契約書 | 3,701バイト | 711バイト | 5.2 |
| Excelのスプレッドシート | 1,561バイト | 262バイト | 6.0 |
| プレゼンテーション | 2,203バイト | 296バイト | 7.4 |

ファイルは小さく、大きなファイルでは比率が異なります。節約量を一律に示す数値はありません。比較記事で丸めた数字を見かけたら、測定方法を確認してください。

開発者自身も節約について述べています。プロジェクトの説明には、Markdownの表記法は文字数の面で非常に経済的だとあります。それは事実ですが、主な売りにすべきではありません。「モデルに15,000文字ではなく3,000文字を渡せる」という違いと、「ごちゃ混ぜではなく明確な構造を渡せる」という違いは、まったく次元が異なります。前者は費用を節約し、後者は回答が筋の通ったものになるかを左右します。

コンテキストの使用量が気になる方には、[Claudeではトークンがどこへ行くのか](https://ailoot.ai/blog/ja/where-claude-code-tokens-go/)と[各プランに何個含まれるのか](https://ailoot.ai/blog/ja/claude-pro-max-usage-limits/)を別の記事で説明しています。

## Claude Code MCP 設定：MarkItDownを接続するには？ {#mcp経由でmarkitdownをclaudeに接続するには}

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重要なポイント">

重要なポイント

このプロジェクトには、MCPサーバーをコマンド1つで実行する別パッケージがあります。ファイルパスを指定すれば、テキストが返ってきます。2026年9月、パッケージはようやく0.0.1a7に更新されましたが、ビルドはまだプレリリースで、既定ではMicrosoftにテレメトリーを送信します。以下のコマンドはバージョンを固定し、Python 3.12を使い、テレメトリーを無効にしてuv経由で接続します。認証機能はなく、公式ドキュメントによると、サーバーを起動したユーザーがアクセスできるファイルなら何でも読み取れます。

</div>

MCPは、AI自身が使える外部ツールを提供する仕組みです。この仕組みとほかのサーバーの概要は、[Claude Code向けMCPサーバーのレビュー](https://ailoot.ai/blog/ja/mcp-servers-claude-code/)をご覧ください。

MarkItDownサーバーが公開するツールは1つだけで、文書をテキストに変換します。ローカルファイルのパス、ページURL、リクエストに直接埋め込まれたデータを受け付けます。

バージョンを固定したサーバーには、コマンド1つでClaude Codeから接続できます。uvパッケージマネージャーが必要です。

```bash
claude mcp add --scope user --env 'ORT_DISABLE_TELEMETRY=1' --env 'UV_PYTHON=3.12' --transport stdio markitdown -- uvx markitdown-mcp@0.0.1a7
claude mcp list
```

2つ目のコマンドの応答で、`markitdown`が「Connected」と表示されるはずです。初回起動では約70個のパッケージがダウンロードされ、最大で1分かかります。それ以降は1〜1.5秒でサーバーが起動します。

手作業で確認した注意点を紹介します。

ビルド`0.0.1a7`は2026年9月14日に公開されました。それまでは2025年5月の`0.0.1a4`から1年以上更新されていませんでした。最新バージョンもまだプレリリースです。

Pythonの新しいバージョンを使うすべてのシステムにインストールできるわけではありません。依存するonnxruntimeエンジンは、Python 3.14の場合、macOS 14以降を使うApple Silicon搭載Macでしか利用できません。そのためPython 3.14では、Intel MacやmacOS 13以前のシステムでインストールに失敗します。Apple Silicon MacではPython 3.14、3.13、3.12でサーバーを実行し、3つすべてでインストールできました。コマンドで`UV_PYTHON=3.12`を使うのは、3.12向けのビルド済みパッケージがWindows、Linux、Apple Silicon搭載Macで利用でき、Python 3.12がなければuvがダウンロードするためです。ここにもIntel Mac向けの注意点があります。uvは2026年6月以降Intel向けのビルド済みパッケージがないため、cryptographyライブラリをソースからビルドします。インストールに時間がかかり、失敗することもあります。

インストールされるMarkItDownのバージョンは、uvのバージョンによって異なります。MarkItDown 0.1.6以降では、`[all]`オプションがプレリリースのAzureライブラリを要求します。uv 0.12以降はそのライブラリと最新版のMarkItDown 0.1.8をインストールしますが、それより古いuvでは0.1.5にダウングレードされます。`uv --version`でuvのバージョンを確認してください。

マシン外に送信されるものは2つあります。1つ目はテレメトリーです。MacとLinuxでは、サーバー内部のonnxruntimeエンジンが既定でMicrosoftに送信します。コマンド内の`ORT_DISABLE_TELEMETRY=1`変数で無効化できます。テストでは、この変数を付けないとサーバーはMicrosoftのテレメトリー用エンドポイントに接続しました。変数を設定すると、ディスク上のファイルを処理している間、接続はまったくありませんでした。

2つ目は音声です。サーバーはWAV、MP3、M4A、MP4ファイルを暗号化なしの通常のHTTP経由でGoogleの音声認識サービスに送り、書き起こしを行います。顧客との会話を録音したファイルは送らないほうがよいでしょう。

大きな文書は処理できません。公開中のディスカッションでは、サーバーの応答が51,000トークンになり、25,000トークンの上限に達した事例が説明されています。ツールにはファイルを分割する機能がありません。

そしてセキュリティです。パッケージの公式ドキュメントには、次のようにはっきり記載されています。

<figure>
<blockquote>
<p>サーバーは認証に対応しておらず、起動したユーザーの権限で動作します。変換ツールを使うと、サーバーユーザーがアクセスできるファイルやネットワーク上のデータを読み取ることができます。</p>
</blockquote>
<figcaption>— Microsoft、markitdown-mcpパッケージの説明（翻訳）、https://github.com/microsoft/markitdown/tree/main/packages/markitdown-mcp</figcaption>
</figure>

つまり、このツールを持つエージェントは、あなたが読めるものなら何でも読めます。自分のマシンで使う分には問題ありません。サーバーを公開したり、信頼できないエージェントに渡したりしてはいけません。

<div class="aside" data-semantic="callout" role="note" aria-label="注意">

注意

プロジェクトのドキュメントには、Claude Code専用の設定例がありません。説明されているのはClaude Desktopとコンテナ経由の起動だけです。Claude Code向けの設定を「公式ドキュメントに基づく」としてオンラインで見つけても、そのような設定はリポジトリに存在しないことに注意してください。

</div>

通常の作業なら、プログラムをコマンドで実行し、結果のテキストをプロジェクトに置くほうが簡単です。そうすればファイルはほかの資料と一緒に保存され、モデルが自分で参照できるようになります。

## 別のツールを使うほうが適切なのはいつか？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重要なポイント">

重要なポイント

基準は単純です。構造がすでにファイル内に記録されているなら、最速で無料のMarkItDownを使います。ページ画像から構造を再構成する必要があるなら、レイアウトモデルを備えたツールを使います。Doclingは表と複雑なレイアウトを扱い、MinerUは数式と複数段組みに対応します。手間をかける時間がなければ、有料のクラウドサービスが役立ちます。

</div>

GitHubのスター数とは関係なく、タスク別に比較します。

| ツール | 強み | コスト・制約 |
|----|----|----|
| MarkItDown | Officeファイル、速度、無料 | 複雑なPDFやスキャンは扱えない |
| Docling | 専用モデルによる表とレイアウトの処理 | 文書1件に数十秒 |
| MinerU | 複数段組み、数式、密度の高い表 | インストールがより難しい |
| Marker | 高精度、数式、図表 | グラフィックカードが必要で、ライセンスに収益上の制限がある |
| unstructured | 文書の構造を説明付きのチャンクで返す | 出力を使いにくい |
| クラウドパーサー | セットアップ不要 | 費用がかかり、文書をマシン外に送る |

比較記事が省いているMarkerについての補足があります。2026年7月以降、コード自体は寛容なライセンスで公開されていますが、モデルの重みには別のライセンスが適用され、基準額が設けられています。前年の売上と調達額がどちらも500万ドルを超えていない企業は、無料で利用できます。また、競合製品を開発する人による利用を禁じる条項もあります。ほとんどの読者には関係ありませんが、成長中の事業者が導入前にライセンスを確認すべき理由になります。

実務では、次の4段階で進められます。

1. すべてをMarkItDownにかけます。無料で、すぐに終わります。
2. 結果を開いて、サイズを確認します。
3. テキストが理解できるなら、それで完了です。他に必要なことはありません。
4. 出力が乱れているか空なら、そのファイルだけを高負荷なツールで処理します。

この方法なら、時間と手間をかけるのは、それが必要な文書だけです。

## MarkItDownを自分のワークフローに組み込むには？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重要なポイント">

重要なポイント

Anthropic自身がスキルの説明でルールを示しています。このツールは文書を読むために使い、編集を計画するためには使わないでください。最初の実行から効果が出る3つの場面を紹介します。似た文書をまとめて解析するとき、参照資料をAIプロジェクトに一度追加するとき、会計システムのエクスポートを分析用に準備するときです。

</div>

AnthropicはOfficeファイルを扱う自社の既製スキルでMarkItDownを使っており、そのスキルでは、採用すべき境界を明確に示しています。

<figure>
<blockquote>
<p>シートをすばやく確認するには、markitdown file.xlsxを実行します。セル座標は取得できないため、これをもとに編集を計画しないでください。</p>
</blockquote>
<figcaption>— Anthropic、表を扱うためのスキルの説明（翻訳）、https://github.com/anthropics/skills/blob/main/skills/xlsx/SKILL.md</figcaption>
</figure>

セルやページの参照情報はテキストから失われるため、これを使って元ファイルを変更することはできません。活用例を3つ紹介します。

議事録、請求書、フォーム、申請書など、似た文書をまとめて処理する場合は、フォルダーに入れて1行で実行します。

```bash
for f in dokumenty/*.docx; do markitdown "$f" -o "text/$(basename "$f" .docx).md"; done
```

次に、テキストファイルのフォルダーをモデルに渡して、必要な情報を表にまとめるよう頼みます。デジタルファイルなら動作しますが、スキャンは失敗します。ファイルサイズが0なので、すぐに気づけます。

料金表、契約書のひな形、社内規定、サービス説明など、プロジェクトで継続して使う資料は、一度テキストに変換してプロジェクトと一緒に置いておきます。モデルはリクエストのたびにそれを読めるため、毎回会話にファイルを添付する必要がありません。[Claudeへのファイルのアップロード](https://ailoot.ai/blog/ja/claude-file-upload/)の記事では、これとチャットへのファイル添付の違いを説明しています。

会計システムからエクスポートしたファイル。会計ソフトや銀行口座からExcel形式で出力すると、3分の1秒で表になり、モデルは余計な手作業を挟まず計算できます。CSVの実際の区切り、引用符、文字コードで出力・解析したかを確認し、モデルへ渡す前に行数、列数、検算用合計を照合します。検索置換で区切りをそろえないでください。また、Excelの表示書式だけにある通貨記号は抽出後に残らないため、通貨を明記してください。

大きなPDFをターミナルで処理する方法は、ここでは扱いません。これはコンテキストの使用量に関わる別の問題で、[トークンを失わずにClaude CodeでPDFを扱う方法](https://ailoot.ai/blog/ja/pdf-claude-code-markdown/)の記事で説明しています。作業環境を整えるところなら、[Claude Codeのインストール](https://ailoot.ai/blog/ja/install-claude-code/)から始めてください。

すぐに試すには、`pip install 'markitdown[pdf,docx,xlsx,pptx]'`を実行し、最初に見つけたWordの契約書を処理して、結果のサイズを確認してください。30秒もあれば、自分のファイルで動くか分かります。

<div class="section">

### よくある質問

MarkItDownは無料ですか？

はい。MITライセンスで、商用利用の制限はありません。有料なのは、`-d`フラグによるMicrosoftのクラウド文字認識と、自分のキーを使ったビジョンモデルによる画像の説明という、2つのオプションだけです。それ以外はすべて自分のマシン上で無料で動作します。

データはサーバーに送信されますか？

OfficeファイルやPDFを通常どおり変換する場合は、送信されません。すべてローカルで処理されます。例外は3つです。音声の書き起こしはGoogleのサービスを経由し、`-d`フラグを使うと文書がMicrosoftのクラウドに送られ、画像の説明は自分のキーを使ってモデルに送られます。これらの方法が自動で有効になることはありません。

インストール後にmarkitdownコマンドが見つからないのはなぜですか？

多くの場合、検索パスに含まれない環境へプログラムがインストールされています。その環境内のファイルのフルパスを確認してください。Pythonのあるバージョン向けにインストールしたのに、別のバージョンで呼び出しているケースもよくあります。もう1つの落とし穴は、Python 3.10未満ではインストールエラーなしで空のパッケージがインストールされることです。

文字の代わりに`(cid:1090)`などが表示されたら、どうすればよいですか？

PDF内のフォントテーブルをデコードできていません。設定を変えても直らないため、DoclingやMinerUなどの別のツールで処理する必要があります。文書が1件だけなら、ビューアーから手作業でテキストをコピーするほうが速いでしょう。

フォルダー内のファイルをまとめて処理できますか？

専用のフォルダーモードはありませんが、1行のターミナルループで実行できます。for f in papka/\*.docx; do markitdown "\$f" -o "\$f.md"; done。または、すべてZIPに入れてアーカイブを渡す方法もあります。内容は処理されますが、解析できないファイルは警告なく消えます。

手作業でテキストをコピーする場合と、出力はどう違いますか？

構造が保たれます。コピーしただけでは、見出しと段落の区別がつかない平坦なテキストになり、表も崩れます。MarkItDownは見出し、リスト、表を保つため、モデルが内容を区別できます。短い文書1件なら違いは小さいものの、20件では決定的です。

MarkItDownはパスワード保護された文書を開けますか？

いいえ。パスワード保護されたファイルは開けず、プログラムにパスワードを渡す方法もありません。保護を設定したアプリケーションで、あらかじめ保護を解除する必要があります。

</div>

<div class="section" role="doc-bibliography" aria-label="出典">

### 出典

- [MarkItDown - GitHubのプロジェクトリポジトリ](https://github.com/microsoft/markitdown)
- [PyPIのMarkItDown - バージョンとリリース日](https://pypi.org/project/markitdown/)
- [markitdown-mcp - MCPサーバーの説明](https://github.com/microsoft/markitdown/tree/main/packages/markitdown-mcp)
- [Anthropic Skills - 表でのMarkItDownの使い方](https://github.com/anthropics/skills/blob/main/skills/xlsx/SKILL.md)
- [Docling - レイアウトモデルによる文書解析](https://docling-project.github.io/docling/)
- [MinerU - 複雑なPDFレイアウトの解析](https://github.com/opendatalab/MinerU)
- [Marker - モデルの重みに関するライセンス](https://github.com/datalab-to/marker/blob/master/MODEL_LICENSE)
- [pandoc - マークアップコンバーター](https://pandoc.org/)

</div>





準備ができたら、[Ailoot](https://ailoot.ai/)をご覧ください。

## AI向けにPDFやWordファイルをテキストに変換する方法：MicrosoftのMarkItDown：よくある質問

### セミコロン区切りのCSVは、すべてカンマに置き換えて直せますか？

いいえ。引用符内の文章や小数表記にも、それらの文字が含まれます。意図した区切りで再出力するか、区切り、文字コード、引用符の扱いを指定したCSVパーサーとライターを使い、列数、行数、検算用合計を元データと照合してください。

### 終了コードが0なら、PDFを有用な形で変換できていますか？

いいえ。記事のスキャン例はエラーなしで空になり、複雑なPDFでは読めない文章が出ました。結果を開き、長さと構造を確認してください。空や文字化けなら、レイアウトや文字認識に対応するツールを使います。


## Ailoot · 企業とそのプロジェクト群

Ailootは、蓄積した運営経験、幅広い顧客基盤、安定したサービス、継続的なKPI管理を基盤としています。

企業とそのプロジェクト群：数百万の顧客、毎月数十億規模の売上。

Ailootはこの運営経験を、お客様の製品、エージェント、アプリケーション、自動化でAI機能を利用するためのAPIアクセスに活かしています。
