製造業の「Excelノウハウ」をAIに読ませやすい形にしたくて、Claude Codeと一緒にCLIツールを作った話
はじめに
はじめまして!PipiMossです。Zennへの投稿は初めてです。
私は半年ほど前まで製造業で回路設計者として働いていて、「なんとかDXしたいけど…」とずっと悩んでいました。でも当時はなかなかうまくいきませんでした。
一番の壁は、技術ノウハウのほとんどがフリーフォーマットなExcelファイルに埋もれているということでした。
仕様書、設計レビュー資料、アセスメント資料、議事録……。どれも「Excel方眼紙」やら独自フォーマットやらで作られていて、何十ファイル、何百シートもある。長年の貴重なノウハウが詰まっているのに、画像やグラフが混ざっていたり、中途半端にコメントや表があったりして、プログラムとはとにかく相性が悪い。もったいないなあ、とずっと思っていました。
AIで大量のExcelを読ませるのって、けっこう難しい
最近はClaude CodeやCopilotみたいなAIツールがどんどん進化していて、「ExcelもAIで操作できる!」という話をよく見かけますよね。
でも実際にやってみると、AIに一度に読ませられるのはせいぜい数ファイルが限度。コンテキスト制限との戦いが避けられません。そもそもExcelって中身がかなり冗長なので、コンテキストをめちゃくちゃ食うんですよね。
AIがどんどん進歩しているとはいえ、今はまだ単一ファイルをバイブコーディングで操作する方向が主流で、「大量のExcelファイルをまとめて読んで知見を引き出す」みたいな使い方は後回しにされがち。しかもExcelをこんな文書みたいに使うのって日本特有らしいので、海外のAIツールが優先的に対応してくれる望みも薄そうです。
そんなこともあって、ずっと 「大量のExcelをAIが読みやすい形に変換するツールは割と需要あるんじゃないかな…」 と思っていました。AIたちに聞いてみたら悪くない感触だったので自分で作ってみることにしました。
「AIに何が読みやすい?」って本人に聞いてみた
AIはMarkDownやHTMLみたいな構造化されたデータを読むのが得意、ということは知っていたので、「ExcelをHTMLに変換できたら、人間にもAIにも読みやすいファイルができるのでは?」と考えました。
で、実際にExcelを読まされるハメになるClaude Code本人に「何が一番読みやすい?」って聞いてみたんです。
答えは JSON でした。
うーん、そっかぁJSONかぁ…。JSONは人間が読むにはしんどいので、できればHTMLがよかったんですが、大量のドキュメントを効率的に処理してもらうなら、AI本人が「これが一番ありがたい」って言ってるJSONを選ぶしかないですよね。
ということで、 JSON(AI向け)とHTML(人間向け)の両方を出力するツール を作ることにしました。
この辺りの話はまた今度ゆっくりと。
作ったもの: xlmelt
xlmelt は、複雑なExcelファイルをAIが読みやすいJSON/HTMLに変換するCLIツールです。
名前の由来は "melt"(溶かす)。Excel方眼紙のガチガチの見た目を「溶かして」、セマンティックな構造に変換するイメージだそうです。名前を考えるセンスが絶望的にないのでAIに考えてもらいました。
できること
pip install xlmelt
# Excelファイルを変換
xlmelt convert 仕様書.xlsx -o ./output/
# ディレクトリ内の全Excelを一括変換
xlmelt convert ./excel_dir/ -o ./output/
これだけで、こんなファイルが生成されます。
output/
└── 仕様書/
├── document.json ← 構造化JSON(AI向け)
├── document.html ← セマンティックHTML(人間向け)
├── images/ ← 抽出された画像
└── metadata.json ← 変換メタデータ
ポイントは、LLMを使っていないこと。openpyxlで読めるセルのメタデータ(フォントサイズ、太字、罫線、結合、背景色など)だけで文書構造を検出しています。APIキーもクラウド接続もいりません。
変換のイメージ
inspect コマンドで、Excelがどんな構造として解釈されるか確認できます。
xlmelt inspect 仕様書.xlsx
Sheet: 仕様書
[H2] 顧客管理システム 機能仕様書
[TABLE] 6 rows headers=['文書番号', '承認者']
[H3] 改訂履歴
[TABLE] 4 rows headers=['版数', '日付', '変更者', '変更内容']
[H2] 第1章 概要
[H3] 1.1 目的
[TEXT] 本仕様書は、顧客管理システム(CRM)の機能仕様を定義する...
[H2] 第2章 機能仕様
[H3] 2.1 顧客検索機能
[UL] 3 items
- 検索応答時間:3秒以内(1000万件時)
- 同時接続数:100ユーザー
- 画面表示時間:2秒以内
Excelのセルの集合が、見出し・表・テキスト・リストっていう意味のある構造にちゃんと変換されてるのがわかると思います。
検出できるセクションタイプ
| type | 検出基準 | 例 |
|---|---|---|
heading |
大きいフォント、太字、結合セル | 「第1章 概要」 |
table |
罫線で囲まれた矩形領域 | 検索結果一覧表 |
key_value |
太字ラベル+値のペア | 「文書番号: FS-CRM-001」 |
list |
リストマーカー(・、●、①等) | 箇条書きの要件 |
text |
上記に該当しない文字列 | 自由テキストの説明文 |
image |
埋め込み画像・チャート | グラフや図面 |
正直に言うと、まだまだです
現在のxlmeltは綺麗なフォーマットのExcelならうまく変換できますが、複雑なものはまだ難しいです。罫線のない暗黙的な表とか、独自の色分けルールで意味を持たせてるシートとかは、さすがに判断しきれない。
今後は、ルールベースで変換しきれなかった部分にLLMを使って補完するハイブリッド方式にしたいと考えています。「ルールベースで8割変換して、残り2割をLLMで仕上げる」ことで、コストを抑えつつ精度を上げていきたいと思っています。
おわりに
「うちの会社にもこういうExcelめっちゃあるわ…」 って思った方、ぜひ試してみてください!「うまくいかない」みたいなフィードバックも大歓迎です。
正直どの層をターゲットにすべきかも定まっていないので、いろいろ意見いただけると助かります。
pip install xlmelt
次の記事では、どうやってこのツールを開発したのか、その裏話を書こうと思います。
👉 Part 2: xlmeltの詳しい使い方とLLMハイブリッド構想(近日公開)
👉 Part 3: Claude Codeとの開発秘話(近日公開)
Discussion