docvet について
docvetは、Pythonのdocstringを検査するCLIで、開発者やコードレビューのワークフローを対象とします。構造上の不足、Git履歴に基づく古さの兆候、レンダリング診断、カバレッジをまとめて確認します。古さの兆候は意味上の正確さを証明するものではありません。
主な機能
- 01docstringの有無とカバレッジを検査
- 02コード構造と記述されたセクションを照合
- 03Git履歴から古さの可能性を検出
- 04Griffeのレンダリング診断を確認
- 05`__init__.py` がないディレクトリを検出
活用シーン
- 01CIでPythonドキュメントの品質を検査
- 02コミット前にdocstringの不足セクションを発見
- 03コード変更後に古くなった可能性のある説明を確認
- 04LSPまたはMCPでエディターやエージェントに検査を統合
MCP 対応
`docvet mcp` でMCPサーバーを起動し、AIエージェント連携にdocstring検査機能を提供できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
docvet
より良い docstring が、より良い AI を実現します。
docvet を使う理由
docvet は、docstring の有無に関するメトリクス、構造チェック、履歴に基づく古さの兆候、レンダラーの診断を、エディターやエージェントとのインターフェースを備えた 1 つの CLI に統合します。これらのチェックは、レビュアーがドキュメントの不足を見つけるのに役立ちますが、文章が実行時の動作を正しく説明していることを証明するものではありません。
| レイヤー | チェック | ruff | interrogate | pydoclint | docvet |
|---|---|---|---|---|---|
| 1. 有無 | 「docstring は存在しますか?」 | あり(D ルール、オプトイン) | あり、カバレッジメトリクス付き | docstring がない場合はスキップ | あり、カバレッジメトリクス付き |
| 2. スタイル | 「一貫した形式になっていますか?」 | あり(D ルール、オプトイン) | -- | 一部の解析/スタイルチェック | 形式チェックは限定的 |
| 3. 完全性 | 「セクションとコード構造は一致していますか?」 | 一部対応(D ルール、プレビューでは DOC ルール) | -- | 引数、戻り値、yield、例外、属性、型ヒント | AST ベースのセクションおよび整合性チェック |
| 4. 正確性 | 「古さの観点から何をレビューする必要がありますか?」 | 上記の構造チェック | -- | 上記の構造チェック | Git diff/blame のヒューリスティック。意味上の正しさは証明しません |
| 5. レンダリング | 「パーサーの警告はありますか?」 | -- | -- | -- | Griffe の診断 |
| 6. 可視性 | 「パッケージの検出が不完全ですか?」 | -- | -- | -- | __init__.py の不足チェック |
比較は、主要ドキュメントに基づいて 2026-10-21 に確認しました。対象は Ruff の D103 有無ルール と DOC501 例外の完全性ルール(--preview とルールの選択が必要)、pydoclint が対応するチェックとスタイル、interrogate のカバレッジに関するドキュメントです。機能は有効にしたルールと設定によって異なります。-- は、これらの情報源に該当するチェックの説明がないことを意味します。
pydoclint は、Google、NumPy、Sphinx の各スタイルで、引数、戻り値、yield、例外、クラス属性、型ヒントをチェックします。docvet の拡張機能だけでも 21 のルールがあり、Raises、Yields、Receives、Warns、Attributes、Examples、相互参照、パラメーターの整合性などが含まれます。有無(カバレッジメトリクス+しきい値の適用)、鮮度(git diff/blame による古さの兆候)、griffe のレンダリング互換性、mkdocs のカバレッジを加えると、5 種類のチェックにわたる 32 のルールになります。ルール数はカタログ内の項目数を示すもので、ツール間で同等のカバレッジがあることを示すものではありません。
構造の整合性チェックでは、ドキュメントに記載された要素とコード構造を比較します。鮮度チェックでは、変更履歴を使ってレビューを提案します。コードが変更されても文章が無効になるとは限らず、コードと docstring を同時に編集しても、文章が誤ったままになることがあります。どちらも意味上の正しさを確立するものではありません。
クイックスタート | GitHub Action | Pre-commit | 設定 | AI エージェントとの連携 | ドキュメント
チェック項目
存在(有無)— 2 ルール:
missing-docstring overload-has-docstring
補完(完全性)— 21 ルール:
missing-raises missing-returns missing-yields missing-receives missing-warns missing-deprecation missing-param-in-docstring extra-param-in-docstring missing-other-parameters missing-attributes undocumented-init-params missing-typed-attributes missing-examples missing-cross-references extra-raises-in-docstring extra-yields-in-docstring extra-returns-in-docstring missing-return-type trivial-docstring prefer-fenced-code-blocks scaffold-incomplete
鮮度(古さのシグナル)— 5 ルール:
stale-signature stale-body stale-import stale-drift stale-age
Griffe(レンダリング)— 3 ルール:
griffe-unknown-param griffe-missing-type griffe-format-warning
カバレッジ(可視性)— 1 ルール:
missing-init
クイックスタート
pip install docvet && docvet check --all
オプションの Griffe レンダリングチェックを行う場合:
pip install docvet[griffe]
出力例:
src/mypackage/helpers.py:1: missing-docstring Module has no docstring [required]
src/mypackage/utils.py:42: missing-raises Function 'parse_config' raises ValueError but has no Raises section [required]
src/mypackage/models.py:15: stale-signature Function 'process' signature changed but docstring not updated [required]
src/mypackage/api.py:1: missing-init Package directory missing __init__.py (invisible to mkdocs) [required]
設定
pyproject.toml の [tool.docvet] で設定します。すべてのチェックが実行され、検出結果が表示されます。fail-on に指定したチェックで終了コードが 0 以外になります。指定されていないチェックは警告として扱われます。
fail-on に指定したチェックを実行できない場合(多くの場合、docvet[griffe] エクストラを指定せずに griffe を実行した場合)、設定したゲートの検証は完了しません。そのため、docvet は標準エラー出力に報告し、終了コード 1 で終了します。--format json を指定すると、run オブジェクトに status: "unavailable" と unavailable_checks 配列が出力され、問題が見つかったゲートと区別できます。代わりに警告を出して終了コード 0 にするには、fail-on-unavailable = false を設定するか、--no-fail-on-unavailable を渡します。ゲートの対象になっていないチェックが利用できない場合は、何も出力せずにスキップされます。ただし、ゲートの対象となる条件は fail-on への指定だけではありません。たとえば、min-coverage の下限を設定すると、そこで名前を指定しなくても presence がゲートの対象になります。
[tool.docvet]
exclude = ["tests", "scripts"]
fail-on = ["griffe", "coverage"]
[tool.docvet.freshness]
drift-threshold = 30
age-threshold = 90
Pre-commit
.pre-commit-config.yaml に追加します。
repos:
- repo: https://github.com/Alberto-Codes/docvet
rev: v3.0.0
hooks:
- id: docvet
Griffe レンダリングチェックを行う場合は、オプションの依存関係を追加します。
repos:
- repo: https://github.com/Alberto-Codes/docvet
rev: v3.0.0
hooks:
- id: docvet
additional_dependencies: [griffe]
GitHub Action
GitHub Actions のワークフローに docvet を追加すると、検出結果が PR 上のインライン注釈として表示されます。
- uses: Alberto-Codes/[email protected]
特定のチェックを選択するか、バージョンを固定できます。
- uses: Alberto-Codes/[email protected]
with:
checks: 'enrichment,freshness'
docvet-version: '3.0.0'
python-version: '3.13'
Griffe レンダリングチェックに特別な設定は必要ありません。このアクションは、固定するかどうかにかかわらず docvet[griffe] をインストールするため、checks 入力で選択できるすべてのチェックが利用可能です。1.7.0 より前の docvet リリースでは、このエクストラに上限が設定されていません。そのため、バージョンを固定しても、docvet のリリース時に検証されたバージョンではなく、その時点で公開されている Griffe がインストールされる点にご注意ください。
動作変更 — これにより、成功していたビルドが失敗することがあります。
以前のリリースでは通常の
docvetをインストールしていたため、Griffe チェックはスキップされ、検出結果にも何も追加されませんでした。現在は実行されます。determine_run_outcome(src/docvet/reporting.py)は、fail-onに指定されたチェックで検出結果があると、直ちに終了コード 1 を返します。そのため、pyproject.tomlの[tool.docvet] fail-onにgriffeが含まれている場合、こちらで何も変更していなくても、ビルドは成功から失敗に変わります。このリポジトリのci.ymlにある docvet ジョブが、まさにこの影響を受けます。これは新たな問題ではありません。これまでずっと問題のあった docstring に対して、チェックがようやく実行されたということです。成功状態に戻すには、Griffe の検出結果を修正するか、
fail-onからgriffeを削除してください。
AI エージェントとの統合
ツールごとの統合スニペットについては、AI エージェントとの統合ガイド全文をご覧ください。
AI コーディングのワークフローに docvet を追加します。以下を CLAUDE.md、.cursorrules、またはエージェントの設定に追加してください。
## Docstring Quality
After modifying Python functions, classes, or modules, run `docvet check` and fix all findings before committing.
推奨する pyproject.toml の設定:
[tool.docvet]
fail-on = ["enrichment", "freshness", "coverage", "griffe"]
サブコマンドのクイックリファレンス
| コマンド | 説明 |
|---|---|
docvet check | 有効になっているすべてのチェックを実行します(デフォルトでは git diff のファイルが対象です) |
docvet check --all | コードベース全体を対象にすべてのチェックを実行します |
docvet check --staged | ステージ済みファイルのみを対象にすべてのチェックを実行します |
docvet presence | カバレッジ指標を使って、docstring の不足をチェックします |
docvet enrichment | docstring セクションの不足をチェックします |
docvet freshness | git を使って、古くなっている可能性のある docstring を検出します |
docvet freshness --mode drift | git blame を使って、古くなっている可能性がある箇所を確認します |
docvet coverage | mkdocs から見えないファイルを検出します |
docvet griffe | mkdocs のレンダリング互換性をチェックします |
docvet fix | 不足している docstring セクションのひな形を作成します |
docvet fix --dry-run | ファイルを書き換えずに、ひな形の変更をプレビューします |
docvet config | ソースの注釈付きで有効な設定を表示します |
docvet lsp | リアルタイムのエディター診断用に LSP サーバーを起動します |
docvet mcp | AI エージェントとの統合用に MCP サーバーを起動します |
より良い docstring で、より優れた AI を
AI コーディングエージェントは、コードの生成や変更時に docstring をコンテキストとして利用します。エージェントはコードを変更しても、docstring を古いままにすることがよくあります。また、調査によると、古いドキュメントや不正確なドキュメントは、ドキュメントがない場合よりも有害です。
- 不正確なドキュメントは、LLM のタスク成功率を 22.6 パーセントポイント低下させます
- コメント密度は、コード生成の性能を 40~54% 向上させます
- 誤解を招くコメントは、LLM の障害箇所特定精度を 24.55% まで低下させます
- docstring がないと、性能が大幅に低下します
2025 DORA レポートの言葉を借りると、「AI はチームを変えるのではなく、すでにあるものを増幅します。」AI による生産性と相関する唯一のシグナルはコード品質です。
docvet の鮮度ヒューリスティクスは、確認が必要な古い可能性のある箇所を検出し、エンリッチメントルールは、サポートされている docstring セクションとコード構造を照合します。CI、pre-commit フック、またはエージェントのツールチェーンで docvet check を実行してください。
バッジ
ドキュメントが検証済みであることを示すバッジをプロジェクトに追加できます。
[](https://github.com/Alberto-Codes/docvet)
使用プロジェクト
docvet を使用していますか?プルリクエストを作成して、ここにプロジェクトを追加してください。
ライセンス
MIT -- 詳細は LICENSE をご覧ください。
mcp-name: io.github.Alberto-Codes/docvet
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。