R$ Blog

長い記事で目次を確認する

923자약 3분ノート

この記事は、h2 と h3 の見出しを多用して、左サイドバーの目次 (TOC) が正しく多段表示されることを確認するためのテスト記事です。

目次の抽出条件

目次には h2 と h3 のみが抽出されます。h1 (記事タイトル) と h4 以下は対象外です。

見出しが2件未満の記事では目次パネル自体が表示されません。

セクション1: 設計

見出し構造の考え方

記事を長くするときは、h2 で大きな区切り、h3 でその中の小項目を分けるのが基本だ。

階層の深さ

h4 以下を使いたい場合は、そのレベルの見出しが目次に現れないことを理解した上で使う。

セクション2: 実装

フロントエンドの構成

テンプレートのレイアウトは BaseLayout を起点に、記事ページは post/[...slug].astro が担当している。

マークダウン処理

remark と rehype のプラグインチェーンで構文変換を行う。前処理として ::: +++ ;;; のようなブロック構文をパース前にHTMLへ変換している。

シンタックスハイライト

Shiki を使ったハイライトに加えて、メタ文字列でタイトルや行ハイライトを制御できる。

セクション3: デザイン

カラーパレット

テンプレートの配色は src/styles/ 以下にCSSカスタムプロパティとして定義されている。

タイポグラフィ

本文は prose クラス (Tailwind Typography) が適用され、見出し・段落・リストなどの既定スタイルが整えられている。

セクション4: 検索インデックス

pagefindの対象

記事本文には data-pagefind-body が付与されており、ページ内検索のインデックス対象になる。

除外したい場合

検索結果に出したくない要素は、pagefindの属性で制御する。

セクション5: 類似記事

埋め込み入力

類似記事の計算には、タイトルと description (なければ本文冒頭500字) が使われる。

除外フラグ

この記事には excludeFromSimilarities: true を指定しており、類似記事生成の対象から除外されている。類似記事パネルにこの記事が候補として現れないことを確認できる。

セクション6: アーカイブ

月別集計

アーカイブページは frontmatter の date を元に月別で記事をまとめている。

年間表示

年単位の集計も同じデータから組み立てられる。

確認手順

  1. この記事を開く
  2. 左サイドバーの目次に h2 と h3 が多段で表示されることを確認する
  3. 目次のリンクをクリックし、該当セクションへスクロールすることを確認する
  4. h4 以下の見出しが目次に現れないことを確認する
  5. 右サイドバーの類似記事にこの記事が候補として現れないことを確認する