my.code(); Logomy.code();
Python-4.モジュールとパッケージ

my.code(); Logomy.code();

  • C++
    • 0.C++の世界へようこそ
    • 1.型システムと制御構造
    • 2.データ集合とモダンな操作
    • 3.ポインタとメモリ管理
    • 4.関数と参照渡し
    • 5.プロジェクトの分割とビルド
    • 6.クラスの基礎
    • 7.クラスを使いこなす
    • 8.継承とポリモーフィズム
    • 9.テンプレート
    • 10.STL ①:コンテナ
    • 11.STL ②:アルゴリズムとラムダ式
    • 12.RAIIとスマートポインタ
  • JavaScript
    • 0.JavaScriptへようこそ
    • 1.基本構文とデータ型
    • 2.制御構文
    • 3.関数とクロージャ
    • 4.'this'の正体
    • 5.オブジェクトとプロトタイプ
    • 6.クラス構文
    • 7.配列とイテレーション
    • 8.非同期処理①: Promise
    • 9.非同期処理②: Async/Await
  • Python
    • 0.環境構築と基本思想
    • 1.基本構文とデータ型
    • 2.リスト、タプル、辞書、セット
    • 3.制御構文と関数
    • 4.モジュールとパッケージ
    • 5.オブジェクト指向プログラミング
    • 6.ファイルの入出力とコンテキストマネージャ
    • 7.例外処理
    • 8.ジェネレータとデコレータ
  • Ruby
    • 0.rubyの世界へようこそ
    • 1.基本構文とデータ型
    • 2.制御構造とメソッド定義
    • 3.すべてがオブジェクト
    • 4.コレクション (Array, Hash, Range)
    • 5.ブロックとイテレータ
    • 6.クラスとオブジェクト
    • 7.モジュールとMix-in
    • 8.Proc, Lambda, クロージャ
    • 9.標準ライブラリの活用
    • 10.テスト文化入門
    • 11.メタプログラミング入門
  • Rust
    • 0.Rustの世界へようこそ
    • 1.基本構文と「不変性」
    • 2.関数と制御フロー
    • 3.所有権
    • 4.借用とスライス
    • 5.構造体とメソッド構文
    • 6.列挙型とパターンマッチ
    • 7.モジュールシステムとパッケージ管理
    • 8.コレクションと文字列
    • 9.エラーハンドリング
    • 10.ジェネリクスとトレイト
    • 11.ライフタイム
  • TypeScript
    • 0.TypeScriptへようこそ
    • 1.基本的な型と型推論
    • 2.オブジェクト、インターフェース、型エイリアス
    • 3.関数の型定義
    • 4.型を組み合わせる
    • 5.ジェネリクス
    • 6.クラスとアクセス修飾子
    • 7.非同期処理とユーティリティ型
my.code(); Logomy.code();

環境構築不要、その場で実践。

ut-code / my-code

Copyright © 2026 ut.code();

ut.code(); について
公式ウェブサイト公式 𝕏 アカウント

第4章: コードの整理術:モジュールとパッケージ

プログラミングを進めていくと、コードは必然的に長くなり、一つのファイルで管理するのが難しくなってきます。機能ごとにファイルを分割し、再利用しやすく、メンテナンスしやすい構造にすることが、効率的な開発の鍵となります。この章では、Pythonでコードを整理するためのモジュールとパッケージという仕組み、そしてPythonの強力な武器である標準ライブラリの活用方法について学びます。

モジュール:コードを部品化する

Pythonでは、1つの .py ファイルが1つのモジュールとして扱われます。モジュールを使うことで、関連する関数やクラスを一つのファイルにまとめ、他のプログラムから再利用可能な「部品」として扱うことができます。これは、他の言語におけるライブラリやソースファイルのインポート機能に似ています。

import文の基本

モジュールを利用するには import 文を使います。Pythonには多くの便利なモジュールが標準で用意されています(これらを標準ライブラリと呼びます)。例えば、数学的な計算を行う math モジュールを使ってみましょう。

Python 実行環境
ブラウザ上で動作するPython3.13.2のREPL実行環境です。
プロンプト (>>>) の後にコマンドを入力し、Enterキーで実行します。
Ctrl+Cまたは左上の停止ボタンで実行中のコマンドを中断できます。
>>> # mathモジュールをインポート
>>> import math
>>> # mathモジュール内の変数や関数を利用する
>>> print(math.pi)  # 円周率π
3.141592653589793
>>> print(math.sqrt(16))  # 16の平方根
4.0

毎回 math. と書くのが面倒な場合は、いくつかの書き方があります。

import...as: モジュールに別名をつけて利用する

Python 実行環境
ブラウザ上で動作するPython3.13.2のREPL実行環境です。
プロンプト (>>>) の後にコマンドを入力し、Enterキーで実行します。
Ctrl+Cまたは左上の停止ボタンで実行中のコマンドを中断できます。
>>> import math as m
>>>
>>> print(m.pi)
3.141592653589793
>>> print(m.sqrt(16))
4.0

from...import: モジュールから特定の関数や変数だけを取り込む

Python 実行環境
ブラウザ上で動作するPython3.13.2のREPL実行環境です。
プロンプト (>>>) の後にコマンドを入力し、Enterキーで実行します。
Ctrl+Cまたは左上の停止ボタンで実行中のコマンドを中断できます。
>>> from math import pi, sqrt
>>>
>>> print(pi)       # 直接piを参照できる
3.141592653589793
>>> print(sqrt(16)) # 直接sqrtを参照できる
4.0

注意 ⚠️: from math import * のようにアスタリスク (*) を使うと、そのモジュールのすべての名前(関数、変数、クラス)が現在の名前空間にインポートされます。一見便利に見えますが、どの名前がどこから来たのか分からなくなり、意図しない名前の上書きを引き起こす可能性があるため、特別な理由がない限り避けるべきです。

自作モジュールの作成と利用

自分でモジュールを作成するのも簡単です。関連する関数をまとめた .py ファイルを作成するだけです。ここからは複数のファイルが必要になるため、再びスクリプトファイルで説明します。

  1. utils.py の作成: まず、便利な関数をまとめた utils.py というファイルを作成します。

    ファイルを編集:utils.py
    def say_hello(name):
        """指定された名前で挨拶を返す"""
        return f"Hello, {name}!"
    
    def get_list_average(numbers):
        """数値リストの平均を計算する"""
        if not numbers:
            return 0
        return sum(numbers) / len(numbers)
    
    # このファイルが直接実行された場合にのみ以下のコードを実行
    if __name__ == "__main__":
        print("This is a utility module.")
        print(say_hello("World"))
        avg = get_list_average([10, 20, 30])
        print(f"Average: {avg}")
    python utils.py
    ブラウザ上で動作するPython3.13.2の実行環境です。
    左上の実行ボタンを押して、このページ内のutils.pyに書かれている内容を実行します。
    This is a utility module.
    Hello, World!
    Average: 20.0

    if __name__ == "__main__": の重要性 この記述はPythonの定型句です。

    • スクリプトが直接実行された場合、そのスクリプトの __name__ という特殊変数は "__main__" になります。
    • スクリプトがモジュールとして import された場合、__name__ はファイル名(この場合は "utils")になります。 これにより、モジュールとしてインポートされた際には実行したくないテストコードやデモコードを記述することができます。他言語経験者にとっては、プログラムの「エントリーポイント」を定義する main 関数のような役割と考えると分かりやすいでしょう。
  2. main.py からの利用: 次に、utils.py と同じディレクトリに main.py を作成し、utils モジュールをインポートして使います。

    ファイルを編集:main.py
    # 自作のutilsモジュールをインポート
    import utils
    
    greeting = utils.say_hello("Alice")
    print(greeting)
    
    scores = [88, 92, 75, 100]
    average_score = utils.get_list_average(scores)
    print(f"Your average score is: {average_score}")
    python main.py
    ブラウザ上で動作するPython3.13.2の実行環境です。
    左上の実行ボタンを押して、このページ内のmain.pyに書かれている内容を実行します。
    Hello, Alice!
    Your average score is: 88.75

このように、機能ごとにファイルを分割することで、コードの見通しが良くなり、再利用も簡単になります。

パッケージ:モジュールをまとめる

プロジェクトがさらに大きくなると、多数のモジュールを管理する必要が出てきます。パッケージは、複数のモジュールをディレクトリ構造で階層的に管理するための仕組みです。

パッケージの概念と __init__.py

パッケージは、簡単に言うとモジュールが入ったディレクトリです。Pythonにそのディレクトリをパッケージとして認識させるために、__init__.py という名前のファイルを置きます(近年のPythonでは必須ではありませんが、互換性や明示性のために置くのが一般的です)。

以下のようなディレクトリ構造を考えてみましょう。

my_project/
├── main.py
└── my_app/
    ├── __init__.py
    ├── models.py
    └── services.py
  • my_app がパッケージ名になります。
  • __init__.py は空でも構いません。このファイルが存在することで、my_app ディレクトリは単なるフォルダではなく、Pythonのパッケージとして扱われます。
  • models.py と services.py が、my_app パッケージに含まれるモジュールです。

main.py からこれらのモジュールをインポートするには、パッケージ名.モジュール名 のように記述します。

# パッケージ内のモジュールをインポート
from my_app import services

# servicesモジュール内の関数を実行 (仮の関数)
# user_data = services.fetch_user_data(user_id=123)
# print(user_data)

__init__.py には、パッケージがインポートされた際の初期化処理を記述することもできます。例えば、特定のモジュールから関数をパッケージのトップレベルにインポートしておくと、利用側でより短い記述でアクセスできるようになります。

# my_app/__init__.py

# servicesモジュールからfetch_user_data関数をインポート
from .services import fetch_user_data

print("my_app package has been initialized.")

このようにしておくと、main.py から以下のように直接関数をインポートできます。

# main.py

# __init__.pyで設定したおかげで、短いパスでインポートできる
from my_app import fetch_user_data

user_data = fetch_user_data(user_id=123)
print(user_data)

標準ライブラリ:Pythonに備わった強力なツール群

Pythonの大きな魅力の一つは、その「バッテリー同梱 (Batteries Included)」という哲学です。これは、Pythonをインストールしただけで、追加のインストールなしにすぐに使える膨大で強力な標準ライブラリが付属していることを意味します。 何かを実装したいと思ったら、まずは「Python 標準ライブラリ 〇〇」で検索してみると、車輪の再発明を防ぐことができます。

ここでは、日常的によく使われる標準ライブラリをいくつか紹介します。

標準ライブラリの探索

どんなライブラリがあるかを知るには、公式ドキュメントが最も信頼できます。

  • The Python Standard Library — Python 3.x documentation

また、REPLの help() や dir() を使うと、モジュールの内容を簡単に確認できます。

Python 実行環境
ブラウザ上で動作するPython3.13.2のREPL実行環境です。
プロンプト (>>>) の後にコマンドを入力し、Enterキーで実行します。
Ctrl+Cまたは左上の停止ボタンで実行中のコマンドを中断できます。
>>> import datetime
>>> # datetimeモジュールが持つ属性や関数のリストを表示
>>> dir(datetime)
['MAXYEAR', 'MINYEAR', '__all__', '__builtins__', ..., 'date', 'datetime', 'time', 'timedelta', 'timezone', 'tzinfo']
>>>
>>> # dateクラスのヘルプドキュメントを表示
>>> help(datetime.date)
Help on class date in module datetime:

class date(builtins.object)
 |  date(year, month, day) --> a date object
 |
 |  Methods defined here:
(ヘルプ情報が続く) ...

os

オペレーティングシステムと対話するための機能を提供します。ファイルやディレクトリの操作、環境変数の取得などができます。

Python 実行環境
ブラウザ上で動作するPython3.13.2のREPL実行環境です。
プロンプト (>>>) の後にコマンドを入力し、Enterキーで実行します。
Ctrl+Cまたは左上の停止ボタンで実行中のコマンドを中断できます。
>>> import os
>>> # カレントディレクトリのファイル一覧を取得
>>> os.listdir('.')
['hello.py', 'utils.py', 'main.py']
>>> # OSに依存しない安全なパスの結合
>>> os.path.join('data', 'file.txt')  # Windowsなら 'data\\file.txt'
'data/file.txt'

sys

Pythonインタプリタ自体を制御するための機能を提供します。コマンドライン引数の取得や、Pythonの検索パスの確認などができます。

Python 実行環境
ブラウザ上で動作するPython3.13.2のREPL実行環境です。
プロンプト (>>>) の後にコマンドを入力し、Enterキーで実行します。
Ctrl+Cまたは左上の停止ボタンで実行中のコマンドを中断できます。
>>> import sys
>>> # Pythonのバージョンを表示
>>> sys.version  # 環境により異なります
'3.11.4 (main, Jun  7 2023, 10:13:09) [GCC 12.3.0]'

datetime

日付や時刻を扱うための機能を提供します。

Python 実行環境
ブラウザ上で動作するPython3.13.2のREPL実行環境です。
プロンプト (>>>) の後にコマンドを入力し、Enterキーで実行します。
Ctrl+Cまたは左上の停止ボタンで実行中のコマンドを中断できます。
>>> import datetime
>>> # 現在の日時を取得 (実行時刻による)
>>> now = datetime.datetime.now()
>>> print(now)
2025-08-12 18:26:06.123456
>>> # 日時をフォーマットして文字列にする
>>> now.strftime('%Y-%m-%d %H:%M:%S')
'2025-08-12 18:26:06'

json

Web APIなどで広く使われているデータ形式であるJSONを扱うための機能を提供します。

Python 実行環境
ブラウザ上で動作するPython3.13.2のREPL実行環境です。
プロンプト (>>>) の後にコマンドを入力し、Enterキーで実行します。
Ctrl+Cまたは左上の停止ボタンで実行中のコマンドを中断できます。
>>> import json
>>> # Pythonの辞書型データ
>>> user = {"id": 1, "name": "Ken", "email": "ken@example.com"}
>>> # 辞書型をJSON形式の文字列に変換 (dumps: dump string)
>>> json_string = json.dumps(user, indent=2)
>>> print(json_string)
{
  "id": 1,
  "name": "Ken",
  "email": "ken@example.com"
}
>>> # JSON形式の文字列をPythonの辞書型に変換 (loads: load string)
>>> loaded_user = json.loads(json_string)
>>> loaded_user['name']
'Ken'

この章のまとめ

この章では、Pythonのコードが複雑になるにつれて重要性を増す、整理と再利用のテクニックを学びました。ここで学んだ概念は、小さなスクリプトから大規模なアプリケーションまで、あらゆるレベルのPythonプログラミングで役立ちます。

  • モジュール: 1つの .py ファイルは1つのモジュールです。関連する関数やクラスをモジュールにまとめることで、コードを論理的な単位に分割できます。他のファイルからは import 文を使ってその機能を再利用できます。
  • パッケージ: パッケージは、複数のモジュールを階層的なディレクトリ構造で管理する仕組みです。これにより、大規模なプロジェクトでも名前の衝突を避け、関連するコードをまとめて整理することができます。
  • 標準ライブラリ: Pythonには「バッテリー同梱」という思想があり、datetime (日時)、os (OS機能)、json (データ形式) など、すぐに使える便利なモジュールが豊富に揃っています。これらを活用することで、開発を大幅に効率化できます。

練習問題1: 計算モジュールを作ろう 🔢

四則演算を行うための自作モジュールを作成し、別のファイルから利用してみましょう。

  1. calculator.py というファイルを作成し、以下の4つの関数を定義してください。
    • add(a, b): aとbの和を返す
    • subtract(a, b): aとbの差を返す
    • multiply(a, b): aとbの積を返す
    • divide(a, b): aをbで割った商を返す。ただし、b が 0 の場合は「ゼロで割ることはできません」という文字列を返すようにしてください。
  2. practice5_1.py というファイルを作成し、作成した calculator モジュールをインポートします。
  3. practice5_1.py の中で、calculator モジュールの各関数を少なくとも1回ずつ呼び出し、結果を print 関数で表示してください。
ファイルを編集:calculator.py
def add(a, b):
    
ファイルを編集:practice5_1.py
python practice5_1.py
ブラウザ上で動作するPython3.13.2の実行環境です。
左上の実行ボタンを押して、このページ内のpractice5_1.pyに書かれている内容を実行します。
(出力例)
10 + 5 = 15
10 - 5 = 5
10 * 5 = 50
10 / 2 = 5.0
10 / 0 = ゼロで割ることはできません

練習問題2:日報データをJSONで作成しよう 📝

標準ライブラリの datetime と json を使って、簡単な日報データを作成するプログラムを書いてみましょう。

  1. Pythonスクリプトを作成します。
  2. datetime モジュールを使って、現在の日付を YYYY-MM-DD 形式の文字列として取得します。
  3. 以下の情報を含むPythonの辞書を作成します。
    • author: あなたの名前 (文字列)
    • date: 手順2で取得した日付文字列
    • tasks: その日に行ったタスクのリスト (例: ["会議", "資料作成", "メール返信"])
  4. json モジュールを使い、手順3で作成した辞書を人間が読みやすい形式 (インデント付き) のJSON文字列に変換します。
  5. 変換後のJSON文字列を print 関数で表示してください。

ヒント: datetime.datetime.now() で現在時刻を取得し、.strftime('%Y-%m-%d') メソッドで日付をフォーマットできます。json.dumps() の indent 引数を指定すると、出力がきれになります。

ファイルを編集:practice5_2.py
import datetime
import json
python practice5_2.py
ブラウザ上で動作するPython3.13.2の実行環境です。
左上の実行ボタンを押して、このページ内のpractice5_2.pyに書かれている内容を実行します。
(出力例)
{
  "author": "山田 太郎",
  "date": "2025-08-17",
  "tasks": [
    "Pythonのモジュール学習",
    "練習問題の実装",
    "チームミーティング"
  ],
  "status": "完了"
}
前のページ« 制御構文と関数
次のページオブジェクト指向プログラミング »