Python Docstringの書き方:コードを分かりやすくする秘訣


 

Python開発者の皆さん、コードの可読性を高め、メンテナンスを楽にしたいと思いませんか?その鍵を握るのが**Docstring(ドキュメント文字列)**です。Docstringは、関数、クラス、モジュールなどの説明を記述するための重要な要素で、コードの理解を深めるだけでなく、自動ドキュメント生成ツールにも活用されます。


 

Docstringとは?

 

Docstringは、Pythonコード内で特定のオブジェクト(モジュール、クラス、関数、メソッド)の直後に記述される文字列リテラルです。通常のコメントとは異なり、実行時にアクセス可能であり、help()関数やIDEのツールチップで表示されるため、コードの利用者がその機能や使い方をすぐに理解するのに役立ちます。

Docstringは通常、三重引用符("""または''')で囲んで記述します。


 

Docstringの基本的な書き方

 

Docstringには、大きく分けて2つの種類があります。

 

1行Docstring

 

機能がシンプルで説明が短い場合に適しています。開始と終了の引用符と同じ行に記述します。

Python
 
def add(a, b):
    """2つの数値を加算して返します。"""
    return a + b

 

複数行Docstring

 

より詳細な説明が必要な場合に利用します。通常、以下の要素を含みます。

  1. 概要行(Summary Line): オブジェクトの機能の簡潔な要約を1行で記述します。

  2. 空白行: 概要行とそれ以降の詳細な説明を区切ります。

  3. 詳細説明: 機能、引数、戻り値、例外、使用例などを記述します。

Python
 
def multiply(a, b):
    """
    2つの数値を乗算して結果を返します。

    Parameters:
        a (int): 1つ目の数値
        b (int): 2つ目の数値

    Returns:
        int: 乗算された結果
    """
    return a * b

 

Docstringを書くべき場所

 

Docstringは以下の場所に記述することが推奨されています。

 

モジュール

 

モジュール全体の目的や内容を説明します。

Python
 
"""
このモジュールは数値計算に関連するユーティリティ関数を提供します。
"""

def add(a, b):
    """2つの数値を加算します。"""
    return a + b

 

クラス

 

クラスの目的や属性、メソッドの概要を説明します。

Python
 
class Calculator:
    """
    基本的な算術演算を行うための計算機クラスです。
    """
    def __init__(self):
        """Calculatorオブジェクトを初期化します。"""
        pass

    def divide(self, a, b):
        """
        2つの数値を割り算して結果を返します。

        bが0の場合はZeroDivisionErrorを送出します。
        """
        if b == 0:
            raise ZeroDivisionError("0で割ることはできません。")
        return a / b

 

関数とメソッド

 

関数やメソッドの機能、引数、戻り値、発生しうる例外などを説明します。

Python
 
def greet(name):
    """
    指定された名前で挨拶メッセージを生成します。

    Parameters:
        name (str): 挨拶する人の名前

    Returns:
        str: 挨拶メッセージ
    """
    return f"こんにちは、{name}さん!"

 

Docstringのスタイルガイド

 

Pythonには公式のスタイルガイドであるPEP 257が存在します。これに従うことで、統一性のあるDocstringを書くことができます。

 

一般的な推奨事項

 

  • 三重引用符を使用する: """Docstring"""

  • 1行Docstringの場合: 終了引用符を同じ行に置く。

  • 複数行Docstringの場合:

    • 最初の行はオブジェクトの簡潔な要約にする。

    • 要約の後に空行を入れる。

    • 詳細な説明はインデントなしで記述する。

    • パラメータ、戻り値、例外などは専用のセクションを設ける。

  • コマンド形式で記述する: 例:「値を返す」ではなく「値を返します」。

 

Docstringのフォーマット

 

Docstringの記述には、様々なフォーマットが利用されます。主要なものとしては以下の3つがあります。

 

1. reStructuredText (reST)

 

Sphinxなどのドキュメント生成ツールで広く使われています。

Python
 
def example_reST(param1, param2):
    """
    reStructuredText形式のDocstringの例。

    :param param1: 1番目のパラメータ
    :type param1: str
    :param param2: 2番目のパラメータ
    :type param2: int
    :returns: 結合された文字列
    :rtype: str
    :raises ValueError: param2が負の場合
    """
    if param2 < 0:
        raise ValueError("param2は正の数でなければなりません。")
    return f"{param1}-{param2}"

 

2. NumPy Style

 

科学計算ライブラリでよく見られます。

Python
 
def example_numpy(param1, param2):
    """
    NumPyスタイルのDocstringの例。

    Parameters
    ----------
    param1 : str
        1番目のパラメータ
    param2 : int
        2番目のパラメータ

    Returns
    -------
    str
        結合された文字列

    Raises
    ------
    ValueError
        param2が負の場合
    """
    if param2 < 0:
        raise ValueError("param2は正の数でなければなりません。")
    return f"{param1}-{param2}"

 

3. Google Style

 

Googleが推奨するスタイルです。

Python
 
def example_google(param1, param2):
    """
    GoogleスタイルのDocstringの例。

    Args:
        param1 (str): 1番目のパラメータ
        param2 (int): 2番目のパラメータ

    Returns:
        str: 結合された文字列

    Raises:
        ValueError: param2が負の場合
    """
    if param2 < 0:
        raise ValueError("param2は正の数でなければなりません。")
    return f"{param1}-{param2}"

どのスタイルを採用するかはプロジェクトやチームの方針によりますが、一貫性を持たせることが重要です。


 

Docstringの重要性

 

Docstringは単なるコメントではありません。

  • 可読性の向上: コードの目的や使い方を瞬時に理解できます。

  • メンテナンスの容易さ: 後からコードを修正する際に、動作を思い出す手間が省けます。

  • 共同開発の効率化: チームメンバーがコードを共有し、理解するのに役立ちます。

  • 自動ドキュメント生成: Sphinxなどのツールを使えば、Docstringからプロフェッショナルなドキュメントを自動生成できます。

良いDocstringは、コードそのものと同じくらい重要です。今日からあなたのPythonコードにDocstringを記述して、より良い開発体験を送りましょう!


■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座