ZeroTool Workbench
Markdown 目次ジェネレーター
Markdown見出しからクリック可能な目次を生成。GitHub / GitLab / Jekyll / Bitbucket のアンカー形式に対応、<!-- toc --> マーカーで既存目次を原位置置換。完全ブラウザ完結。
使い方
- 左側の入力エリアに Markdown を貼り付けます。
- アンカー形式 でターゲット — GitHub / Hugo、GitLab、Jekyll、Bitbucket — を選択。
- 最小見出しレベル と 最大見出しレベル で目次に含める階層を絞り込みます。
- ドキュメントタイトルがテンプレートで別途レンダリングされる場合は、H1 を含む をオフにしてください。
- 生成された目次をコピーするか、マーカーモード をオンにして
<!— toc —>マーカー入りの完全な Markdown を取得します。
4 つのアンカー形式
- GitHub / Hugo — 小文字化、句読点除去、空白をハイフンに、Unicode は保持。Hugo は v0.62 以降 goldmark で GitHub と同じ規則を採用。
- GitLab — GitHub と同じ規則に加え、連続するハイフンを 1 つに圧縮。GitLab Flavored Markdown のレンダリングと一致。
- Jekyll(kramdown classic) — 非 ASCII を先に除去してから slug 化。Unicode 対応の slugger に切り替えていない Jekyll サイト向け。
- Bitbucket — 全てのアンカーが
markdown-プレフィックス付き、重複は-Nではなく_N。
マーカーモード
マーカーモードは目次を常に最新に保ちつつ、本文の他の部分には触れません。 目次を置きたい場所に 2 つの HTML コメントを書いておきます:
<!— toc —>
<!— /toc —>
あとはジェネレーターを実行するたび、2 つのコメント間の内容が新しい TOC に置換されます。 マーカーがまだ無い場合は、最初の見出しの直前に新しいマーカー付きブロックが挿入されるので、 コピーして commit するだけで運用に乗ります。
実例
シンプルな目次(GitHub 形式)
入力:
# API リファレンス
## 認証
### OAuth フロー
## エンドポイント
### GET /users
### POST /users
出力(GitHub アンカー、インデント半角スペース 2):
- [API リファレンス](#api-リファレンス)
- [認証](#認証)
- [OAuth フロー](#oauth-フロー)
- [エンドポイント](#エンドポイント)
- [GET /users](#get-users)
- [POST /users](#post-users)
重複した見出し
2 つの ## 例 は GitHub / GitLab / Jekyll では #例 と #例-1、Bitbucket では #markdown-例 と #markdown-例_1 になります。
H1 を除外する
静的サイトが H1 を frontmatter から描画している場合は H1 を含む をオフにします。TOC は最初の H2 から始まり、インデントが 1 段階浅くなります。
FAQ
なぜアンカー形式を選ぶ必要があるのですか?
プラットフォームごとに見出しからアンカー(slug)への変換ルールが異なります。GitHub はUnicodeを保持し空白をハイフンに置換、GitLab はそれに加えて連続ハイフンを 1 つに圧縮、Jekyll / kramdown classic は非 ASCII を全て除去、Bitbucket は全てのアンカーに markdown- プレフィックスを付与します。間違った形式で生成した目次は、リンクを踏んでも目的地に飛びません。
中国語・日本語・韓国語の見出しに対応していますか?
GitHub、GitLab、Bitbucket の 3 形式は Unicode 文字をそのままアンカーに保持するため、中国語 / 日本語 / 한글 の見出しもそのまま動作します。Jekyll classic は既定で非 ASCII を剥ぎ落とすので、ターゲットが Jekyll の場合は GitHub 形式に切り替えて見出しの原文を URL に残すことを推奨します。
マーカーモードはどのように既存の目次を更新しますか?
マーカーモードを有効にすると、ツールは文書内の <!-- toc --> ... <!-- /toc --> を探し、その間の内容を新しく生成した TOC で丸ごと置換します。マーカー外の本文は一切変更されません。マーカーが未設定の場合は最初の見出しの直前に新しいマーカー付き TOC ブロックを挿入するので、コピーして元ファイルに戻すだけで完了です。
重複した見出しがあるとどうなりますか?
重複アンカーは自動的にユニーク化されます。GitHub / GitLab / Jekyll では -1、-2、-3 … が末尾に追加され、Bitbucket ではそのレンダラーに合わせて _1、_2、_3 … が使われます。生成された目次のリンクは常に一意の目的地を指します。
コードブロック内の # は見出しとして扱われますか?
扱われません。フェンスドコードブロック(``` または ~~~)で囲まれた行は全てコードとして処理され、行頭の # は見出しになりません。既存の <!-- toc --> ... <!-- /toc --> ブロックも同様にスキップされるため、ジェネレーターを繰り返し実行しても旧 TOC が入れ子にはなりません。