メインコンテンツへスキップ

【Python】Ruffでdocstringsのスタイルをチェックする

·1630 文字·4 分
目次

はじめに
#

PythonのリンターRuffのpydocstyleプラグインを使い、docstringsのスタイルをチェックする方法を調査しました。

検証環境は以下の通りです。

  • Windows 10 Home 22H2
  • Python 3.13.1
  • Ruff 0.11.0

Ruffとpydocstyle
#

RuffはPythonのリンター機能やフォーマッタ機能を持つツールです。 リンターとはソースコードの潜在的なバグやコーディングスタイルの違反がないかチェックするツールで、フォーマッタとはコーディングスタイルに合わせてコードを整形するツールです。

pydocstyleとは、もともとPythonのdocstringsがルールに合わせて記述されているかチェックするツールとして開発されていました。 しかし、2023年に開発が終了し、現在はRuffに1オプションとして組み込まれています。

pydocstyle機能を使う
#

Ruffの以下のコマンドを実行すると、pydocstyleのプラグインを使ってdocstringsのスタイルをチェックできます(設定ファイルを使用すると--select Dオプションは省略可能)。 スタイルの違反がある場合、エラーの内容とともに表示されます。

ruff check --select D foo.py

foo.pyは対象のスクリプトファイルやフォルダに変更して下さい。

さらに--fixオプションを付けると、自動で修正可能な違反については修正されます。

ruff check --fix --select D foo.py

ファイルを変更せずに差分をターミナルに表示したい場合、以下のように--diffオプションを付けます。

ruff check --diff --select D foo.py

pydocstyle機能の設定
#

Ruffの設定をpyproject.tomlに記述することができます。例を以下に示します。

[tool.ruff.lint]
select = ["D"]
ignore = ["D415"]

[tool.ruff.lint.pydocstyle]
convention = "google"

selectはRuffのリンター機能で有効にするプラグインを示します。 そのため、select = ["D"]とするとpydocstyle以外のリンター機能は無効になります。 デフォルトのリンター機能を有効にしたままpydocstyleを追加する場合、select = ["E4", "E7", "E9", "F", "B", "D"]として下さい。

ignoreには無効にするエラー番号を定義します(複数定義可能)。

conventionには、docstringsのスタイルを指定します。 "google" | "numpy" | "pep257"から選択します。 指定するconventionによって、一部ルールの有効・無効が変化します。

pydocstyleのエラー番号
#

Ruffのpydocstyle機能には約50個のルールが定義されています。 いずれもD203のように、Dと100~419の3桁の整数で表現されます。 これらは以下のように百の位でグループ分けされています。

  • D100番台:docstringの未定義
  • D200番台:docstring内や前後の改行・インデントに関連
  • D300番台:docstringを囲むトリプルクォート"""に関連
  • D400番台:句読点や大文字・小文字、コロンなどの記法に関連

先ほどignoreで無効にするエラー番号を指定しましたが、例えばD4のように指定すると、D400D415などD4から始まるエラーは全て無効になります。 D41としても同様に、D41から始まるエラーは全て無効になります。

pydocstyle機能のエラー番号の一覧は以下にあります。

Rules - Ruff

D100番台を見ると、パブリックメソッドにはdocstringが必要ですが、プライベートメソッドには必須ではありません。

また、docstringを日本語で書く場合、無効にすることを検討したいルールには以下があります。

  • D400: docstringの1行目が.で終わっていない(NumPy, pep257スタイルのみ有効)
  • D415: docstringの1行目が., !, ?などで終わっていない(Googleスタイルのみ有効)

参考
#

Helve
著者
Helve
関西在住、電機メーカ勤務のエンジニア。X(旧Twitter)で新着記事を配信中です

関連記事

【Python】blackとisortをRuffで置き換える
·2144 文字·5 分
PythonのフォーマッタblackとisortをRuffに置き換える設定方法を調査しました。
Jupyter Bookで作成したサイトにPlotlyのグラフを埋め込む
·1205 文字·3 分
Jupyter Bookで作成したサイトにPlotlyのインタラクティブなグラフを埋め込む方法を解説します。
Pyomoのインデックスを作成するSetクラスとRangeSetクラス
·2207 文字·5 分
Pythonの最適化モデリングツールPyomoで、パラメータや変数、制約式のインデックスを作成できるSetクラスとRangeSetクラスについて詳しくまとめました。
【Python】dataclassの継承と初期値・型ヒント・メソッドのオーバーライド
·2442 文字·5 分
Pythonのdataclassを継承して派生クラスを作る方法、および初期値・型ヒント・メソッドのオーバーライドについて解説します。
pyproject.tomlからpip installコマンドでPythonのライブラリをインストールする
·1918 文字·4 分
Pythonのパッケージ設定ファイルpyproject.tomlに記載されたPythonのパッケージを、パッケージ管理システムpipでインストールする方法を解説します。
【Python】PylintのW0611 (unused-import) などのメッセージを抑制する
·1496 文字·3 分
Pythonのコード分析ツールPylintから出力されるメッセージを抑制する方法について、W0611 (unused-import)警告を例に解説します。