結論から言うと、自作モジュールは、再利用したい関数を別の .py ファイルに置き、必要なファイルから import して使うことで作れます。

Pythonでは、自分で作ったファイルもモジュールとして扱えます。
たとえば、金額計算の関数を price_utils.py にまとめておけば、複数のスクリプトから同じ処理を使い回せます。
この記事では、同じフォルダ内に自作モジュールを作る基本を整理します。

この記事でわかること

  • 自作モジュールの基本的な作り方
  • 別ファイルの関数を import して使う流れ
  • 実務で自作モジュールを作るときの注意点

完成コード

完成コードは次の通りです。

# price_utils.py に置く想定の処理
def add_tax(price: int, tax_rate: float = 0.1) -> int:
    return round(price * (1 + tax_rate))


def create_price_label(item_name: str, price: int) -> str:
    tax_included_price = add_tax(price)
    return f"{item_name}: {tax_included_price:,}円(税込)"


# main.py に置く想定の処理
items = [
    {"name": "ノート", "price": 120},
    {"name": "ペン", "price": 80},
    {"name": "ファイル", "price": 250},
]

for item in items:
    label = create_price_label(item["name"], item["price"])
    print(label)

実際に2つのファイルに分ける場合は、同じフォルダに price_utils.pymain.py を置きます。
main.py では、次のように読み込みます。

from price_utils import create_price_label

コードのポイント

このコードでは、税込価格を作る処理を自作モジュールに分ける想定で書いています。

  • price_utils.py に価格関連の関数をまとめています
  • add_tax() は税額計算だけを担当しています
  • create_price_label() は表示用の文字列を作っています
  • main.py 側は、商品データを用意して関数を呼び出しています

自作モジュールを使うと、同じ処理を何度も書かずに済みます。
また、価格計算のルールが変わったときに、修正する場所を1つに寄せやすくなります。

コードを順番に説明します

主要な処理を分けて説明します。

1. 別ファイルに関数を用意します

def add_tax(price: int, tax_rate: float = 0.1) -> int:
    return round(price * (1 + tax_rate))

この関数は、税抜価格から税込価格を計算します。
価格に関する処理なので、price_utils.py のような名前のファイルに置くと役割が分かりやすくなります。

Pythonでは、price_utils.py というファイルを作ると、price_utils という名前のモジュールとして読み込めます。
ファイル名はモジュール名になるため、短く分かりやすい英数字の名前にしておくと扱いやすいです。

2. モジュール内で関数を組み合わせます

def create_price_label(item_name: str, price: int) -> str:
    tax_included_price = add_tax(price)
    return f"{item_name}: {tax_included_price:,}円(税込)"

この関数は、同じファイル内にある add_tax() を呼び出しています。
自作モジュールの中でも、関数同士を組み合わせて使えます。

大切なのは、外から使いたい関数と、内部で補助的に使う関数の役割を意識することです。
この記事の例では create_price_label() が外から使いたい関数で、add_tax() はその中でも使える部品です。

3. 別ファイルから読み込んで使います

from price_utils import create_price_label

for item in items:
    label = create_price_label(item["name"], item["price"])
    print(label)

main.py から price_utils.py の関数を使うには、import を書きます。
同じフォルダにあるファイルであれば、基本的にはモジュール名を指定して読み込めます。

このように分けると、main.py は処理の流れを読む場所、price_utils.py は価格処理の詳細を見る場所、という役割になります。
小さなツールでも、この分け方をしておくと後から直しやすくなります。

実務で使うときのポイント

実務で自作モジュールを作るときは、まず「他のファイルからも使いたい処理か」を考えます。
1回しか使わない処理まで細かく別ファイルにすると、かえって追いにくくなることがあります。

自作モジュールに向いている処理には、次のようなものがあります。

  • 金額計算や日付変換のように、複数箇所で使う処理
  • CSVやJSONの読み書きなど、入出力の共通処理
  • 入力チェックや整形のように、ルールを統一したい処理
  • メイン処理から切り離したほうが読みやすい補助処理

第5章の後半では、パッケージ構成や from ... import ...import エラーの原因も扱います。
自作モジュールを作れるようになると、それらのテーマも実際のコード構成として理解しやすくなります。

よくある勘違い・注意点

  • 自作モジュールは特別な設定をしなくても、通常の .py ファイルから始められます
  • ファイル名にハイフンや日本語を使うと import しにくくなるため、英小文字とアンダースコアを使うと扱いやすいです
  • 同じ名前のファイルを作ると、標準ライブラリと名前が衝突することがあります
  • main.py をどのフォルダから実行しているかによって、読み込み結果が変わる場合があります

まとめ

  • 自作モジュールは、関数を別の .py ファイルにまとめるところから始められます
  • 同じフォルダのファイルなら、モジュール名を指定して import できます
  • 再利用したい処理やルールを統一したい処理は、自作モジュールに向いています
  • 実務では、ファイル名、実行場所、名前の衝突に注意すると import の問題を減らせます

次の記事