html2md への要求 — 章番号の二重採番

「章の連番は html2md が振る」と「資料番号.章番号で通す」が両立しない

📅 作成: 2026-08-29 / 更新: 2026-08-29 / 起票: 20260828-typescript-learn

要点

この文書の内容

  1. 何が問題か
  2. 実物はどうなっているか
  3. なぜ資料番号が要るのか
  4. 要求

1. 何が問題か

2つのルールが両立しない

~/.claude/CLAUDE.md に、次の2つの記述があります。

出典記述
HTMLデザインルール
「クラス名」
章の連番は html2md が振る。HTML 側に番号を書かない(二重になる)
学習資料の作成ルール
「ファイル名と番号」
番号体系は「資料番号.章番号」で通す。資料01の章は 01.1・01.2…、付録A1の章は A1.1…

後者に従うと <h1>05.1 形が同じなら同じ型として通る</h1> と書くことになりますが、前者は「HTML 側に番号を書かない」と言っています。どちらかに従うと、もう一方に反します。

「二重になる」が実際に起きるかは未確認でした。

ルールの文言だけを読むと、<h1>05.1 章名</h1> が ## 1. 05.1 章名 のように出力される懸念があります。まずこれを実物で確かめました(2章)。

2. 実物はどうなっているか

PowerShell 学習資料では二重になっていない

同じ規約で作られ、すでに Markdown 化まで済んでいる 20260822-powershell-pwsh-learn を確認しました。

<!-- docs/01-背景.html -->
<h1>01. PowerShell の生まれた経緯</h1>
<h1>01.1 Windows Command Shell の限界</h1>
<h1>01.2 なぜ PowerShell が必要だったのか</h1>
# docs/01-背景.md
# 01. PowerShell の生まれた経緯
## 目次
## 01.1 Windows Command Shell の限界
## 01.2 なぜ PowerShell が必要だったのか

二重採番は起きていません。

HTML の h1 がそのまま Markdown の ## になっており、html2md が独自の連番を追加してはいません。見出しレベルが1つ下がっているだけです。

ルールの文言と実物が食い違う

項目ルールの文言実物
連番html2md が振る振っていない(h1 の文字列をそのまま使う)
HTML 側の番号書かない書いてある(01.1 形式)
出力二重になる二重になっていない

考えられるのは次の3つです。どれなのかを確認したいのが、この文書の第一の目的です。

  1. ルールが将来の仕様を書いている — これから連番を振る実装が入る
  2. 条件付きで振る実装になっている — h1 に番号があれば振らない、など
  3. ルールの文言が実物と合っていない — 記述を直すべき

3. なぜ資料番号が要るのか

1つの資料が複数ファイルに分かれている

学習資料は本編12章+付録4本+構成案の17ファイルに分かれています。各ファイルの中に3〜8個の章(h1)があり、ファイルをまたいで章を参照します。

<!-- 06-any-unknown-アサーション.html の中から -->
この扱いは <a href="08-型の絞り込み.html">08. 型の絞り込み</a> で詳しく扱います。
詳細は 08.4 を参照してください。

ファイル内で閉じた連番では参照できません。

html2md が振る連番は ## 1. ## 2. のようにそのファイルの中だけで通用する番号です。「08.4 を参照」と書きたいときに、4. だけではどのファイルの4番目か分かりません。

資料番号を含めた実例

場所表記例
タイトルバーの h1資料番号. タイトル08. 型の絞り込み
章の h1資料番号.章番号 タイトル08.4 型ガード関数
他ファイルからの参照資料番号.章番号「詳細は 08.4 で扱います」

この体系は PowerShell 学習資料でも同じです。2つの資料で共通の書き方になっています。

4. 要求

要求1 — h1 に番号があるときは連番を振らない

これが本題です。実物は既にこの動作をしているように見えますが、仕様として保証してほしいという要求です。

h1 の内容期待する Markdown
08.4 型ガード関数## 08.4 型ガード関数(そのまま)
型ガード関数## 4. 型ガード関数(連番を振る)

判定は「h1 の先頭が数字・英数字の番号で始まっているか」で行えます。正規表現なら ^(?:\d+|[A-Z]\d+|ZZ)(?:\.\d+)?[ .] 程度です。

要求2 — 判定を無効にする手段

誤検出したときのために、明示的に切り替える手段があると安全です。

案指定方法評価
Aコマンドライン引数(--keep-heading-number / --auto-number)推奨
B<section> の data 属性(data-number="keep")HTML が汚れる
C設定ファイル大げさ

影響範囲

プロジェクトファイル章状態
20260822-powershell-pwsh-learn16約70Markdown 化済み。現状で正しく出ている
20260828-typescript-learn1776これから変換する

もし連番を振る実装が今後入ると、既存の資料が壊れます。

PowerShell 学習資料は既に Markdown 化が済んでおり、## 01.1 … の形で公開されています。連番を振る動作に変わると ## 1. 01.1 … になり、16ファイル・約70章すべてが影響を受けます。

この資料側での対応

要求が通らない場合、資料側で番号を外すことになります。その場合の影響です。

この書き換えは避けたいため、要求1の確認を先にお願いします。