MarkItDownをコマンドラインで試してみる

# MarkItDownとは 
Microsoft社が提供している、[様々なファイル形式をMarkdownファイルに変換するライブラリ](https://github.com/microsoft/markitdown/tree/main)のこと。対応しているファイル形式は以下の通り。
 - PDF
 - PowerPoint
 - Word
 - Excel
 - Images (EXIF metadata and OCR)
 - Audio (EXIF metadata and speech transcription)
 - HTML
 - Text-based formats (CSV, JSON, XML)
 - ZIP files (iterates over contents)

引用元： Github [https://github.com/microsoft/markitdown/tree/main](https://github.com/microsoft/markitdown/tree/main)

今回はソースコードをローカル環境にダウンロードし、Docker環境を経由して実際にいくつかのファイルをMarkdown形式に変換することを試してみる。

# 環境
 - Windows 11

# 前提
 - Dockerインストール済
 - Gitインストール済
 - Python実行環境インストール済


# 手順
## ソースコードをCloneする
```
git pull https://github.com/microsoft/markitdown.git
```

## Dockerイメージをビルド
```
docker build -t markitdown:latest .
```

# 実際に色んなファイルをMarkdownに変換してみる
準備ができたので以下のコマンドで色々変換を試してみる。
幸いソースにテスト用ファイルがいくつか格納されているので、それらを使用して実際に変換を試してみる
```
docker run --rm -i markitdown:latest < 変換対象のファイルパス > 出力先のファイルパス
```

## Wordファイル(.docx) → Markdown(.md)
### 変換前

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631355/80fa518f-1785-1bd1-e925-96d3f4133430.png)

### 変換後  
画面左：出力されたmarkdownファイル原文　画面右：markdownプレビュー  

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631355/3d914458-688c-c6bd-a685-6d807d343927.png)



タイトルの文字の大きさが反映されていないが、本文の構造はしっかりと反映されている。

## PowerPointファイル(.pptx) → Markdown(.md)
### 変換前  

| スライド 1       | スライド 2       | スライド 3       | スライド 4       |
|---------------|---------------|---------------|---------------|
| ![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631355/10f922a6-dc7c-fb85-ecc6-7a76a09d5b17.png)| ![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631355/215196ad-902e-f490-9f84-acba910e682c.png)| ![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631355/55a16e8a-a02a-e4e1-b3df-7b3d7fd73f08.png)| ![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631355/7d939a89-73c0-8663-c95f-eaa028527aff.png)|

### 変換後  
画面左：出力されたmarkdownファイル原文　画面右：markdownプレビュー  

![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631355/a34af6d6-39b6-41ea-ad2c-98f7e04edf6f.png) 

スライド毎に```<!-- Slide number: 1 -->```というコメントに区切られて出力され、棒グラフは表に変換される。スライド２に埋め込まれている画像はMarkdownには反映されない。

## Excelファイル(.xlsx) → Markdown(.md)  

### 変換前

| シート 1       | シート 2       |
|---------------|---------------|
| ![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631355/1bf46b31-1d69-a6be-de28-e9f7b2417923.png)| ![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631355/35cb23b2-bbd5-7a32-a19d-8c6c3f7eb56e.png)|  

### 変換後  
画面左：出力されたmarkdownファイル原文　画面右：markdownプレビュー 

![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631355/082ac0a8-f682-948e-093e-09a7c6f39281.png)  

シート毎に```## シート名```というコメントに区切られて出力される。 

## HTMLファイル(.html) → Markdown(.md)

### 変換前  

![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631355/dbb29043-4402-7d5a-e5e5-f78dcc2f8fba.png)

### 変換後 

![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631355/1c18d292-b50b-d7fb-90c7-0347d25c3a21.png)

# まとめ
今回はMicrosoft社が提供するMarkItDownを使用し、Wordファイル・PowerPointファイル・Excelファイル・HTMLファイルをマークダウンファイルに変換した。正直複雑に作りこんだMSオフィスのファイルをマークダウンに変換することはまだまだ難しいと思うが、簡易的なメモ程度ものや、HTMLファイルを変換する際には多少便利になるかと思われる。

# 関連記事
今回はコマンドライン上でMakeItDownを使用したが、ソースコード上でモジュールとして読み込んで使用する内容の記事がいくつか作成されているので、アプリに組み込みたい等の場合は以下記事を参照することをお薦めする。 

- [多様な形式のファイルを Markdown に変換できるMicrosoft 提供の MarkItDown を試してみた](https://qiita.com/manabian/items/9713f6e226cd83d06ac4)
- [MarkItDownでひたすらいろんなファイルをmarkdownにしてみた](https://qiita.com/ninomiyt/items/f9451f5384f9fd7e969b)
- [MarkItDown を使ってみよう](https://qiita.com/pokurin123/items/ef368fca29801afbd889)