Markdown 目次生成ツール
Markdownの見出しからアンカーリンク付きの目次を生成します。
このツールについて
マークダウンの目次(TOC)は、ドキュメントの上部にある見出し一覧で、読者が特定のセクションにすぐにジャンプするのに役立ちます。このジェネレーターは、マークダウンソースから見出しを自動抽出し、GitHub、GitLab、およびほとんどのマークダウンレンダラーと互換性のあるリンク付きアンカーを作成します。TOCエントリを手動で書く退屈な作業をなくし、ドキュメントが変更されてもリンクが正確なままであることを保証します。
マークダウンテキストを貼り付けて生成をクリックするだけで、動作するアンカーリンク付きの形式化されたTOCが即座に作成されます。このツールはカスタマイズ可能なオプションをサポートしています:含める見出しの最大深度(H1からH6まで)を制御でき、好みの箇条書きスタイル(ハイフン、アスタリスク、またはプラス記号)を選択できます。重複する見出しは自動的に検出され、#heading-1、#heading-2のようなサフィックス番号が付けられてアンカーの競合を防ぎます。
よくある質問
コード実装
import re
def heading_to_anchor(text: str) -> str:
"""Convert heading text to a GitHub-Flavored Markdown anchor."""
anchor = text.lower()
anchor = re.sub(r"[^\w\s-]", "", anchor) # remove punctuation (keep letters, digits, -, _)
anchor = re.sub(r"\s+", "-", anchor.strip()) # spaces → hyphens
return anchor
def generate_toc(markdown: str, max_depth: int = 3, bullet: str = "-") -> str:
lines = []
seen: dict[str, int] = {}
for line in markdown.splitlines():
m = re.match(r"^(#{1,6})\s+(.*)", line)
if not m:
continue
level = len(m.group(1))
if level > max_depth:
continue
title = m.group(2).strip()
anchor = heading_to_anchor(title)
# Deduplicate: second occurrence → anchor-1, third → anchor-2, ...
count = seen.get(anchor, 0)
seen[anchor] = count + 1
if count > 0:
anchor = f"{anchor}-{count}"
indent = " " * (level - 1)
lines.append(f"{indent}{bullet} [{title}](#{anchor})")
return "\n".join(lines)
md = """# Getting Started
## Installation
### Prerequisites
### Install
## Configuration
## Usage
# Advanced
## Performance
## Security
"""
print(generate_toc(md, max_depth=3, bullet="-"))
# - [Getting Started](#getting-started)
# - [Installation](#installation)
# - [Prerequisites](#prerequisites)
# - [Install](#install)
# - [Configuration](#configuration)
# - [Usage](#usage)
# - [Advanced](#advanced)
# - [Performance](#performance)
# - [Security](#security)Comments & Feedback
Comments are powered by Giscus. Sign in with GitHub to leave a comment.