Prompt

見出しレベルは、原則1ずつ下げていく。レベルが飛んだり、上がったりしない。
html, markdownでもそれは絶対に守るべきか?

結論から言うと、**「HTML(構造)としては絶対に守るべきだが、Markdown(執筆)としては、出力先の環境に依存する『スイスチーズの穴』がある」**という、エンジニアらしい絶妙なジレンマがあるよ。

情報工学的な「一意な美学」と、アクセシビリティ(A11y)の観点からこの問題を解剖してみよう!


1. HTMLとしての「絶対」:アクセシビリティの砦

HTMLにおいて、見出しレベル(<h1><h6>)を飛ばさないことは、単なるマナーではなく**「アクセシビリティの仕様」**に近いよ。

  • スクリーンリーダーの混乱: 視覚障害のあるユーザーが使うスクリーンリーダーは、見出しを「目次」として解釈する。<h1>の次にいきなり<h3>が来ると、「あれ、<h2>を見落としたかな?」とユーザーを不安にさせてしまうんだ。

  • マシンリーダビリティ: 検索エンジンのクローラー(Googleボットなど)も、見出しの階層構造からページの情報の重要度を理解する。階層が崩れていると、そのページの「知識の庭」としての構造が一意に伝わらなくなってしまう。


2. Markdownとしての「現実」:Quartz 4 との兼ね合い

キミが使っている Quartz 4(デジタルガーデン)のような環境では、少し特殊な事情が発生するんだ。

  • 自動的な階層のズレ: Quartz 4 では、記事のタイトルが自動的に <h1> として出力されることが多い。そのため、本文の最初を ##<h2>相当)から始めないと、結果的に「<h1>の中に<h1>がある」という、おかしな階層(スイスチーズの穴)が生まれてしまう。

  • 出力先への依存: Markdownはあくまで「中間言語」だ。最終的にHTMLへ変換される際、テーマのCSSで見栄えを調整するために「あえてレベルを飛ばす」誘惑に駆られることがあるけれど、これは**「見た目(CSS)と構造(HTML)の混同」**という、エンジニアが最も避けるべき罠だね。


3. 「上がらない」の原則の例外

「レベルを上げない」という原則には、唯一の例外がある。それは**「セクションが終わったとき」**だね。

  • 正しい階層: h2 -> h3 -> h3 -> h2

  • 解説: 下位のセクション(h3)が終わり、新しい大きな話題(h2)に戻る場合は、当然レベルは上がる。これは「階層が飛んでいる」わけではなく、一意に構造化された正しいアウトラインだよ。


見落とされがちな視点:デザインの「一意性」

<h2>だと文字が大きすぎるから<h3>にしよう」という動機でレベルを飛ばすのが、最も多い失敗パターンだ。

  • 解決策: デザインが気に入らないなら、CSSでそのレベルの見た目を変えるべきであって、HTMLのレベルを変えてはいけない。

  • エンジニアの心得: 構造(Semantics)をデザインの都合で犠牲にしない。これは、キミが「属性の組み合わせからデータを導く」という純粋さを求めたのと共通する、データの「誠実さ」の問題なんだ。


結論

  • HTML/アクセシビリティ: 絶対に守るべき。 レベルを飛ばすのは、データベースで主キーを飛ばして採番するような「不吉な臭い」がする。

  • Markdown: 出力されるHTMLが正しくなるように書く。Quartzなら「本文は ## から始める」という一意なマニュアルを自分の中で決めておくのが正解だ。

次は、「Quartz 4 の CSS をいじって、見出しレベルを飛ばさなくても、自分好みのサイズ感で表示されるようにカスタマイズする設定」 についてやってみる?

Would you like me to code a custom CSS snippet for Quartz 4 to refine your heading styles without breaking the semantic structure?