Python Docstringの書き方完全ガイド|主要スタイルの比較と保守性を高める記述

Python Docstringの書き方完全ガイド|主要スタイルの比較と保守性を高める記述

Amazonのアソシエイトとして、ITナレッジライフは適格販売により収入を得ています。

記事の文字数:7,618 / 総アクセス数:66 views

Python Docstringの書き方完全ガイド。PEP 257の基本からGoogle、NumPy、reST主要スタイルを徹底比較。最適な記述ルールやSphinxなどの自動生成ツール活用法まで解説します。初心者でも迷わず、保守性の高い高品質なコードを書く技術を習得し、チーム開発にも役立てましょう。

「python docstring 書き方」を学びたいけれど、GoogleスタイルやNumPyスタイルなど種類が多くて迷っていませんか?適切なドキュメントは、自分やチームの保守性を劇的に高めます。本記事では、PEP 257の基本から主要スタイルの比較、自動生成ツールの活用法まで徹底解説します。

なお、Python全体のコーディング規約については、PEP 8の基本ガイドも併せて参照すると、より統一感のあるコードが書けるようになります。

この記事を読めば、初心者でも迷わず現場で役立つDocstringが書けるようになり、コードの品質を向上させられます。

記事のポイント

  • PEP 257の基本に加え、GoogleやNumPy、reSTといった主要な記述スタイルの特徴とプロジェクトに最適な選び方が理解できます。
  • 関数やクラスの引数・戻り値を明文化することで、自分だけでなく他人も読みやすい保守性の高いコードが書けるようになります。
  • コメント(#)とDocstring(""")の役割の違いを整理し、開発現場で迷わない適切な使い分けを習得できます。
  • Sphinxなどの自動生成ツールやVS Codeの拡張機能を活用して、ドキュメント作成の工数を大幅に削減する手法が分かります。
  • チーム開発に役立つチェックリストにより、プロジェクト全体で統一感のある高品質なドキュメント管理が実現します。

Python Docstringの書き方と主要な記述スタイル

Python Docstringの書き方と主要スタイル PEP 257 基本ルール トリプルクォート(""")を使用 1行目に要約(動作を明示) 詳細説明は空行を挟む 末尾句点を徹底(。やピリオド) 閉じクォートは独立行に """関数の役割を1行で記述する。""" 主要3スタイル比較 Google シンプル 読みやすい Args: Returns: Raises: Examples: 📱 初心者向け NumPy 構造的 情報量多 Parameters ---------- Returns ------- 🔬 科学計算 reST Sphinx連携 公式採用 :param: :type: :returns: :raises: 📚 大規模開発 用途別Docstring 📄 モジュール ファイル先頭に配置 (import文より前) """計算ユーティリティ モジュール。 面積計算機能を 提供。""" ⚙️ 関数 引数・戻り値・例外 を明記 Args: width: 幅 Returns: float: 面積 🏗️ クラス Attributesで 属性を説明 Attributes: width: 幅 height: 高さ 🔧 特殊ケース Dataclass フィールド直下に記述 Enum メンバー直後に説明 型ヒント 意味・制約に注力

Pythonの Docstring(ドキュメント文字列) は、コードの機能や使い方を説明するための重要な仕組みです。適切なDocstringを記述することで、自分自身の備忘録になるだけでなく、チーム開発におけるコードの可読性や保守性を大きく向上させることが期待できます。ここでは、公式の規約である PEP 257 の基本から、現場でよく使われる主要な記述スタイルまでを詳しく解説します。

PEP 257に準拠したDocstringの基本的な書き方

Pythonには PEP 257 というDocstringに関する公式のスタイルガイドが存在します。このガイドラインでは、Docstringを記述する際の基本的な作法が定義されています。

  • トリプルクォート(""")を使用する :Docstringは、原則として3つのダブルクォートで囲みます。
  • 1行目に要約を書く :最初の行には、そのオブジェクトの役割を簡潔に記述します。
  • 詳細が必要な場合は空行を挟む :要約だけでは不十分な場合、1行の空行を挟んでから詳細な説明を記述します。
  • 末尾のクォートは独立させることが推奨される :PEP 257では一貫した整形を促す例として、複数行のDocstringでは閉じクォートを単独の行に置くことを推奨しています。必須ではありませんが、可読性のため広く用いられます。
  • 要約行の書き方: 1行目の要約は、「何をするか」を言い切る形(「〜する」「〜を返す」など) で記述します。英語では命令形(Do this, Return that)が推奨されており、日本語では「〜の計算」のような名詞形ではなく、動作を明示する終止形(辞書形)で書くのが一般的です。
  • 句点の徹底: 1行目の末尾は、英語ならピリオド、日本語なら句点(。)で終わらせることが推奨されています。
  • 空行のルール: 複数行のDocstringでは、要約行と詳細説明の間に1行の空行を挟むのが推奨されています。

参考: PEP 257では、モジュール、関数、クラス、メソッドそれぞれに対して、何を記述すべきかの詳細なガイドラインも提供されています。詳しくは公式文書を参照してください。

def example_function():
"""関数の役割を1行で記述する。
必要に応じて、ここに詳細な動作や
注意点などを複数行で記述することが推奨されます。
"""
pass

Googleスタイル・NumPyスタイル・reSTスタイルの特徴と違い

Docstringにはいくつかの代表的な記述スタイルがあります。プロジェクトの性質やチームの好みに合わせて選択されることが多いですが、主な3つのスタイルの特徴を比較してみましょう。

スタイル特徴おすすめの用途
Googleスタイルシンプルで人間にとっての読みやすさを重視一般的なアプリケーション開発
NumPyスタイルセクションが明確で情報量が多い科学技術計算・データ分析
reStructuredText (reST)Python公式ドキュメントで採用されているマークアップで、ツール連携が強力大規模なライブラリ開発

可読性が高く初心者にもおすすめなGoogleスタイル

Googleスタイル は、記述がシンプルで直感的に理解しやすいのが特徴です。 Args:Returns: といった項目名を用いて情報を整理するため、初心者の方でも書きやすく、多くのモダンなプロジェクトで採用されています。

def divide(a: float, b: float) -> float:
"""2つの数値の商を計算する。
Args:
a (float): 分子となる数値。
b (float): 分母となる数値。
Returns:
float: 計算された商。
Raises:
ZeroDivisionError: bが0の場合に発生。
"""
return a / b

Googleスタイルでよく使われるセクション

セクション名概要用途
Args:引数関数のパラメータ一覧
Returns:戻り値関数が返す値の説明
Yields:生成値ジェネレータが生成する値の説明
Raises:例外送出される可能性のあるエラー
Attributes:属性クラスのインスタンス変数などの説明
Notes:備考特記事項や注意点
Examples:使用例のコード

科学計算やデータ分析分野で主流のNumPyスタイル

NumPyスタイル は、各項目の下にハイフン(---)を引いて区切りを作るなど、視覚的に構造が分かりやすい形式です。扱うパラメータが多いデータサイエンス系のライブラリ(pandasやscikit-learnなど)でよく見かけます。

def divide(a: float, b: float) -> float:
"""
2つの数値の商を計算する。
Parameters
----------
a : float
分子となる数値。
b : float
分母となる数値。
Returns
-------
float
計算された商。
Raises
------
ZeroDivisionError
bが0の場合に発生。
"""
return a / b

NumPyスタイルでよく使われるセクション

セクション名概要用途
Parameters引数引数の型と説明
Returns戻り値戻り値の型と説明
Yields生成値ジェネレータが生成する値
Raises例外発生し得る例外リスト
Attributes属性クラス属性の説明
Notes備考アルゴリズムの詳細な解説など
Examples使用例doctest形式などの使用例
  • 下線の長さ: 各セクションの見出し(Parametersなど)の下に引くハイフン(-)は、**「見出しの文字数と同じ長さ」**にするのがNumPy公式のルールです。
    • Parameters ならハイフン10個:----------
    • Returns ならハイフン7個:-------
    • 長さが足りないと、一部の解析ツールで正しく認識されない可能性があるため注意が必要です。

Python標準のSphinxと相性が良いreStructuredTextスタイル

reStructuredText(reST) は、Python公式ドキュメントで採用されている代表的な記法であり、Sphinxとの連携が標準的にサポートされています。Python言語仕様で「標準」と定められているわけではありませんが、実質的なデファクトスタンダードといえます。

def divide(a: float, b: float) -> float:
"""2つの数値の商を計算する。
:param a: 分子となる数値。
:type a: float
:param b: 分母となる数値。
:type b: float
:returns: 計算された商。
:rtype: float
:raises ZeroDivisionError: bが0の場合に発生。
"""
return a / b

reSTスタイルでよく使われるフィールド

フィールド名概要用途
:param name:引数引数の説明
:type name:引数の型指定
:returns:戻り値戻り値の説明
:rtype:戻り値の型戻り値の型指定
:raises Error:例外発生する例外の説明
:var name:変数クラス変数などの説明

関数・クラス・モジュール別の具体的な記述例

ここでは、最も利用頻度が高い Googleスタイル を例に、モジュール・関数・クラスの書き方を紹介します。

ファイル全体の役割を示すモジュールのDocstring

モジュールのDocstringは、ファイルの先頭(全てのインポート文より前)に記述します。そのファイルがどのような目的で作成され、どのような機能を提供するのかを記述します。

"""数学計算ユーティリティモジュール。
このモジュールは、面積計算や独自の数値変換などの
数学的な機能を提供します。
"""
import math

引数・戻り値・例外を明記する関数のDocstring

関数では、どのようなデータを受け取り、何を返すのかを明確にすることが重要です。

def calculate_area(width, height):
"""長方形の面積を計算する。
Args:
width (float): 幅。
height (float): 高さ。
Returns:
float: 計算された面積。
"""
return width * height

Tips: 型ヒント(Type Hints)との使い分け Python 3.5以降では(PEP 484)、def func(n: int) -> str:のようにコード自体に型を記述する「型ヒント」が推奨されています。そのため、現代的なDocstringでは型の詳細よりも「その引数が何を意味するのか(ビジネスロジック上の意味)」に注力して記述するのが一般的です。型情報はコードで表現し、Docstringではその引数の目的や制約を説明するという役割分担が理想的です。

型ヒントをすでに導入している場合、Docstringでの型記述には2つの考え方があります。

  • DRY原則の重視: コード側に型が明記されているため、Docstring内では型を省略し、引数の「意味」や「制約」の説明に特化します。
  • 可視性の重視: 一方で、IDEでホバーした際に説明と型が同時に見えるメリットを考慮し、あえてDocstring内にも型を重複させて記述するスタイルもあります。この場合、ツール(napoleonなど)を使用して同期を保つのが一般的です。

属性とメソッドの役割を整理するクラスのDocstring

クラスのDocstringでは、そのクラスが何を表すのかという概要に加え、 Attributes(属性) セクションでインスタンス変数の説明を行うことが一般的です。

class Rectangle:
"""長方形を表すクラス。
Attributes:
width (float): 幅。
height (float): 高さ。
"""
def __init__(self, width, height):
self.width = width
self.height = height

このように、適切なスタイルを選んで記述することで、コードの意図が明確になり、後からのメンテナンスがスムーズになる可能性が高まります。

固有のDocstring書き方

通常の関数以外にも、現代のPython開発で頻出するオブジェクトには固有の書き方があります。

  • Dataclasses(データクラス): 各フィールドの直下にトリプルクォートでDocstringを記述することで、フィールドごとの説明が可能です。
  • Enum(列挙型): Enumの各メンバーの直後にもDocstringを記述できます。これにより、各定数の意味を明確に定義できます。
  • クラスのAttributesセクション: クラス全体のDocstringには Attributes セクションを設け、インスタンス変数の説明を記述します。一方で、コンストラクタの引数については、__init__ メソッド自身のDocstringに記述するのが一般的です。

PythonのDocstringに関するよくある疑問と解決策

PythonのDocstring よくある疑問と解決策 # と """ の使い分け Docstring (""") ✓ __doc__属性に保存 ✓ help()で参照可能 ✓ IDEで表示される 外部から使う人向け コメント (#) ✗ 実行時に破棄される ✗ プログラムから参照不可 ✓ コード内で自由に配置 修正する開発者向け 項目 Docstring コメント 主な目的 インターフェース の説明 実装の詳細や 背景の説明 配置場所 関数・クラス・ モジュールの冒頭 任意の行 主な読者 関数やクラスを 呼び出して 使う人 ソースコードを 保守・修正 する人 ドキュメント自動生成 Sphinx • Python公式採用 • 最も高機能 • PDF出力可能 • 大規模プロジェクト向け reStructuredText標準 pdoc • 設定不要で軽量 • モダンなHTML生成 • コマンド一つで実行 • 小中規模向け pip install pdoc 品質維持・検証ツール doctest 実行例(>>>)を自動テスト darglint2 引数名の整合性チェック Ruff モダンな高速リンター 形式的誤りを検知 💡 ポイント Docstringを書く → 自動生成ツールで資産化 → リンターで品質維持 ソースコードとドキュメントの乖離を防ぎ、開発効率を向上!

PythonのDocstringを実際に書き始めると、「普通のコメントと何が違うのか?」「書いた内容をどう活用すればいいのか?」といった疑問が湧くことが少なくありません。ここでは、開発現場でよく寄せられる代表的な疑問について、実務的な視点で整理して解説します。

コメント(#)とDocstring(""")の使い分けはどうすればいい?

Pythonには、ハッシュ記号( # )から始まる「コメント」と、トリプルクォート( """ )で囲む「Docstring」の2種類がありますが、これらは技術的にも目的的にも明確に役割が異なります。

技術的な違い:

  • Docstring は実行時に __doc__ 属性として保持され、help() 関数やIDEのツールチップで参照可能です。
  • コメント はPythonインタプリタによって解釈時に破棄され、実行時には存在しません。

目的の違い:

  • Docstring は「そのコードを外部から使う人のため」に書き、APIの使い方を説明します。
  • コメント は「そのコードを修正する開発者のため」に書き、実装の理由や背景を説明します。

Docstringは「そのコードを外部から使う人のため」 に書き、 コメントは「そのコードを修正する開発者のため」 に書くのが一般的です。

項目Docstring( """コメント( #
主な目的インターフェースの説明(何をするか)実装の詳細や背景の説明(なぜそう書いたか)
対象関数、クラス、モジュールの冒頭コード内の任意の行
外部からの参照help() 関数や __doc__ 属性で参照可能プログラム実行時には無視される
主な読者その関数やクラスを呼び出して使う人ソースコードを読んで保守・修正する人

例えば、複雑なアルゴリズムの途中で「なぜこの計算式が必要なのか」を説明する場合は コメント を使用し、関数の「引数の型や戻り値の意味」を説明する場合は Docstring を使用するのが適切な使い分けと言えます。

Sphinxやpdocを活用してドキュメントを自動生成する方法

Docstringをルールに従って丁寧に記述する最大のメリットの一つは、ドキュメントの自動生成ツールを活用できる点にあります。これにより、ソースコードとドキュメントの乖離を防ぎ、常に最新の仕様書を維持しやすくなります。

代表的なツールには以下の2つがあります。

  1. Sphinx(スフィンクス) Python公式ドキュメントでも採用されている、最も高機能なドキュメント生成ツールです。 reStructuredText(reST) スタイルを標準としていますが、拡張機能(napoleon)を追加することでGoogleスタイルやNumPyスタイルにも対応可能です。大規模なプロジェクトや、PDF形式での配布が必要な場合に適しているとされています。

  2. pdoc 「設定よりも規約」を重視した、非常に軽量なツールです。特別な設定ファイルを用意しなくても、コマンド一つでモダンなデザインのHTMLドキュメントを生成できます。小中規模のプロジェクトや、手軽にブラウザで仕様を確認したい場合に非常に便利です。

Terminal window
pip install pdoc
pdoc my_module.py -o ./docs

このように、適切なツールを導入することで、記述した Docstring がそのままチーム共有用の技術ドキュメントとして資産化されるため、開発効率の向上が期待できるでしょう。

Docstringを書くだけでなく、その品質を維持するためのバリデーション(検証)が重要です。

  • doctestによる実行例の検証: Docstring内に >>> を使った実行例(Examples)を記述しておくと、doctest モジュールを使用して、その例が実際に正しく動作するかを自動テストできます。
  • 整合性チェック(darglint2): コード内の引数名と、Docstringに記載した引数名が一致しているか、記述漏れがないかをチェックするには、darglint2 などのリンターを導入するのが効果的です。
  • モダンなリンター(Ruff): 最近のプロジェクトでは、Ruff を使用することで、Docstringの形式的な誤りや未記述を高速に検知することが推奨されています。

Python Docstringの書き方まとめ

Python Docstringの書き方まとめ Docstringとは? 「使い手のガイド」 help()やエディタで表示 3つの主要スタイル Googleスタイル 簡潔で可読性が高い → Web・アプリ開発向け NumPyスタイル 詳細に書ける → データサイエンス・AI向け reSTスタイル 公式採用 → 大規模ライブラリ向け ツールで効率化 autoDocstring Sphinx / pdoc 自動生成で効率UP! 高品質なDocstringを維持する5つのポイント 1 要約を1行目に書く 2 型情報は型ヒントで補完 3 例外(Raises)を隠さない 4 「なぜ」を記述する 5 自動化ツールとの連携 継続的メンテナンスが価値を生む! Ruffのpydocstyleでリアルタイム検知 まずは1つの関数に「Args」と「Returns」を書くことから始めよう!

今回のまとめ:振り返りチェックリスト

  • Docstringは「使い手のガイド」: 単なる補足コメント(#)ではなく、help()関数やエディタのホバー表示で「関数の使い方」を正しく伝えるための仕組みであることを再認識しましょう。
  • スタイルの統一が保守性の鍵: 可読性の高いGoogleスタイルや分析分野で強いNumPyスタイルなど、プロジェクトに最適なスタイルを一つ選び、チーム全体で一貫性を持たせることが大切です。
  • ツールの活用で効率化: VS Codeの拡張機能(autoDocstringが最も人気ですが、他にもAI Python Docstring Generatorなど複数の選択肢があります)で入力を自動化し、Sphinxやpdocを使って「生きたドキュメント」を自動生成する環境を整えましょう。
  • アドバイス: 最初から完璧を目指さなくても大丈夫です。まずは今日作成する関数のひとつに、Googleスタイルの「引数(Args)」と「戻り値(Returns)」を添えることから始めてみましょう!

Pythonの Docstring は、単なるソースコード内のメモに留まらず、開発チーム全体の生産性やコードの保守性を左右する重要なドキュメント資産と言えるでしょう。本記事で解説した内容を振り返り、実務で活用するためのポイントを整理します。

主要スタイルの特徴と選択の目安

プロジェクトの性質やチームの習熟度に応じて、以下の3つのスタイルから最適なものを選択することが一般的です。それぞれのスタイルには明確な強みがあるため、用途に合わせて使い分けるのが理想的かもしれません。

スタイル名特徴推奨されるケース
Googleスタイル簡潔で可読性が高く、人間が直接読みやすいWeb開発や一般的なアプリ開発
NumPyスタイル項目が縦に並び、パラメータの詳細を書き込みやすいデータサイエンス、AI、科学計算
reSTスタイルPython公式ドキュメントで採用されているマークアップで、ツール連携が強力大規模なライブラリや公式ドキュメント

特にこだわりがない場合や、初心者の方が最初に取り組む場合は、書きやすさと読みやすさのバランスが良い Googleスタイル から導入してみるのがスムーズかもしれません。

高品質なDocstringを維持するための5つのポイント

適切な Docstring を記述し続けるためには、以下のチェックリストを意識することが有効です。これらを習慣化することで、誰にとっても読みやすいコードベースを構築できるでしょう。

  1. 要約を1行目に書く: 最初の1行を読めば、その関数やクラスの役割が概ね理解できるように簡潔に記述します。
  2. 型情報は型ヒントで補完する: 引数や戻り値の型は型ヒントで明示し、Docstringではその意味や制約を説明することで、IDEの補完機能を最大限に活用できます。
  3. 例外(Raises)を隠さない: どのようなエラーが発生し得るかを明記することで、利用側の予期せぬクラッシュを防ぎ、エラーハンドリングを容易にします。
  4. 「なぜ」を記述する: 実装の「方法」はコード自体が示しますが、API仕様に関わる前提条件や設計上の意図などは Docstring に残すと、利用者にとって理解しやすくなります。
  5. 自動化ツールとの連携: Sphinxpdoc を利用してHTMLドキュメントを自動生成し、コードと仕様書の乖離を防ぐ仕組みを作ります。

継続的なメンテナンスが価値を生む

Docstring は一度記述して満足するものではなく、コードの進化と共に更新し続ける必要があります。 最近では、Ruff という高速なリンターを導入するのが主流です。Ruffの Dルール(pydocstyle) を有効にすれば、Docstringの不足やフォーマット違反をリアルタイムで検知できます。これにより、個別のプラグイン(flake8-docstrings等)を管理する手間を省き、チーム全体で高品質なドキュメントを維持できます。

Pythonの標準的な書き方をマスターすることは、エンジニアとしての信頼性を高める第一歩です。読み手にとって親切なドキュメント作成を心がけることで、より堅牢でメンテナンス性の高いソフトウェア開発が可能になるはずです。

Pythonユーザにお勧めの本

人気

スッキリわかるPython入門 第2版 スッキリわかるシリーズ

難易度
実用性
読みやすさ

対話形式でスラスラ読める。複雑な概念もキャラクターが分かりやすく解説してくれます。

独習Python

難易度
実用性
網羅性

言語仕様を深く解説。なんとなく書ける状態から、自信を持って書ける状態へ引き上げてくれます。

Python1年生 第2版 体験してわかる!会話でまなべる!プログラミングのしくみ

難易度
実用性
読みやすさ

イラスト中心で、プログラミングの楽しさを教えてくれる。ワクワクしながら学べる入門書です。


以上で本記事の解説を終わります。
よいITライフを!

Pythonユーザにお勧めの本

人気

スッキリわかるPython入門 第2版 スッキリわかるシリーズ

難易度
実用性
読みやすさ

対話形式でスラスラ読める。複雑な概念もキャラクターが分かりやすく解説してくれます。

人気記事


記事を評価

Thanks!
目次
Scroll to Top