0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[xlsx2md] 記事用の Excel 方眼サンプルで見つかった不具合を修正した話

0
Last updated at Posted at 2026-03-26

はじめに

xlsx2md の記事を書くために、Excel 方眼っぽいサンプルデータを作って変換を試していました。ところが、その確認中にエラーが見つかりました。

今回は、そのときにどのような条件で問題が出たのか、どう切り分けて、どう修正したのかを簡単に整理しておきます。日記寄りの話は note 側に分け、こちらでは修正の流れに絞ります。

  • 初出: 2026-03-26
  • 更新: 2026-03-26

835239CD-FEFA-4DDF-8EA9-B1BBC4A37589_1_102_o.jpeg

何をしようとしていたのか

もともとは、xlsx2md がいわゆる Excel 方眼っぽいシートをどのように Markdown に寄せるのか、その雰囲気が伝わる記事を書こうとしていました。

そのために、説明用の小さなサンプル workbook を作り、実際に変換して、出力を確認しながら記事を組み立てるつもりでした。つまりこの時点では、バグ修正ではなく、既存機能の挙動確認程度の作業でした。

今回確認に使った Excel 方眼サンプルは、次のようなものです。

grid-layout-sample-01.png

どんな条件で問題が出たのか

記事用に作った Excel 方眼サンプルを変換しようとしたところ、想定どおりに Markdown が生成されず、出力品質が崩れていました。期待したような Markdown にならなかった、ということです。

ここではまだ詳細な内部構造の説明までは踏み込みませんが、少なくとも「これまでの手持ちサンプルでは踏んでいなかった条件」が、その新しいサンプルに含まれていた、ということです。

こういう種類の問題は、既存のテストや既存の fixture だけを見ていると、どうしても取りこぼしが出ます。新しい題材で実際に使おうとしてみることに意味があると、あらためて感じました。ちょっとくやしいですの。

原因をどう見たか

その問題の Excel ブックを GPT-5.4 に読んでもらい、解析してもらって原因を教えてもらいました。私がやったのは、サンプルデータを引き渡し、GPT-5.4 による解説を読むところです。

xlsx2md は、整った table 定義だけを前提にせず、罫線や値のまとまりも手がかりにしています。だからこそ、実データ寄りのサンプルを渡すと、どこで前提がずれているのかが見えやすくなります。

今回も、既存コードが暗黙に置いていた仕様と、新しく作ったサンプルの前提のズレを GPT-5.4 が見つけて説明してくれました。私はその説明を読みながら、なるほどー、そういうことかー、ここの詰めが甘かったかー、と納得していました。

どう修正したか

修正では、GPT-5.4 からの修正案を見て、少し細部を会話したあとで、その修正案を選択しました。罫線による表検出の際には、セル密度を考慮しないような選択をしました。原因の切り分けから修正、確認まで、比較的短い往復で収束できました。

既存機能は多数の小さなテストでリグレッションテストが行われるので、変更作業を安心して眺めていられます。

修正後の xlsx2md の出力は以下のようになりました。やったー。

<!-- grid-layout-sample-01_001_grid-layout_github -->
<a id="grid-layout-sample-01_001_grid-layout_github"></a>

# grid-layout

## Source Information
- Workbook: grid-layout-sample-01.xlsx
- Sheet: grid-layout

## Body

**方眼紙的様式の動作確認**

### Table 001 (B2-U6)

| **項番** | **項目名称** | **物理名** | **デフォルト値** | **備考** |
| --- | --- | --- | --- | --- |
| 1 | 担当コード | tantocode | 101 | 担当コードの値 |
| 2 | 担当者名 | tantoname | Taro | 担当の名前 |
| 3 | 登録日 | entrydate |  | システムへの登録日 |
| 4 | 更新日 | updatedate |  | システムへの更新日 |

### Table 002 (C8-V16)

| **項番** | **項目名称** | **物理名** | **デフォルト値** | **備考** |
| --- | --- | --- | --- | --- |
| 1 | 担当コード | tantocode | 101 | 担当コードの値 |
| 2 | 出張先 | destination | 東京 | 出張先 |
| 3 | 出発日 | departuredate | 4月10日 | 出張の開始日 |
| 4 | 帰着日 | returndate | 4月12日 | 出張の終了日 |
| 5 | 用件 | purpose | 打ち合わせ | 出張目的 |
| 6 | 備考 | remarks | なし | 補足事項 |
| 7 | 登録日 | entrydate |  | システムへの登録日 |
| 8 | 更新日 | updatedate |  | システムへの更新日 |

再発防止のためにやったこと

再発防止のためにやったのは、自動テストや fixture を追加することです。とはいえ、実際に自動テストや fixture の追加は、なにも指示せずとも GPT-5.4 が粛々と担当してくれました。その事象が発生したらすぐに検知できることは素晴らしいですね。

まとめ

今回は、記事用に作った Excel 方眼サンプルを変換している途中で、xlsx2md の不具合が見つかりました。新しいサンプルを実際に作って試すことが、機能確認としてかなり有効だったのです。

また、OpenAI GPT-5.4 と対話しながら修正を進めることで、問題を見つけてから修正して再確認するまでを比較的すばやく回せました。およそ 10 分弱で解析から修正からテスト追加までが終わったのは、いつもながらすごいなあと感心です。既存機能の確認や小さな不具合修正においても、こうした進め方はかなり実用的だと感じています。

関連記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?