【Python】レッスン5-08:モジュールを使いこなそう

一つ前のLessonでは静的メソッドについて学習しました。
今回はモジュールについて見ていきましょう。
Lesson1:基礎文法編
Lesson2:制御構造編
Lesson3:関数とスコープ編
Lesson4:データ構造編
Lesson5:オブジェクト指向編
・Lesson5-1:クラスの基本を理解しよう
・Lesson5-2:メソッドの基本を理解しよう
・Lesson5-3:カプセル化を理解しよう
・Lesson5-4:プロパティを理解しよう
・Lesson5-5:クラスの継承を理解しよう
・Lesson5-6:メソッドのオーバーライドを理解しよう
・Lesson5-7:静的メソッドを理解しよう
・Lesson5-8:モジュールを使いこなそう ◁今回はココ
・Lesson5-9:抽象クラスを理解しよう
・Lesson5-10:ミックスインを理解しよう
・Lesson5-11:データクラスを理解しよう
・練習問題5-1:モンスター捕獲ゲームを作ろう
・練習問題5-2:モンスターとのバトルゲームを作ろう
次のステップ:Python基礎習得者にお勧めの道5選(実務or副業)
モジュールとは|コードを分けて賢く再利用する方法
Pythonのプログラムを効率的に記述するには「モジュール」を活用することが重要です。
モジュールはコードを整理し、再利用性を高める仕組みです。
本記事では、モジュールの基本から活用方法までを分かりやすく解説します。
モジュールの概要とインポート方法
モジュールとは、Pythonコードを整理して再利用可能な単位としてまとめたものです。
一つのPythonファイル(拡張子が.py
)がモジュールに該当します。
これを使用すると複雑なプログラムを分割して管理しやすくできるだけでなく、他のプログラムからそのコードを再利用できます。
例えば、最初から用意されている Python標準モジュール の math
は数学的な計算を簡単に行える機能を提供します。
モジュールはimport
文を使って読み込みます。
以下は基本的なインポート方法です。
import math # mathモジュールのインポート # モジュールの関数を使う print(math.sqrt(16)) # mathモジュール内で定義されたsqrt()関数を使用 # 出力: 4.0
モジュール内の特定の要素だけをインポートすることも可能です。
from math import sqrt # mathモジュールのsqrt関数をインポート print(sqrt(25)) # 出力: 5.0
さらに、インポート時に別名を付けて短縮することもできます。
import numpy as np # numpyモジュールをインポートし、このコード内ではnpという名前で使用 array = np.array([ 1, 2, 3]) # np(numpyモジュール)のarray()関数を使用 print(array) # 出力: [ 1 2 3]
ここまでの記事で何度も使用してきた乱数生成のRandomも標準モジュールの一種です。
また、それ以外にも便利な標準モジュールは沢山用意されていますので、是非↓↓の記事で確認し、活用してください。
自作モジュールの作成と利用方法
自作のモジュールも簡単に作れます。以下は自作モジュールの例です。
1. モジュールファイルの作成
モジュールとして使用するファイルは、通常通り作成します。
def say_hello(name): # say_hello関数の定義 return f"Hello, {name}!"
上記のコードを書いたファイルを「greetings.py」というファイル名で保存します。
2. 自作モジュールのインポート
import greetings # 自作モジュールファイルのインポート message = greetings.say_hello("Alice") # greetingsモジュールのsay_hello関数を呼び出し print(message) # 出力: Hello, Alice!
同じディレクトリにあるPythonファイルをモジュールとして利用できます。
コードを整理して再利用しやすくなるため、大規模なプロジェクトで特に有用です。
まとめ|コードを部品化して、再利用と見通しを手に入れよう
ここまでで、モジュールの役割(コードを“部品”としてまとめる)、基本の読み込み方、そして自作モジュールの作り方と使い方を一連の流れで確認しました。
これにより、複数ファイルに処理を分けて再利用性・保守性・見通しを高めつつ、必要な機能だけを明確に取り込む設計ができるようになります。
標準モジュールに頼りつつ、自分の共通ロジックを自作モジュールとして育てれば、“使い回せる道具箱”を手元に蓄えていけます。
まずは小さな関数をひとつのモジュールに切り出し、import
で呼び出すところから始めましょう。
今日の一歩が、明日の開発スピードと品質を確実に押し上げます。
- サイト改善アンケート|ご意見をお聞かせください(1分で終わります)
-
本サイトでは、みなさまの学習をよりサポートできるサービスを目指しております。
そのため、みなさまの「プログラミングを学習する理由」などをアンケート形式でお伺いしています。1分だけ、ご協力いただけますと幸いです。
【Python】サイト改善アンケート
練習問題:モジュールを使ってみよう
この記事で学習した「モジュール」を復習する練習問題に挑戦しましょう。
問題|円の直径、面積、円周を計算するプログラムを作ろう
Pythonの標準モジュールmath
を使用して、円の直径、面積、円周を計算するプログラムを作成してください。
このプログラムではユーザーから円の半径を入力してもらい、計算結果を画面に表示します。
以下の要件に従ってコードを完成させてください。
math
モジュールをインポートし、円周率にmath.piを使用すること。- 円の半径を入力として受け取ること。入力値が負の数や0の場合は、エラーメッセージを表示すること。
- 円の直径を計算すること(直径 = 半径 × 2)。
- 円の面積を計算すること(面積 = π × 半径²)。
- 円周を計算すること(円周 = 2 × π × 半径)。
- 計算結果を次のように表示すること:
- 「直径: ○○」
- 「面積: ○○」
- 「円周: ○○」
- 入力が数値以外の場合、エラーメッセージを表示すること。
ただし、以下のような実行結果となるコードを書くこと。
円の半径を入力してください(例: 5): 5 直径: 10.00 面積: 78.54 円周: 31.42
円の半径を入力してください(例: 5): -2 半径は正の数を入力してください。
円の半径を入力してください(例: 5): 文字 数値を入力してください!
ヒント|難しいと感じる人だけ見よう
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
- ヒント1【コードの構成を見る】
-
正解のコードは上から順に以下のような構成となっています。
1:円計算用の関数を定義し、妥当性チェックと計算結果のまとめ方を決める
・円周率は標準モジュールから取得して使う
・半径が0以下なら計算せずにエラーメッセージを返す
・直径, 面積, 円周を計算し、キー付きの入れ物(辞書)にまとめて返す2:半径の入力を受け取り、計算を呼び出してエラー処理と結果表示を行う
・数値以外の入力に備えて、変換時のエラーを例外処理でキャッチする
・戻り値が文字列(エラー)か辞書(正常)かで分岐して扱いを変える
・表示はフォーマット指定で小数点以下2桁に整える(例::.2f
)
- ヒント2【穴埋め問題にする】
-
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
'''(穴埋め) 標準モジュール math をインポートする行を書く ''' def calculate_circle_properties(radius): if radius <= 0: # 半径が0以下の場合、エラーメッセージを返す return "半径は正の数を入力してください。" # math モジュールを使用して計算 diameter = radius * 2 # 直径 area = math.'''(穴埋め)''' * (radius ** 2) # 面積 circumference = 2 * '''(穴埋め)'''.pi * radius # 円周 # 結果を辞書形式で返す return { "直径": diameter, "面積": area, "円周": circumference } # ====== ここから直接実行される処理 ====== try: # ユーザーから半径を入力 radius = float(input("円の半径を入力してください(例: 5): ")) # 計算結果を取得 result = calculate_circle_properties(radius) # 結果を表示 if isinstance(result, str): # エラーメッセージが返ってきた場合 print(result) else: print(f"直径: {result['直径']:.2f}") print(f"面積: {result['面積']:.2f}") print(f"円周: {result['円周']:.2f}") except ValueError: # 数値以外が入力された場合のエラーメッセージ print("数値を入力してください!")
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
解答例|math.piで作る円計算ツール
例えば以下のようなプログラムが考えられます。
- 正解コード
-
import math # 標準モジュール "math" をインポート def calculate_circle_properties(radius): """ 円の半径を受け取り、直径、面積、円周を計算する関数 - math モジュールを使用して数学的な計算を行う """ if radius <= 0: # 半径が0以下の場合、エラーメッセージを返す return "半径は正の数を入力してください。" # math モジュールを使用して計算 diameter = radius * 2 # 直径 area = math.pi * (radius ** 2) # 面積 circumference = 2 * math.pi * radius # 円周 # 結果を辞書形式で返す return { "直径": diameter, "面積": area, "円周": circumference } try: # ユーザーから半径を入力 radius = float(input("円の半径を入力してください(例: 5): ")) # 計算結果を取得 result = calculate_circle_properties(radius) # 結果を表示 if isinstance(result, str): # エラーメッセージが返ってきた場合 print(result) else: print(f"直径: {result['直径']:.2f}") print(f"面積: {result['面積']:.2f}") print(f"円周: {result['円周']:.2f}") except ValueError: # 数値以外が入力された場合のエラーメッセージ print("数値を入力してください!")
解答例の解説|math.piで作る円計算ツールの考え方
解答例の詳細解説は以下の通りです。
- 詳細解説
-
円計算用の関数を定義
import math # 標準モジュール "math" をインポート def calculate_circle_properties(radius): """ 円の半径を受け取り、直径、面積、円周を計算する関数 - math モジュールを使用して数学的な計算を行う """ if radius <= 0: # 半径が0以下の場合、エラーメッセージを返す return "半径は正の数を入力してください。" # math モジュールを使用して計算 diameter = radius * 2 # 直径 area = math.pi * (radius ** 2) # 面積 circumference = 2 * math.pi * radius # 円周 # 結果を辞書形式で返す return { "直径": diameter, "面積": area, "円周": circumference }
このパートでは、標準モジュールを読み込んだうえで、半径から直径・面積・円周を求めるための専用関数を用意します。
半径が正の数かを最初に確認し、条件を満たさない場合は処理を止めてエラーメッセージを返します。
正しい半径であれば、円周率をモジュールから参照して必要な値を計算し、結果をひとまとめにして返します。
入出力は行わず「計算と結果の受け渡し」に責務を限定しているため、テストしやすく再利用もしやすい構成です。計算を呼び出して結果表示
try: # ユーザーから半径を入力 radius = float(input("円の半径を入力してください(例: 5): ")) # 計算結果を取得 result = calculate_circle_properties(radius) # 結果を表示 if isinstance(result, str): # エラーメッセージが返ってきた場合 print(result) else: print(f"直径: {result['直径']:.2f}") print(f"面積: {result['面積']:.2f}") print(f"円周: {result['円周']:.2f}") except ValueError: # 数値以外が入力された場合のエラーメッセージ print("数値を入力してください!")
このパートでは、まずユーザーから文字列として受け取った半径を数値に変換します。
変換に失敗した場合(文字が混じるなど)は、例外処理で受け止めて分かりやすいメッセージを表示します。
数値にできたら計算専用の関数を呼び出し、戻り値がエラーメッセージか計算結果かを判定して処理を分岐します。
エラーならそのまま表示、計算結果なら直径・面積・円周を取り出して、小数点以下2桁の体裁で整えて出力します。
入出力と例外処理をこのブロックに集約し、計算ロジックは関数に任せることで、役割が明確になり保守しやすくなります。
モジュールの疑問解消|FAQと用語のまとめ
初心者がつまずきやすいポイントをFAQとしてまとめ、またよく使う専門用語をわかりやすく整理しました。
理解を深めたいときや、ふと疑問に感じたときに役立ててください。
FAQ|モジュールに関するよくある質問
- Q1. モジュールとパッケージの違いは何ですか?
-
モジュールはPythonファイル単位で、パッケージはモジュールをまとめたディレクトリ構造のことを指します。
- Q2. モジュールの再利用性を高める方法は?
-
汎用的な処理を関数化して1つのモジュールにまとめ、必要なスクリプトからimportして使うことが有効です。
- Q3. importされたモジュールの中身を確認する方法は?
-
dir(モジュール名)
で、そのモジュールに含まれる関数やクラスを一覧で確認できます。
Python用語集|モジュールに関する用語一覧
今回の記事で出てきた用語・関数などを一覧で紹介します。
このサイトに出てくる 全てのPython用語をまとめた用語集 も活用してください。
Python用語 | 定義・使い方の概要 | 解説記事へのリンク |
---|---|---|
モジュール | 関数やクラスなどの定義をまとめたPythonファイルで、import 文で読み込んで再利用できる | 本記事 |
標準モジュール | Pythonに最初から含まれているモジュール。追加インストール不要で使用可能 | 本記事 |
math モジュール | 数学関数(平方根、三角関数、対数など)を提供する標準モジュール | 本記事 |
sqrt() 関数 | math モジュールの関数で、引数の平方根を返す | 本記事 |
numpy モジュール | 大規模な数値計算を効率的に行うための外部ライブラリ。多次元配列や線形代数処理などに対応 | 本記事 |
array() 関数 | numpy モジュールで使われる配列作成関数。Pythonのリストを高性能な配列に変換する | 本記事 |
os モジュール | ファイルやディレクトリの操作、環境変数の取得など、OS依存の機能を提供する標準モジュール | 本記事 |
datetime モジュール | 日付や時刻の操作を行うための標準モジュール。現在日時の取得や日付計算などに利用 | 本記事 |
json モジュール | PythonオブジェクトとJSON形式の相互変換を行うための標準モジュール | 本記事 |
Ramdom モジュール | 擬似乱数の生成に関する関数を提供する標準モジュール。値のランダム選択やシャッフルなどに使用 | Lesson1-6 |