MkDocs

Python製のドキュメント特化SSG。18k超のGitHubスターを持ち、Markdownベースのドキュメント作成に特化。

言語:Python
フレームワーク:None
ビルド速度:Fast
GitHub Stars:18k
初回リリース:2014
人気ランキング:第14位

トレンド・動向

API仕様書や技術ドキュメント作成で人気。Material for MkDocsテーマにより美しいドキュメントを簡単作成。

# 静的サイトジェネレータ MkDocs ## 概要 MkDocsは2014年からPython製のドキュメント特化型SSGとして開発され、18k超のGitHubスターを誇るMarkdownベースの技術ドキュメント作成に特化したツールです。シンプルな設定とクリーンなMarkdown記法により、API仕様書・技術ドキュメント・プロジェクトマニュアルの作成が容易。Material for MkDocsテーマによる美しい見た目と検索機能、バージョニング対応により、オープンソースプロジェクトから企業の技術ドキュメントまで幅広く採用されています。 ## 詳細 MkDocs 2025年版は技術ドキュメント作成におけるデファクトスタンダードとして確立し、Pythonエコシステムとの親和性により開発者フレンドリーな環境を提供します。YAML設定ファイルによるシンプルな構成管理、Jinja2テンプレートエンジンによる柔軟なカスタマイズ、豊富なプラグインエコシステムによる機能拡張が特徴。特にMaterial for MkDocsテーマは、Googleのマテリアルデザインを採用した美しいUIと高度な検索機能、ダークモード対応、レスポンシブデザインにより、モダンな技術ドキュメントサイトを簡単に構築できます。 ### 主な特徴 - **ドキュメント特化設計**: API仕様書・技術マニュアル・チュートリアルに最適化 - **Material for MkDocsテーマ**: Googleマテリアルデザインベースの美しいUI - **強力な検索機能**: インデックス化された高速検索とハイライト表示 - **バージョニング対応**: 複数バージョンのドキュメント管理 - **プラグインエコシステム**: Pythonベースの豊富な機能拡張 - **ライブリロード**: リアルタイムプレビューによる効率的な編集 - **多言語対応**: i18nプラグインによる国際化サポート ## メリット・デメリット ### メリット - シンプルなMarkdown記法とYAML設定による直感的なドキュメント作成 - Material for MkDocsテーマによるプロフェッショナルで美しい外観 - 高速な検索機能とユーザビリティに優れたナビゲーション - Pythonエコシステムとの統合による開発ワークフローの効率化 - バージョニング・多言語対応による大規模プロジェクト対応 - GitHub ActionsやCI/CDとの連携による自動デプロイメント - 豊富なプラグインによる機能拡張とカスタマイズ性 ### デメリット - Python環境が必要でRubyやNode.js環境との互換性制限 - ブログ機能は基本的になく、技術ドキュメント以外の用途には不向き - 大規模サイトでのビルド速度がHugoやZolaに比べて劣る - テーマの選択肢がJekyllやHugoに比べて限定的 - 複雑なレイアウトカスタマイズにPython/Jinja2の知識が必要 - ドキュメント特化のため汎用Webサイト構築には機能不足 ## 参考ページ - [MkDocs 公式サイト](https://www.mkdocs.org/) - [MkDocs GitHub リポジトリ](https://github.com/mkdocs/mkdocs) - [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/) ## 書き方の例 ### インストールとプロジェクト作成 ```bash # Pythonとpipの確認 python3 --version pip3 --version # MkDocsのインストール pip install mkdocs # Material for MkDocsテーマのインストール(推奨) pip install mkdocs-material # 新しいプロジェクトの作成 mkdocs new my-project cd my-project # プロジェクト構造の確認 ls -la # mkdocs.yml (設定ファイル) # docs/ (ドキュメントディレクトリ) # index.md (ホームページ) # 開発サーバーの起動 mkdocs serve # => http://127.0.0.1:8000 でアクセス可能 # 特定のポート・ホストでの起動 mkdocs serve --dev-addr=127.0.0.1:8080 # デバッグモードでの起動 mkdocs serve --verbose ``` ### 基本設定ファイルの構成 ```yaml # mkdocs.yml - 基本設定 site_name: My Technical Documentation site_description: Comprehensive technical documentation site site_author: Your Name site_url: https://your-domain.com # リポジトリ設定 repo_name: username/my-project repo_url: https://github.com/username/my-project edit_uri: edit/main/docs/ # テーマ設定(Material for MkDocs使用) theme: name: material language: ja palette: # ライトモード - scheme: default primary: indigo accent: indigo toggle: icon: material/brightness-7 name: Switch to dark mode # ダークモード - scheme: slate primary: indigo accent: indigo toggle: icon: material/brightness-4 name: Switch to light mode features: - navigation.instant - navigation.tracking - navigation.tabs - navigation.sections - navigation.expand - navigation.top - search.suggest - search.highlight - search.share - content.code.annotate - content.code.copy icon: repo: fontawesome/brands/github # ナビゲーション構造 nav: - ホーム: index.md - 導入: - インストール: getting-started/installation.md - クイックスタート: getting-started/quickstart.md - APIリファレンス: - 認証: api/authentication.md - エンドポイント: api/endpoints.md - ガイド: - ベストプラクティス: guides/best-practices.md - トラブルシューティング: guides/troubleshooting.md - リリースノート: changelog.md # Markdown拡張機能 markdown_extensions: - admonition - pymdownx.details - pymdownx.superfences - pymdownx.highlight: anchor_linenums: true - pymdownx.inlinehilite - pymdownx.snippets - pymdownx.tabbed: alternate_style: true - pymdownx.tasklist: custom_checkbox: true - attr_list - md_in_html - toc: permalink: true # プラグイン設定 plugins: - search: lang: ja - git-revision-date-localized: type: date # 追加CSS・JavaScript extra_css: - stylesheets/extra.css extra_javascript: - javascripts/extra.js # カスタム変数 extra: version: 1.0.0 social: - icon: fontawesome/brands/github link: https://github.com/username - icon: fontawesome/brands/twitter link: https://twitter.com/username ``` ### ドキュメントコンテンツの作成 ```markdown <!-- docs/index.md --> # プロジェクト概要 このサイトは技術ドキュメントの包括的なガイドです。 ## 特徴 !!! info "重要な情報" このプロジェクトはPython 3.8以上が必要です。 ### 主要機能 - [x] 高速なAPI処理 - [x] 安全な認証システム - [ ] 多言語対応(開発中) ## インストール ```bash pip install my-project ``` ### 基本的な使用方法 ```python import my_project # クライアントの初期化 client = my_project.Client(api_key="your-api-key") # データの取得 data = client.get_data() print(data) ``` ## コード例 === "Python" ```python def hello_world(): return "Hello, World!" print(hello_world()) ``` === "JavaScript" ```javascript function helloWorld() { return "Hello, World!"; } console.log(helloWorld()); ``` === "Bash" ```bash #!/bin/bash echo "Hello, World!" ``` ## 次のステップ 1. [インストールガイド](getting-started/installation.md)を確認 2. [クイックスタート](getting-started/quickstart.md)でプロジェクトを開始 3. [APIリファレンス](api/authentication.md)で詳細を学習 --- <!-- docs/api/authentication.md --> # 認証 ## 概要 APIアクセスにはAPIキーによる認証が必要です。 !!! warning "セキュリティ注意" APIキーは秘密情報として適切に管理してください。 ## APIキーの取得 1. [開発者ポータル](https://dev.example.com)にアクセス 2. アカウントを作成またはログイン 3. 新しいAPIキーを生成 ## 認証方法 ### ヘッダー認証 ```http GET /api/v1/data HTTP/1.1 Host: api.example.com Authorization: Bearer YOUR_API_KEY Content-Type: application/json ``` ### クエリパラメータ認証 ```http GET /api/v1/data?api_key=YOUR_API_KEY HTTP/1.1 Host: api.example.com ``` ## エラーハンドリング | ステータスコード | 説明 | 解決方法 | |-----------------|------|----------| | 401 | 認証エラー | APIキーを確認 | | 403 | 権限不足 | アクセス権限を確認 | | 429 | レート制限 | しばらく待ってから再試行 | !!! example "認証例" ```python import requests headers = { 'Authorization': 'Bearer YOUR_API_KEY', 'Content-Type': 'application/json' } response = requests.get( 'https://api.example.com/v1/data', headers=headers ) if response.status_code == 200: data = response.json() print(data) else: print(f"Error: {response.status_code}") ``` ``` ### テーマカスタマイズとスタイリング ```yaml # mkdocs.yml - 高度なテーマ設定 theme: name: material language: ja # カスタムディレクトリ(オーバーライド用) custom_dir: overrides/ # カラーパレット設定 palette: - media: "(prefers-color-scheme: light)" scheme: default primary: blue accent: blue toggle: icon: material/brightness-7 name: Switch to dark mode - media: "(prefers-color-scheme: dark)" scheme: slate primary: blue accent: blue toggle: icon: material/brightness-4 name: Switch to light mode # フォント設定 font: text: Roboto code: Roboto Mono # ファビコン favicon: assets/favicon.png # ロゴ logo: assets/logo.png # 機能設定 features: - announce.dismiss - content.action.edit - content.action.view - content.code.annotate - content.code.copy - content.code.select - content.tooltips - navigation.footer - navigation.indexes - navigation.instant - navigation.instant.prefetch - navigation.instant.progress - navigation.path - navigation.prune - navigation.sections - navigation.tabs - navigation.tabs.sticky - navigation.top - navigation.tracking - search.highlight - search.share - search.suggest - toc.follow ``` ```css /* docs/stylesheets/extra.css */ :root { --md-primary-fg-color: #1976d2; --md-primary-fg-color--light: #42a5f5; --md-primary-fg-color--dark: #1565c0; --md-accent-fg-color: #ff4081; } /* カスタムアドモニション */ .md-typeset .admonition.custom, .md-typeset details.custom { border-color: #448aff; } .md-typeset .custom > .admonition-title, .md-typeset .custom > summary { background-color: #448aff1a; border-color: #448aff; } .md-typeset .custom > .admonition-title::before, .md-typeset .custom > summary::before { background-color: #448aff; mask-image: var(--md-admonition-icon--note); } /* コードブロックのカスタマイズ */ .md-typeset .highlight pre { border-radius: 0.2rem; } /* ナビゲーションの調整 */ .md-nav__title { font-weight: 700; } /* フッターのカスタマイズ */ .md-footer { background-color: var(--md-footer-bg-color); } /* レスポンシブ調整 */ @media screen and (max-width: 76.1875em) { .md-nav--primary .md-nav__title { background-color: var(--md-primary-fg-color); } } ``` ### プラグイン設定と機能拡張 ```yaml # mkdocs.yml - プラグイン設定 plugins: # 検索機能 - search: lang: - ja - en separator: '[\s\-,:!=\[\]()"/]+|(?!\b)(?=[A-Z][a-z])|\.(?!\d)|&[lg]t;' # Git情報プラグイン - git-revision-date-localized: enable_creation_date: true type: timeago timezone: Asia/Tokyo locale: ja # Git著者情報 - git-authors: show_contribution: true show_line_count: true count_empty_lines: false # Mermaidダイアグラム - mermaid2: arguments: theme: neutral # タグ機能 - tags: tags_file: tags.md # マクロ機能 - macros: include_dir: docs/includes # PDF出力 - pdf-export: verbose: true media_type: print enabled_if_env: ENABLE_PDF_EXPORT # API文書生成 - mkdocstrings: handlers: python: options: docstring_style: google show_source: true # 多言語対応 - i18n: default_language: ja languages: ja: name: 日本語 build: true en: name: English build: true nav_translations: en: ホーム: Home 導入: Getting Started APIリファレンス: API Reference ガイド: Guides リリースノート: Release Notes # Markdown拡張機能詳細設定 markdown_extensions: # メタデータ - meta # 目次 - toc: permalink: true baselevel: 1 separator: "_" # アドモニション - admonition - pymdownx.details - pymdownx.superfences: custom_fences: - name: mermaid class: mermaid format: !!python/name:pymdownx.superfences.fence_code_format # コードハイライト - pymdownx.highlight: anchor_linenums: true line_spans: __span pygments_lang_class: true - pymdownx.inlinehilite - pymdownx.snippets: check_paths: true # タブ - pymdownx.tabbed: alternate_style: true # タスクリスト - pymdownx.tasklist: custom_checkbox: true # 数式 - pymdownx.arithmatex: generic: true # 絵文字 - pymdownx.emoji: emoji_index: !!python/name:materialx.emoji.twemoji emoji_generator: !!python/name:materialx.emoji.to_svg # 略語 - abbr # 定義リスト - def_list # HTML属性 - attr_list - md_in_html # 脚注 - footnotes # キーボードショートカット - pymdownx.keys # マーク・挿入・削除 - pymdownx.mark - pymdownx.caret - pymdownx.tilde # SmartSymbols - pymdownx.smartsymbols # 追加の設定 extra: version: provider: mike default: latest analytics: provider: google property: G-XXXXXXXXXX consent: title: Cookie consent description: >- We use cookies to recognize your repeated visits and preferences, as well as to measure the effectiveness of our documentation and whether users find what they're searching for. With your consent, you're helping us to make our documentation better. social: - icon: fontawesome/brands/github link: https://github.com/username - icon: fontawesome/brands/twitter link: https://twitter.com/username - icon: fontawesome/brands/linkedin link: https://linkedin.com/in/username generator: false ``` ### デプロイメントとCI/CD設定 ```yaml # .github/workflows/docs.yml - GitHub Actions name: Build and Deploy Documentation on: push: branches: [ main ] pull_request: branches: [ main ] permissions: contents: read pages: write id-token: write concurrency: group: "pages" cancel-in-progress: false jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup Python uses: actions/setup-python@v4 with: python-version: '3.11' - name: Cache pip dependencies uses: actions/cache@v3 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} restore-keys: | ${{ runner.os }}-pip- - name: Install dependencies run: | python -m pip install --upgrade pip pip install mkdocs-material pip install mkdocs-git-revision-date-localized-plugin pip install mkdocs-git-authors-plugin pip install mkdocstrings[python] pip install mkdocs-mermaid2-plugin - name: Build documentation run: | mkdocs build --verbose --strict - name: Setup Pages uses: actions/configure-pages@v3 - name: Upload artifact uses: actions/upload-pages-artifact@v2 with: path: './site' deploy: if: github.ref == 'refs/heads/main' environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} runs-on: ubuntu-latest needs: build steps: - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v2 ``` ```bash # 本番ビルドとデプロイメント # 1. 依存関係のインストール pip install -r requirements.txt # requirements.txt例 cat > requirements.txt << EOF mkdocs>=1.5.0 mkdocs-material>=9.0.0 mkdocs-git-revision-date-localized-plugin mkdocs-git-authors-plugin mkdocstrings[python] mkdocs-mermaid2-plugin pymdown-extensions EOF # 2. ローカル本番ビルドテスト mkdocs build --strict --verbose # 3. サイトの確認 ls -la site/ find site -name "*.html" | head -5 # 4. GitHub Pagesデプロイ mkdocs gh-deploy --force # 5. カスタムサーバーデプロイ mkdocs build rsync -avz --delete site/ [email protected]:/var/www/docs/ # 6. Dockerを使用したビルド docker run --rm -v $(pwd):/docs squidfunk/mkdocs-material build # 7. Netlifyデプロイ用設定 # netlify.toml cat > netlify.toml << EOF [build] publish = "site" command = "pip install -r requirements.txt && mkdocs build" [build.environment] PYTHON_VERSION = "3.11" EOF # 8. バージョン管理(mike使用) pip install mike mike deploy --push --update-aliases 1.0 latest mike set-default --push latest ```