Markdown to Word について
Markdown to Wordは、GitHub Flavored Markdownを書式付きWord文書に変換します。ブラウザー、Node.js、コマンドライン、MCPサーバーから利用でき、中国の公文書向けスタイルも備えています。
主な機能
- 01見出し、リスト、表などのMarkdown変換
- 02DOCX出力または書式付きテキストのコピー
- 03中国公文書向けフォントとページ設定
- 04ブラウザー、Node.js、コマンドラインで変換
活用シーン
- 01AIチャットの回答をWord文書にする
- 02MarkdownのレポートをDOCXに変換
- 03Markdownを中国公文書形式に整える
MCP 対応
stdioのMCPサーバーは`convert_markdown_to_word`ツールを提供し、Markdown文字列またはファイルを受け取ってローカルにDOCXを書き出します。リモート画像はダウンロードしません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
1掲載時のツール一覧 · 1 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| path | string | いいえ | markdown の代わりに変換する Markdown ファイル(.md、.markdown、.mdown、.txt)のパスです。相対パスはサーバーの作業ディレクトリを基準とするため、絶対パスを推奨します。 |
| markdown | string | いいえ | 変換する Markdown です。path を渡す場合は省略してください。 |
| overwrite | boolean | いいえ | output_path がすでに存在する場合は置き換えます。デフォルトでは無効のため、既存ファイルを誤って上書きすることはありません。 |
| font_preset | enum | いいえ | ドキュメントのスタイルを変更します。chinese-official は GB/T 9704-2012 に準拠した中国公文書のフォント、サイズ、ページレイアウトを設定します。省略すると Word のデフォルトスタイルが使用されます。chinese-official |
| output_path | string | はい | .docx の書き込み先です。.docx で終わる必要があります。絶対パスを推奨します。不足しているフォルダーは作成されます。シンボリックリンク経由では書き込まれません。 |
詳細
Markdown から Word へ
GitHub Flavored Markdown を、ブラウザー上だけで書式付きの Word(.docx)ドキュメントに変換できます。md2word.app からご利用ください。データがアップロードされることはありません。
同じコンバーターは npm の markdown-to-word としても公開されています。AI エージェント向けのコマンドラインツール、Node ライブラリ、MCP サーバーとして利用でき、クローンは不要です。
npx markdown-to-word input.md
これは word2md.com(word-to-markdown-js)の逆の機能です。また、2015 年に初公開され、現在はアーカイブされている、Ruby gem としての元祖およびウェブデモ markdown_to_word の後継です。
使い方
- md2word.app にアクセスします。
.mdファイルをページ上のどこかにドロップするか、ファイルを選択するか、Markdown を貼り付けます。AI チャットの応答(ChatGPT、Claude など)は Markdown なので、そのまま貼り付けられます。- ファイルをドロップすると、すぐに変換されます。テキストを貼り付けた場合は、Word に変換をクリックするか、Ctrl/⌘+Enter を押します。
- .docx をダウンロードをクリックするか、書式付きテキストをコピーして、書式を保ったまま Word または Google Docs に直接貼り付けます。
ドキュメントの名前には最初の見出しが使われ、その見出しがタイトルにもなります。
変換される内容
| Markdown | Word における表示 |
|---|---|
# から ###### までの見出し | 見出し 1~6 のスタイル |
**太字**、*斜体*、~~取り消し線~~ | 同じ書式 |
| 箇条書きと番号付きリスト、入れ子のリスト | Word のリスト |
- [x] のタスクリスト | ☒(完了)および ☐(未完了)の項目。Word では HTML のチェックボックスを表示できないためです |
| 表 | 細い罫線、各ページで繰り返される太字のヘッダー行、および Markdown の列配置 |
[リンク](https://example.com) | クリック可能なハイパーリンク |
`インラインコード`とフェンス付きコードブロック | 等幅フォント。コードブロックでは改行が保持されます |
> 引用ブロック | 左揃えの段落。入れ子のレベルごとに 1 段階ずつインデントされます |
--- の水平線 | ページを横切る線 |
[^1] の脚注 | 上付きの番号。文書末尾の線の後に、注記が番号付きリストとして配置されます(Word の脚注ではありません) |
 | ブラウザーで取得できる場合は埋め込み。それ以外の場合は画像にリンクされた代替テキストが表示されます(制限事項を参照) |
<kbd>、<mark>、<abbr>などのインライン HTML | テキストが表示されます。<kbd>はコード用フォントで、<mark>はハイライト表示されます |
GitHub と同様に、段落内の単一の改行は同じ行に結合されるため、ハードラップされたファイルは通常の段落に変換されます。改行を強制するには、行末に半角スペースを 2 つ、またはバックスラッシュを付けてください。
オプションのフォントプリセット
変換では、デフォルトで Word の標準スタイルが使用されます。スタイルメニューから**中国の公文書(公文)**を選ぶと(中国語ページでは常に表示され、貼り付けたテキストの大半が中国語の場合は他のページにも表示されます)、生成される文書が GB/T 9704-2012 《党政机关公文格式》のレイアウトに書き換えられます。各レベルには、Times New Roman とともに、東アジア言語用の書体と公文書のサイズが設定されます。
| レベル | フォントサイズ | 漢字 | ラテン文字と数字 |
|---|---|---|---|
| 本文 | 三号 (16pt) | 仿宋 | Times New Roman |
| 見出し 1 | 二号 (22pt) | 方正小标宋简体 | Times New Roman |
| 見出し 2 | 三号 (16pt) | 黑体 | Times New Roman |
| 見出し 3 | 三号 (16pt) | 楷体 | Times New Roman |
| 見出し 4 | 三号 (16pt) | 仿宋 (太字) | Times New Roman |
| 見出し 5~6 | 三号 (16pt) | 仿宋 | Times New Roman |
このプリセットでは、ページも次のように設定されます。
- 用紙と余白(5.1、5.2.1): A4。37mm の上余白(天头)と 28mm の左余白(订口)を設定し、156 × 225mm の本文領域(版心)を確保します。
- 28文字×22行(5.2.3): Word の文書グリッド(文档网格)を設定し、グリッド幅に合わせた正確な行間隔(28.95pt)を指定します。孤立行の制御(孤行控制)はオフなので、行が次のページに送られて21行になることはありません。
- インデント(7.3.3): 段落とタイトル下の見出しは、2文字分(首行缩进 2 字符)字下げされます。表のセル、リスト項目、コードブロックには適用されません。
- タイトル(7.3.1): 見出し 1 は中央揃えになります。
- 間隔: すべてのレベルで、段落前後の間隔は0行(段前段后 0 行)です。
アプリはこの選択をこのブラウザーに記憶し、貼り付けたテキストの大半が中国語の場合に、このプリセットを提案します。
Word は文字の種類ごとに書体を適用するため、中国語の文中にある英単語や数字には Times New Roman が使用されます。文書を開くマシンには、これらのフォントがインストールされている必要があります。プリセットには、標準を超える設定もあります。
- 標準ではラテン文字用のフォントが指定されていません。ラテン文字と数字に Times New Roman を使うのは一般的な慣例です。
- 標準が指定しているのは小标宋体であり、方正小标宋简体に限定されていません。方正小标宋简体は商用の Founder フォントで、ほとんどのマシンにはインストールされていないため、インストールされていない場合、Word はタイトルに別のフォントを代用します。
- 見出し 4(標準の第3レベル(1.))は太字ですが、標準では指定されていません。標準では通常、第3レベルと第4レベルに標準の仿宋を使います。ただし、実際の文書ではこのレベルを太字にするのが一般的です。見出し 5 と 6 は標準の書体のままとし、印刷された公文書と同様に、番号((1)と①)で目立たせます。
ページ番号(7.5)はまだ追加されていません。詳しくは #106 をご覧ください。赤い区切り線やその他の版头要素も追加されていません。これらを表現する方法は Markdown にはありません。
プログラムから設定する場合:
import {
convertMarkdownToWord,
CHINESE_OFFICIAL_DOC_FONTS,
} from 'markdown-to-word';
const blob = await convertMarkdownToWord(markdown, {
fontPreset: CHINESE_OFFICIAL_DOC_FONTS,
});
pageMargins も渡した場合、プリセットの余白よりも pageMargins が優先されます。行グリッドは、最終的に文書に適用される余白に合わせて調整されます。
プライバシー
変換はすべてブラウザー内で行われます。Markdown と Word 文書がデバイスの外に送信されることはありません。Markdown からリンクされた画像は、他の Web ページと同様、画像をホストするサイトから読み込まれます。md2word.app は Cookie を使用しない Cloudflare Web Analytics を利用し、変換回数を匿名で記録します(変換の成否と失敗理由、ページの言語、変換の開始方法。コンテンツ、ファイル名、サイズ、個人を特定する情報は記録しません)。ローカル版またはセルフホスト版では、いずれの情報も送信されません。プレビュー内の生 HTML はサニタイズされるため、共有されたファイルからスクリプトが実行されることはありません。プライバシーポリシーをご覧ください。
制限事項
- 画像が埋め込まれるのは、ブラウザーが取得できる場合に限られます。対象は
data:URI と、サーバーがクロスオリジンリクエストを許可しているウェブ URL(ほとんどの画像ホストや CDN が該当します)です。それ以外の画像は、ローカルファイルのパスを含め、代替テキストに置き換えられます。URL がある場合は、その画像の URL へのリンクになります。 - 脚注は、各ページの下部にある Word の脚注ではなく、ドキュメントの末尾に番号付きリストとして出力されます。
- 数式はリテラルテキストのままです。
$x^2$は数式ではなく、$x^2$として出力されます。 :tada:などの絵文字ショートコードは変換されません。絵文字そのものを貼り付けてください。- 同じドキュメント内の見出しへのリンク(
[see below](#usage))をクリックしても、Word では該当箇所に移動しません。 <details>セクションはフラット化され、概要と非表示のコンテンツの両方が通常の段落として表示されます。- Markdown 内の複雑な生の HTML は正しく変換されないことがあります。また、コメント、変更履歴、ページレイアウトなどの高度な Word 機能は生成されません。
- すべてブラウザー内で処理されるため、非常に大きなドキュメントでは時間がかかることがあります。ファイルの上限は 5 MB です。
- このサイトは、Chrome、Edge、Firefox、Safari の現行バージョンで動作します。エンドツーエンドテストは Chrome で実行されます。
コマンドライン
npx で直接実行します(公開されている最新バージョンをダウンロードして実行します)。
npx markdown-to-word report.md
または、グローバルにインストールして md2w コマンドを使用します。
npm install -g markdown-to-word
md2w report.md
入力ファイルと同じ場所に、同じ名前で .docx を書き込みます(report.md は report.docx になります)。既存のファイルがある場合は置き換え、書き込み先を stderr に出力します。Node 22.12 以降が必要です。ファイルが存在しないか空の場合は、メッセージを表示してステータス 1 で終了します。
標準入力から Markdown を読み込むには、ファイルとして - を指定するか、ファイルを指定せずに Markdown をパイプで渡します。この場合はファイル名がないため、-o が必須です。
cat reply.md | md2w -o reply.docx
md2w - -o - < report.md > report.docx
オプション:
-o, --output <file>:.docxを<file>に書き込みます。必要に応じてフォルダーを作成します。-o -を指定すると、標準出力に書き込みます。--font-preset <name>:フォントプリセットを使ってドキュメントのスタイルを変更します。chinese-officialは、Optional Font Presets で説明されている中国の公式文書(公文)スタイルです。-q, --quiet:エラー以外は stderr に何も出力しません。-V, --version:バージョンを表示します。
MCP サーバー
md2w mcp は、stdio 上でローカルのModel Context Protocolサーバーを起動します。これにより、AI エージェントはお使いのマシン上で Markdown を Word 文書に変換できます。ウェブサイトと同様に、データをアップロードすることはありません。サーバーはプロセス内で変換し、.docx をディスクに書き込みます。
Claude Desktop なら、ワンクリックで使えます。markdown-to-word.mcpb をダウンロードして、ダブルクリックしてください。Claude Desktop が拡張機能としてインストールします。Claude Desktop には Node が含まれているため、Node やターミナルは必要ありません。
Claude Code に追加するには、次のようにします。
claude mcp add markdown-to-word -- npx -y markdown-to-word mcp
または、JSON 設定を受け付ける任意の MCP クライアントに追加します。
{
"mcpServers": {
"markdown-to-word": {
"command": "npx",
"args": ["-y", "markdown-to-word", "mcp"]
}
}
}
ツールは convert_markdown_to_word の 1 つです。
markdownまたはpath(どちらか一方のみ):文字列としての Markdown、または Markdown ファイル(.md、.markdown、.mdown、.txt)のパスです。絶対パスを推奨します。相対パスはサーバーの作業ディレクトリを基準に解決されます。output_path(必須):.docxの書き込み先です。末尾は.docxでなければなりません。存在しないフォルダーは作成されます。overwrite:output_pathがすでに存在する場合に置き換えます。デフォルトでは無効です。そのため、ツールは既存ファイルの上書きを拒否し、その旨を伝えます。font_preset:公文スタイルにはchinese-officialを指定します。Word のデフォルトのスタイルを使う場合は省略します。
戻り値には output_path、ファイルサイズ(bytes)、および warnings(ダウンロードできなかったリモート画像や、適用をスキップせざるを得なかった .docx のパッチ)が含まれ、構造化コンテンツとしても返されます。
エージェントは、読み込んだ文書やウェブページに記載された指示に従うことがあります。そのため、このツールで実行できる操作には制限があります。Markdown ファイルのみを読み取り、.docx ファイルのみを書き込み、シンボリックリンク経由では書き込まず、指示がない限りファイルを置き換えません。また、リモート画像もダウンロードしません。文書内の URL はどこを指しているか分からず、お使いのネットワーク内を指している可能性もあるためです。これらの画像は文書内にリンクとして表示されます。画像を埋め込みたいエージェントは、自身で画像を取得し、Markdown に data: URI として記述できます。ご自身で実行する CLI にはこれらの制限がなく、ウェブサイトと同様にリモート画像を埋め込みます。
ブラウザーでは、md2word.app が同じ変換機能を WebMCP ツール convert_markdown_to_docx(markdown と、任意の filename および font_preset)として登録します。これは対応ブラウザーのエージェント向けです。貼り付けと同じようにタブ内で動作し、ページに結果を表示して、.docx を base64 で返します。ページはファイルのダウンロードも試みますが、ユーザーがクリックしていない場合、ブラウザーによってブロックされることがあります。
コードから使う
このコンバーターは markdown-to-word として npm でも提供されています。対象は Node 22.12 以降、およびバンドラー(Vite、webpack、esbuild)経由で使用するブラウザーです。
npm install markdown-to-word
convertMarkdownToWord は .docx を Blob として返します。
import { writeFile } from 'node:fs/promises';
import { convertMarkdownToWord } from 'markdown-to-word';
const blob = await convertMarkdownToWord('# Hello\n\nFrom **Markdown**.', {
pageMargins: { top: 1, right: 1, bottom: 1, left: 1 }, // inches
});
await writeFile('hello.docx', Buffer.from(await blob.arrayBuffer()));
ブラウザーでは、URL.createObjectURL(blob) を使って Blob をダウンロードリンクに渡します。
このコンバーターには、DOM の DOMParser と XMLSerializer が必要です。ブラウザーにはこれらが備わっています。Node では、見つからない場合にパッケージが jsdom からグローバルとして設定するため、特別な設定は不要です。
このパッケージは、parseMarkdownToHtml、extractTitle、FONT_PRESETS(任意のフォントプリセットを参照)、およびそれらの TypeScript 型もエクスポートします。parseMarkdownToHtml は未サニタイズの生 HTML をそのまま通すため、ページに挿入する前に出力をサニタイズしてください(たとえば DOMPurify を使用します)。
サーバー上では、ユーザーから受け取った Markdown を信頼できないものとして扱ってください。コンバーターは、リモート画像()を埋め込むためにそれぞれダウンロードするので、リクエストはサーバーから送信されます(文書ごとに異なる http(s) URL は最大 100 件、各 10 MB、同時に 4 件まで)。サーバーから内部アドレスにアクセスできる場合は、画像 URL を事前に除去するか、許可リストで制限してください。
開発
Node.js 22.12 以降が必要です(.nvmrc で CI が使用するバージョンを固定しています)。
git clone https://github.com/benbalter/markdown-to-word-js.git
cd markdown-to-word-js
npm install
npm run dev # http://localhost:4321
npm run build # static site in dist/
npm test # unit tests; npm run test:e2e for Playwright
プロジェクトの構成とチェックについては、CONTRIBUTING.md をご覧ください。
- サイト: Astro と Tailwind CSS を使用し、word2md.com のデザインシステムを共有しています。
- 変換: marked で Markdown を HTML に変換し、@turbodocx/html-to-docx で
.docxを生成します。また、JSZip によるパッチでコードブロック、罫線、表のヘッダー、フォントプリセットを調整します。 - 翻訳: UI は他の言語にも対応できる状態です。web/i18n/README.md をご覧ください。
- ホスティング: Cloudflare Workers Static Assets を使用しています。
mainへのプッシュでビルドとテストが実行され、デプロイされます。詳しくは docs/cloudflare.md をご覧ください。
コントリビューション
コントリビューションを歓迎します。CONTRIBUTING.md をご覧ください。バグや機能リクエストについては、issue を作成してください。
ライセンス
MIT です。LICENSE をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。