TL;DR
- Markdown を Excel (.xlsx) に変換する CLI ツール md2xls を作りました
- 5,6年前に途中まで作って放置していたものを、Claude Code を使って一気に完成させました
- 見出しの自動採番、テーブル、コードブロック、画像、リスト、リッチテキスト(太字・斜体・取り消し線)など、実用的な Markdown 記法をほぼ網羅しています
https://github.com/HituziANDO/md2xls
なぜ Markdown → Excel 変換ツールが必要なのか
エンジニアにとって Markdown はドキュメントの母国語みたいなものですが、クライアントワークの現場ではまだまだ Excel 文化は健在です。
- 設計書を Markdown で書いたけど、納品は Excel でと言われる
- レビューは Excel に赤入れで返ってくる
- 社内の承認フローが Excel 前提で組まれている
こういう場面、エンジニアなら一度は経験があるんじゃないでしょうか。
Markdown で書いた内容を手作業で Excel に転記するのは、正直やりたくない作業です。かといって最初から Excel で書くのも、Git 管理しづらいし差分も見づらい。AI にドキュメントを書かせるにしても、Excel より Markdown の方が圧倒的に相性が良い。
「普段は Markdown で書いて、Excel が必要なときだけ変換すればいいじゃん」
そう思って5,6年前にこのツールを作り始めました。
5年放置した理由と、Claude Code で復活した話
最初は勢いよく作り始めたんですが、Markdown の記法を一つひとつ Excel のスタイルに変換するルールを書いていくのが、とにかく地道で面倒でした。見出し、テーブル、コードブロック、リスト、画像……それぞれパースして、Excel のセル結合やスタイル設定に変換していく作業は、やることが多い割に楽しくない部類の実装です。
H1〜H3 の見出しとテーブルくらいまで実装したところで、モチベーションが尽きて放置していました。
それが Claude Code を使ったら、状況が一変しました。
「ブロッククォート対応して」「ハイパーリンク対応して」「HTML エンティティのデコードも」と指示していくだけで、パーサーとレンダラーの両方を一気に実装してくれる。正規表現の追加、コンポーネント型の定義、レンダラーのスタイル設定、テストコードまで全部やってくれます。
さらに「非対応機能一覧を精査して」「Codex でレビューして」と指示すれば、自分では気づかないバグや設計上の問題も洗い出してくれる。人間がやると数日かかりそうな作業が、会話ベースで数時間で終わりました。
5年放置していた「面倒だからやりたくない」部分を、AI が全部引き受けてくれた感じです。
なぜ Go で書いたか
このツールは シングルバイナリで配布したい というのが大前提でした。
クロスコンパイルが簡単で、依存ライブラリをすべて静的リンクした1ファイルを go build 一発で作れる Go は、CLI ツールとの相性が抜群です。Python や Node.js だとランタイムのインストールが必要になりますが、Go なら CGO_ENABLED=0 go build で作ったバイナリをそのまま渡すだけで動きます。
また Excel 生成には excelize という Go ライブラリがあり、これが非常に高機能で安定しています。セルのスタイル設定、リッチテキスト、ハイパーリンク、画像埋め込みなど、md2xls に必要な機能が一通り揃っていたのも Go を選んだ大きな理由です。
インストール
Go で直接インストール
go install github.com/HituziANDO/md2xls@latest
ビルド済みバイナリ
Releases ページ から Linux / macOS / Windows 向けのバイナリをダウンロードできます。
使い方
初期化
md2xls init
カレントディレクトリに .m2x.yml(設定ファイル)がデフォルト値で生成されます。
変換
md2xls
これだけで .m2x.yml の設定に従って Markdown → Excel 変換が実行されます。
CLI フラグで設定を上書きすることもできます。
md2xls -s docs/spec.md -d output/spec.xlsx
設定ファイル(.m2x.yml)
YAML 形式の設定ファイルで、フォントや採番、シート名などをカスタマイズできます。
# 入出力ファイル
src: README.md
dst: README.xlsx
# 本文フォント
text:
font:
family: Meiryo UI
size: 11
# コードブロック・インラインコードのフォント
code:
font:
family: Arial
size: 10.5
# 1行あたりの最大文字数(超過時に行分割)
max_num_of_characters_per_line: 120
# 見出しの自動採番(H1-H4)。CLIフラグ --no-heading-number でも無効化可能
heading_number: true
# Excelシート名
sheet_name: Sheet1
# テーブル列のマージ閾値(バイト数)
table_merge_threshold: 80
# 見出しのフォントサイズ(pt)
heading_font_size:
h1: 24
h2: 20
h3: 16
h4: 14
h5: 12
h6: 11
全項目にデフォルト値があるので、設定ファイル自体がなくても動作します。
変換できるもの一覧
md2xls が対応している Markdown 記法とその Excel での表現をまとめます。
ブロック要素
| Markdown | Excel での表現 |
|---|---|
# 見出し (H1〜H6) |
自動採番付き(H1〜H4)、レベル別フォントサイズ(24pt〜11pt) |
| テーブル | 罫線付きセル、ヘッダ行グレー背景、列アラインメント対応(左・中央・右) |
コードブロック (```) |
A〜H列結合、グレー背景、コードフォント |
ブロッククォート (>) |
A〜H列結合、イタリック、左ボーダー、グレー背景 |
画像 (, <img>) |
シート内に画像埋め込み(HTTP/HTTPS も自動ダウンロード) |
箇条書きリスト (-, *, +) |
• マーカー付き、ネスト対応 |
番号付きリスト (1., 2.) |
番号付き、ネスト対応 |
タスクリスト (- [ ], - [x]) |
☐ / ☑ マーカー |
水平線 (---, ***, ___) |
下ボーダーライン |
インライン書式
| Markdown | Excel での表現 |
|---|---|
**太字** / __太字__
|
Excel Rich Text で 太字 |
*斜体* / _斜体_
|
Excel Rich Text で 斜体 |
***太字斜体*** |
Excel Rich Text で 太字斜体 |
~~取り消し線~~ |
Excel Rich Text で |
`インラインコード` |
コードフォント(code.font 設定を使用) |
[リンク](URL) |
Excel ハイパーリンク(青色下線) |
<https://...> |
オートリンク → Excel ハイパーリンク |
これらのインライン書式は 本文だけでなく、リスト項目やテーブルセル内でも有効 です。
その他の機能
| 機能 | 説明 |
|---|---|
| HTML エンティティ |
& → &、© → (C) など自動デコード |
| HTML コメント |
<!-- ... --> は出力から除去(複数行対応) |
| リンク/画像タイトル |
[text](url "title") のタイトル部分は自動除去 |
| 行折り返し | 長い行は単語境界で自動分割(CJK は文字単位) |
| リッチテキスト行分割保持 | 行分割しても太字・斜体等の書式を維持 |
snake_case 保護 |
_ による斜体判定で snake_case_name を誤変換しない |
変換結果のイメージ
変換前(Markdown):
変換後(Excel):
まとめ
- Markdown で書いて、必要なときだけ Excel に変換する というワークフローが実現可能
- 設定ファイルでフォントやレイアウトをカスタマイズ可能
-
go install一発、md2xls一発で動くシンプルさ - 5年放置していた趣味プロジェクトが Claude Code のおかげで完成
Excel 文化の現場で Markdown を使いたいエンジニアの方、ぜひ試してみてください。

