Pythonドックストリングの漏れを爆速検出!pydoclint でコードドキュメントを自動チェック

タグ Pythonpydoclintドックストリング静的解析linterpre-commitCI/CDコードドキュメントcolumnコラムlinuxLinuxwindowsWindowsGitHubオープンソースjsh9
🚀 今すぐ試せます! デモスクリプトをダウンロードして、解凍後にターミナルで bash ファイル名.sh を実行してください(中身を一度確認してから実行すると安心です)。 (macOS / Linux 環境が必要)

Pythonドックストリングの漏れを爆速検出!pydoclint でコードドキュメントを自動チェック

ひとことでいうと

pydoclint は、Python の関数やメソッドに書いたドックストリング(コード内の説明文)が、実際のコードと食い違っていないかを自動で調べてくれるツールです。引数の説明漏れ・型の書き間違い・戻り値の記述ミスなどを、コマンド一発で発見できます。同じ役割を持つ有名ツール darglint と比べ、大規模プロジェクトでは数千倍速く動くことが計測されており、実務のチームにも無理なく導入できます。コードを書く人なら誰でも使える、頼れる品質チェッカーです。


こんな人におすすめ

1. チーム開発でレビューの手間を減らしたい人 プルリクエスト(コードの変更提案)のたびに「この引数、ドックストリングに書いてある?」と人間が目で確認するのは大変です。pydoclint を CI(継続的インテグレーション=コードを自動でテストする仕組み)に組み込めば、説明の抜けをツールが自動で指摘してくれます。レビュワーがドキュメントの不整合を探す手間が大幅に減ります。

2. ライブラリのドキュメントを一定の品質に保ちたい人 numpy・Google・Sphinx という3つの主要なドックストリングの書き方に対応しています。プロジェクトの規約に合わせて検査スタイルを選べるので、公開ライブラリでも社内の共通コードでも、一貫した品質をツールで保証できます。

3. 古いコードにドックストリングを少しずつ追加していきたい人 「baseline(ベースライン)」という機能を使えば、今ある違反をいったん棚上げにして、新しく追加したコードの問題だけを検出できます。一気に全部直さなくても、少しずつ品質を上げていける設計になっています。


インストール・使い方

ターミナルとは:文字を打ち込んでパソコンに命令を送る画面のことです。Mac なら「ターミナル」、Windows なら「コマンドプロンプト」や「PowerShell」が該当します。以下のコマンドはコピー&ペーストで実行できます。

Step 1: インストールする

Python 3.8 以上が入っていれば、次の一行でインストールできます。

pip install pydoclint

pip は Python のパッケージ(部品)をインターネットから取得して入れるコマンドです。flake8(別の静的解析ツール)と一緒に使いたい場合は次のコマンドを使います。

pip install pydoclint[flake8]

Step 2: ファイルやフォルダを検査する

インストールが終わると pydoclint というコマンドが使えるようになります。--style で書き方のスタイルを指定し、調べたいファイルやフォルダを続けて書きます。

pydoclint --style=google src/

src/ の部分には検査したいフォルダ名を入れます。違反が見つかるとファイル名・行番号・違反コードが表示されます。問題がなければ何も表示されずに終了します。

Step 3: flake8 プラグインとして使う

flake8 経由で実行すると、他の検査ルールと組み合わせて一度にまとめてチェックできます。--select=DOC を付けると pydoclint の結果だけに絞り込めます。

flake8 --select=DOC src/

pydoclint の違反コードはすべて DOC で始まるので、フィルタリングが簡単です。

Step 4: コミット前に自動チェックを走らせる(pre-commit)

.pre-commit-config.yaml というファイルに以下を追加すると、Git でコミット(変更を保存)するたびに自動でチェックが実行されます。<latest_tag> の部分は GitHub の releases ページで最新のバージョン番号を確認して書き換えてください。

- repo: https://github.com/jsh9/pydoclint
  rev: <latest_tag>
  hooks:
    - id: pydoclint
      args: [--style=google, --check-return-types=False]

コミット前に問題を自動検出できるので、チーム全体のコード品質を底上げできます。


動かしてみた

Python 3.12.13 の環境で pip install pydoclint を実行したところ、問題なく完了しました。コマンドラインから pydoclint がすぐ使える状態になりました。

リポジトリ内には tests/test_end_to_end.pytests/test_edge_cases.py など充実したテストファイルが含まれており、さまざまな書き方のパターンに対して動作確認が積み重ねられていることがわかります。また docs/ フォルダには設定オプション・違反コードの一覧・利用時の注意事項など、詳しいドキュメントがまとまっています。

試しに引数の説明が一部欠けたファイルを用意して検査すると、どのファイルの何行目で何が足りないかが的確に表示されました。大きなコードベースでも検査時間は非常に短く、実務での継続利用に十分な速度です。


ブラウザで試す(デモ)

インストールしなくても、ブラウザ上で Python コードを入力して検査結果をリアルタイムに確認できるデモが公開されています。Google・numpy・Sphinx の各スタイルを切り替えながら、引数の説明漏れや型ヒントの不一致がどのように検出されるかを気軽に試せます。まずはデモで感触をつかんでから、本格的に導入するかどうか検討するのがおすすめです。


実践:はじめの一歩でやっておきたいこと

  • まず1ファイルだけ試す: いきなりプロジェクト全体に走らせると結果が大量になることがあります。小さなファイルひとつから始めて、出力の読み方に慣れましょう。
  • スタイルを先に決める: --style の指定(google / numpy / sphinx)はプロジェクト全体で統一することが大切です。途中で変えると検査ルールが変わり、新たな違反が大量に出てしまいます。
  • CI に組み込む前に一度ローカルで全体チェック: pydoclint --style=google . でプロジェクト全体を一度チェックし、違反数を把握しておきましょう。多い場合は --generate-baseline で既存違反を棚上げしてから CI に入れると混乱が少ないです。
  • 違反コードを辞書代わりに使う: DOC101(引数の記載漏れ)など、コードの意味を調べると何を直すべきかが明確になります。docs/ フォルダの違反コード一覧は手元にブックマークしておくと便利です。
  • 型ヒントとセットで管理する: 関数の型ヒント(def func(x: int) -> str:)とドックストリングの型表記が一致しているかも自動で確認してくれます。型ヒントを変えたら必ずドックストリングも一緒に更新する習慣をつけましょう。

用語とポイント解説

ドックストリング(docstring) Python のコードの中で、関数・クラス・モジュールの直後に書く説明文のことです。かんたんに言うと「コードの取扱説明書」です。""" で囲んで書きます。IDEやドキュメント生成ツールがこの説明文を自動で読み取って活用します。

静的解析ツール(リンター) コードを実際に動かさずに、書き方のルール違反や不整合を検出するプログラムです。かんたんに言うと「文法チェッカー」です。コードを実行する前に問題を見つけられるので、バグを早期に発見できます。

型ヒント(type hint) Python の関数定義で、引数や戻り値の「型(データの種類)」を明示する書き方のことです。かんたんに言うと「この変数は数値です・文字列です、と事前に宣言する仕組み」です。def func(x: int) -> str: のようにコロンと矢印で書きます。pydoclint はこの型ヒントとドックストリングの型表記が一致しているかも確認します。

CI(継続的インテグレーション) コードをチームの共有リポジトリ(ソースコードの置き場所)に送るたびに、テストや検査を自動で実行する仕組みのことです。かんたんに言うと「コードを送ったら自動でチェックが走る仕組み」です。GitHub Actions や CircleCI などのサービスを使って設定します。

pre-commit フック Git でコミット(変更を保存)する直前に自動で走らせるスクリプトや検査のことです。かんたんに言うと「保存ボタンを押す前に自動でチェックする仕掛け」です。問題があるとコミット自体が止まり、修正を促してくれます。

baseline(ベースライン)機能 現時点の違反一覧をファイルに記録しておき、それ以降に「新たに追加された違反だけ」を検出するモードです。かんたんに言うと「今の問題は許容して、これから増える問題だけを検知するモード」です。大量の既存違反がある大規模プロジェクトへの段階的な導入に役立ちます。

flake8 プラグイン flake8 という別の Python 検査ツールの拡張として動作するモードです。かんたんに言うと「すでに flake8 を使っているプロジェクトに、追加の機能として組み込める形」です。pip install pydoclint[flake8] でインストールでき、既存の検査設定に数行追加するだけで使い始められます。

違反コード(DOCxxx) pydoclint が検出した問題に付けられる識別番号です。かんたんに言うと「どの種類のミスかを示す番号」です。DOC1xx は引数関連、DOC2xx は戻り値関連、DOC5xx は例外関連など、カテゴリごとに番号が割り当てられています。番号を見れば何を修正すればよいか一目でわかります。

pydocstyle との関係 pydocstyle は「ドックストリングが存在するかどうか」を確認するツールです。かんたんに言うと「説明文があるかをチェックするツール」です。pydoclint はその一歩先で「説明文の内容が正しいか」を確認します。両方を組み合わせることで、「存在する・かつ内容が正確」という二重の品質チェックが実現します。

yield 文 / Generator 関数 yield は通常の return とは異なり、値を少しずつ順番に返すための Python の命令です。かんたんに言うと「一度にすべてを返さず、必要なぶんだけ順番に渡す関数を作る命令」です。pydoclint はこのような関数のドックストリングに Yields セクションが書かれているかも確認します(DOC4xx 系の違反コード)。


活用アイデア

  • GitHub Actions との連携: プルリクエストのたびに pydoclint を自動実行し、マージ前にドックストリングの品質を担保するワークフローを構築できます。設定は数行の YAML ファイルで完結します。説明文の漏れを含むコードがメインブランチに混入するリスクを防げます。

  • 段階的なドキュメント改善: --generate-baseline フラグで既存の違反を一時棚上げにして、新しく追加したコードの問題だけを即座に確認できます。「まず新規コードから徹底する、古いコードは少しずつ」という現実的なアプローチが取れます。

  • 型ヒントとの整合性チェック: --check-return-types=True(デフォルト設定)にすることで、関数の型ヒントとドックストリングの型表記が一致しているかを同時に確認できます。型定義を変更したときにドックストリングの更新を忘れるというミスを防ぎます。

  • オープンソースライブラリの品質管理: 公開ライブラリでは、外部の開発者が API のドックストリングを頼りに実装することが多いです。pydoclint を導入することで、引数の説明漏れや型の食い違いをリリース前に自動検出し、利用者が混乱する状況を防げます。

  • 教育・学習目的での活用: Python を学んでいる学生や研修中のエンジニアに「ドックストリングの書き方ルール」を身に付けさせる用途にも使えます。違反コードを参照しながら「なぜこの書き方が問題なのか」を理解する教材として活用できます。

  • コードレビューの自動化補助: チームで「ドックストリングの完全性はツールに任せる」というルールを作ることで、レビュワーがより本質的なロジックのレビューに集中できます。ツールでチェックできることは人間がやらないという分業が実現します。


まとめ

pydoclint は、Python のドックストリングとコードの間の「ズレ」を自動で発見してくれる、軽量で高速な静的解析ツールです。インストールはコマンド一行、実行もコマンド一行で済みます。CI に組み込めばチーム全体の品質を底上げでき、baseline 機能を使えば大規模プロジェクトへの段階的な導入も無理なく進められます。

ぜひ GitHub Actions を使った自動ドキュメントチェックや、pre-commit フックを使ったコミット前の品質確認などに活用してみてはいかがでしょうか。