パッケージマネージャ検出
検出優先順位 (該当した時点で確定):
| 優先 | 判定条件 | 採用 |
|---|---|---|
| 1 | uv.lock が存在 |
uv |
| 2 | poetry.lock が存在 |
poetry |
| 3 | Pipfile.lock が存在 |
pipenv |
| 4 | .venv/ のみ存在 (lockfile なし) |
plain venv |
| 5 | 上記すべて該当しない | ユーザー問い合わせ (推奨: uv) |
実行コマンド対応表:
| 操作 | uv | poetry | pipenv | plain venv |
|---|---|---|---|---|
| 依存追加 (docs グループ) | uv add <pkg> --group docs |
poetry add --group docs <pkg> |
pipenv install --dev <pkg> |
pyproject.toml 手動編集 + pip install -e ".[docs]" |
| サブコマンド実行 | uv run <cmd> |
poetry run <cmd> |
pipenv run <cmd> |
venv 有効化後 <cmd> |
| ビルド | uv run make -C docs <target> |
poetry run make -C docs <target> |
pipenv run make -C docs <target> |
source .venv/bin/activate && make -C docs <target> |
エラー伝播ポリシー: 検出した PM のコマンドが PATH に無ければ例外送出 + インストール手順提示。デフォルト値による継続処理は禁止。
発火条件
- ユーザーが「Sphinx ドキュメントを始めたい」「初期化して」「ドキュメント環境作って」と発話
docs/が存在しないリポジトリで Sphinx 関連の質問を受けた場合
実行フロー
1. 前提検証 (失敗時は明示的エラー伝播)
- パッケージマネージャ検出 (上記「パッケージマネージャ検出」セクション参照)
pyproject.toml存在確認 — 不在なら PM ごとの初期化案内- uv:
uv init/ poetry:poetry init/ pipenv:pipenv install/ venv:python -m venv .venv
- uv:
2. 記法選択
ユーザーに以下を提示:
記法を選択してください:
- MyST (Markdown ベース、推奨) —
.mdで執筆- RST (reStructuredText) —
.rstで執筆
デフォルトは MyST。
3. プロジェクト情報取得
PROJECT_NAME:pyproject.tomlのproject.name→ 不在時basename $PWDAUTHOR_NAME:pyproject.tomlのauthors[0].name→git config --get user.name→$USER
4. Sphinx 基本パッケージ追加
検出された PM のコマンドで sphinx を docs グループに追加:
uv add sphinx --group docs
# poetry: poetry add --group docs sphinx
# pipenv: pipenv install --dev sphinx
# plain venv: pyproject.toml の [project.optional-dependencies] に追加 → pip install -e ".[docs]"
5. Sphinx プロジェクト作成
uv run sphinx-quickstart -q -p "$PROJECT_NAME" -a "$AUTHOR_NAME" ./docs
6. MyST 選択時の処理
uv add myst-parser --group docsで myst-parser を追加docs/index.rstを削除し、最小 MyST テンプレートをdocs/index.mdとして書き出す (生成失敗時は明示的エラー伝播):
# Welcome to {{ PROJECT_NAME }}'s documentation!
```{toctree}
:maxdepth: 2
:caption: Contents:
```
## Indices and tables
- {ref}`genindex`
- {ref}`modindex`
- {ref}`search`
既存
.rst(index.rst 以外) を検出した場合: ユーザーに「他の RST ファイルも MyST に変換しますか?」と問い合わせ、希望時はrst-to-mystスキルへ委譲。MyST optional extensions 選択 (15個、カテゴリ別提示):
カテゴリ 拡張名 用途 追加パッケージ 数式 amsmathLaTeX amsmath 環境 — 数式 dollarmath$..$/$$..$$数式— 属性 attrs_inlineインライン属性 — 属性 attrs_blockブロック属性 — リスト deflist定義リスト — リスト tasklistチェックボックスリスト — リスト fieldlistreST フィールドリスト — ブロック colon_fence:::ディレクティブ— ブロック html_admonition<div class="admonition">— ブロック html_image<img>タグ— テキスト replacements記号自動変換 (©等) — テキスト smartquotes引用符変換 — テキスト strikethrough~~..~~取り消し線— テキスト substitutionJinja2 置換 — リンク linkifybare URL 自動リンク化 linkify-it-py推奨セット (チェック済みで提示、オプトアウト可):
amsmath,dollarmath,attrs_inline,colon_fence,deflist,html_admonition,html_image,replacements,smartquotes,strikethrough,substitution,tasklist,fieldlist,linkify。linkify選択時はuv add linkify-it-py --group docs(PM ごとに動的書き換え) を自動実行。最新拡張一覧は WebFetch でhttps://myst-parser.readthedocs.io/en/latest/syntax/optional.htmlから取得し新規追加分を取り込む。
7. Sphinx 拡張パック選択
必須インストール (Makefile livehtml ターゲット依存)
sphinx-autobuild(3rd-party) —extensionsへの追加は不要、dev 依存としてuv add sphinx-autobuild --group docs
デフォルト推奨 (チェック済みで提示、オプトアウト可)
| 拡張 | 種別 | 用途 |
|---|---|---|
sphinx-copybutton |
3rd-party | コードブロックコピーボタン |
sphinx-design |
3rd-party | カード / タブ / グリッド / ドロップダウン |
sphinx.ext.intersphinx |
built-in | クロスリファレンス |
sphinx.ext.napoleon |
built-in | Google/NumPy docstring |
オプショナル (未チェックで提示、選択時にチェック)
| 拡張 | 種別 | 用途 | 連携外部スキル |
|---|---|---|---|
sphinx_oceanid |
3rd-party | Mermaid 図 | gh skill install drillan/sphinx-oceanid mermaid-diagram --scope project |
sphinx.ext.autodoc |
built-in | docstring 自動抽出 | — |
sphinx.ext.viewcode |
built-in | ソースコードリンク | — |
sphinx.ext.todo |
built-in | TODO ディレクティブ | — |
myst-nb |
3rd-party | Jupyter Notebook 統合 | — |
選択された 3rd-party 拡張は検出した PM のコマンドで自動依存追加 (例 uv: uv add <pkg> --group docs)。sphinx_oceanid 選択時は対応する外部スキルのインストール案内を表示。
8. conf.py 反映 — sphinx-config スキルへ委譲
sphinx-config スキルへ以下を渡して委譲:
- 選択された extensions
- 選択された myst_enable_extensions
- 検出された language (
$LANGがja_JP*または既存 language が空 →language = "ja"を提案)
これにより conf.py 編集の単一ロジック (バックアップ・復元・明示的エラー伝播) は sphinx-config のみが保持。
9. Makefile カスタマイズ
sphinx-quickstart 生成 Makefile を以下で置換:
SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build
SOURCEDIR = .
BUILDDIR = _build
PORT ?= 8000
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
@echo " latexpdfja to make LaTeX files and run them through upLaTeX/dvipdfmx"
@echo " livehtml to start sphinx-autobuild dev server (PORT=$(PORT))"
.PHONY: help Makefile latexpdfja livehtml
latexpdfja:
@$(SPHINXBUILD) -M latexpdfja "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
livehtml:
sphinx-autobuild "$(SOURCEDIR)" "$(BUILDDIR)/html" \
--host 0.0.0.0 --port $(PORT) $(SPHINXOPTS) $(O)
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
SPHINXBUILD は sphinx-build のまま (PM 非依存)。PORT=8003 等で上書き可。
10. テストビルド
uv run make -C docs html
失敗時は明示的エラー伝播し処理停止 (生成済みファイルは手動修正を要求)。以後のビルドは sphinx-build スキルへ委譲する旨を案内。
関連スキル
- 委譲先:
sphinx-config(conf.py 編集の単一ロジック)、rst-to-myst(既存 .rst が複数ある場合の移行) - 完了後:
sphinx-build(動作確認)、sphinx-theme(テーマ変更時)、myst-authoring(MyST 選択時の執筆時自動発火) - 外部スキル:
sphinx_oceanid選択時はdrillan/sphinx-oceanidのmermaid-diagramを別途インストール
Source: drillan/sphinx-skills — distributed by TomeVault.