Python関数名、もう一歩先へ:「get」から「fetch」へ、動詞の使い分けで意図を伝える

Pythonで分かりやすい関数名を付けることは、コードの可読性を高める上で非常に重要です。名前が処理内容を的確に表していれば、他の開発者や未来の自分がコードを素早く理解する助けとなります。

特に、関数の命名で最も重要な要素である**「動詞」**の選び方は、コードの意図を左右します。getsave といった便利な動詞をつい使いがちですが、より具体的で適切な動詞を選ぶことで、コードはさらに雄弁になり、読む人が実装の詳細を推測しやすくなります。

目次

「get」がもたらす曖昧さ

例えば、get_latest_news() という関数名を見てみましょう。この名前から「最新ニュースを取得する」ことは分かります。しかし、どのように取得するのかまでは分かりません。

  • ネットワーク上のAPIから**取得(fetch)**するのでしょうか?
  • ローカルのファイルから**読み込む(load)**のでしょうか?
  • データベースの中から**検索(search)**するのでしょうか?

get は汎用性が高い反面、具体的な処理のニュアンスを伝えきれない場合があります。ここで、より具体的な動詞を選ぶことが活きてきます。


状況に応じて動詞を使い分ける

「get」をより具体的にする動詞

「取得する」という操作にも、その背景には様々なコンテキストが存在します。状況に応じて以下の動詞を使い分けることで、関数の役割がより明確になります。

動詞ニュアンス・利用シーン
fetch, retrieveネットワーク越しのリソース(API、ウェブページ)を取得する際に使う。
loadファイルや設定など、既存のデータをメモリに読み込む際に使う。
search複数のデータの中から、条件に合うものを探し出す際に使う。
calculate与えられた情報から、特定の値を計算・算出する際に使う。
aggregate複数のデータを集計して、合計値や平均値などを求める際に使う。
build, construct複数の部品から、複雑なオブジェクトやデータ構造を組み立てる際に使う。
renderデータやテンプレートを元に、HTMLや画像などを描画・生成する際に使う。

具体例:get から fetch

外部APIから記事の情報を取得する関数を考えてみましょう。

import requests

class Article:
    # ... Articleの定義 ...
    def __init__(self, title: str, body: str):
        self.title = title
        self.body = body

# 悪くはないが、曖昧な例
def get_article(article_id: int) -> Article | None:
    # 実装を読まないと、ネットワーク通信が発生することが分からない
    response = requests.get(f"https://api.example.com/articles/{article_id}")
    if response.status_code == 200:
        data = response.json()
        return Article(title=data["title"], body=data["body"])
    return None

# 意図が明確な例
def fetch_article_from_api(article_id: int) -> Article | None:
    # 関数名から、APIへのアクセスが発生することが明確に分かる
    response = requests.get(f"https://api.example.com/articles/{article_id}")
    if response.status_code == 200:
        data = response.json()
        return Article(title=data["title"], body=data["body"])
    return None

fetch という動詞を使うだけで、この関数がネットワーク通信を伴う処理であることが一目瞭然となります。

「save」をより具体的にする動詞

「保存する」という操作も同様に、文脈によって様々な表現が可能です。

動詞ニュアンス・利用シーン
dumpメモリ上のデータ(辞書など)を、特定の形式(JSON, YAML)でファイルに出力する。
create新しいレコードやリソースを永続化層(DBなど)に作成する。
update, patch既存のレコードやリソースを更新する。patchは部分更新のニュアンス。
remove, delete既存のレコードやリソースを削除する。
sync二つの異なる場所にあるデータを同期させ、同じ状態にする。

具体例:save から dump

アプリケーションの設定情報をJSONファイルとして書き出す場面です。

import json

# 曖昧な例
def save_config(config: dict, file_path: str) -> None:
    with open(file_path, "w", encoding="utf-8") as f:
        json.dump(config, f, indent=2)

# 意図が明確な例
def dump_config_to_json(config: dict, file_path: str) -> None:
    # データ構造をJSON形式で書き出す、という意図が明確
    with open(file_path, "w", encoding="utf-8") as f:
        json.dump(config, f, indent=2)

その他の便利な動詞

その他にも、特定の処理内容を的確に表現する便利な動詞が数多く存在します。

動詞ニュアンス・利用シーン
notifyユーザーや他のシステムに情報を通知する。(sendより具体的)
flatten入れ子になったリストなどを、一次元のフラットなリストに変換する。
minimize(ウィンドウなどを)最小化する、またはデータ量を最小限に圧縮する。
validate, verifyデータが正しい形式やルールに則っているかを検証する。
escape, sanitizeセキュリティ上の問題を防ぐため、文字列を無害化(エスケープ)する。

まとめ

汎用的な動詞は便利ですが、常にそれが最良の選択とは限りません。

関数の命名において、より具体的で文脈に合った動詞を選ぶことは、コードの意図を正確に伝え、将来の自分や他の開発者が実装を理解する助けとなります。それは、コードを自己文書化(self-documenting)するための重要なステップです。

今回ご紹介した動詞の使い分けを意識して、より伝わりやすいコードを目指しましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次