こんにちは、Zero-Cheeseです。
本記事は、プログラム言語「Python」を学び始めた方を対象に、
- モジュールとパッケージの基本的な概念
- モジュール・パッケージの作成と利用方法を
ご紹介します。
この記事を理解するには、「関数」の基礎知識が必要です。
関数の基本に不安のある方は、下記の記事を、ご参照ください。
はじめに
Pythonを学び初めた方にとって、
- 「モジュール」と「パッケージ」の違いを理解することは、
少し難しく感じるかもしれません。
そこでまずは、おもちゃのブロックを使った例え話で、イメージをつかむ事から始めたいと思います。
(厳密な説明は、後の章で解説します。)
モジュール
モジュールは、「ある特定の機能を持った、レゴブロックのようなもの」と例える事ができます。
例えば
- 音を鳴らす事ができる、ブロック
- 光る事ができる「ブロック」
- 動く事ができる「ブロック」
などを、イメージしてみて下さい。
これらのブロックは、単体でそれぞれが持っている機能(光るとか)を、発動できるとします。
Pythonのモジュールもこれと似ていて、特的の機能を持つコードの塊であり、単体で特定の作業ができます。
パッケージ
一方パッケージは、さきほどのレゴブロックを組み合わせて、より複雑なものを作るようなものです。
例えば、「光る」レゴブロックと「動く」レゴブロック などを組み合わせて行くことで、「海賊船」を作るようなイメージです。
Pythonパッケージは、モジュールのグループであり、単体のモジュールよりも高度で複雑なことができます。
モジュールの基本と、作成・利用方法
本章では、具体的にモジュールとは何なのかを解説した後、作成・利用方法を説明します。
モジュールとは
Pythonにおけるモジュールとは、コードを1つのまとめた、ファイルのことを指します。
この1つのファイルの中には、
- 変数や関数
- クラス(このトピックは、別記事にて紹介します。)など
「プログラムコードに必要なもの一式」を入れる事ができます。
モジュールの利点は以下のとおりです。
- 整理できる:関連するコードを1ヶ所にまとめることで、探しやすくなります。
- 繰り返し使える:一度作ったコードを、別のプログラムから呼び出して、使用する事ができます。 これは、「再利用」と呼ばれています。
モジュールの作り方
例として、「計算をする関数」を集めた「モジュール」を、作ってみます。
「calc.py」というファイル名で、下記コードを記述します。
def add(a, b):
return a + b
def subtract(a, b):
return a - b
この「calc.py」自体がモジュールとなります。
この中の、add( ) や、subtract ( ) 関数を、別のPythonプログラムから呼び出して、使用する事ができます。
モジュールの利用方法
前述の「calc.py」を、別のPythonプログラムで、実際に使ってみましょう。
新しいPythonファイルを、作成します。(ファイル名は、任意で大丈夫です。)
import calc # calc.pyを、読込む処理
result = calc.add(5, 3)
print(result) # 8と表示されます。
- import モジュール名(.pyは除いたファイル名)
を記述することで、他のPythonプログラムから、calc.pyに記述されたコードを「再利用」する事ができます。
import したモジュールに別名を付けて、Pythonコード内で使用する事ができます。
具体例を見た方が早いので、下記コードをご覧ください。
import calc as c # calc.pyを読込み
result = c.add(5, 3) # cという別名で、呼出す事が可能
print(result) # 8と表示されます。
「import AA as 別名」を使用すると、そのPythonコード中では、「別名」でimportしたモジュールを、使う事ができるようになります。
パッケージの基本と、作成・利用方法
パッケージとは
Pythonでいうパッケージとは、関連するモジュールを「格納するディレクトリ」を指します。
パッケージは、より大きなプログラムの構造を整理する手段として、非常に重要です。
パッケージの作り方
パッケージの作成するためには、関連するモジュール(.py
ファイル)を含むディレクトリを準備します。
例えば、次のようなディレクトリ構造を、作成します。
sound/ # トップレベルのパッケージ
__init__.py # <- 別途説明
effects/ # サブパッケージ
__init__.py
echo.py
surround.py
filters/ # 別のサブパッケージ
__init__.py
equalizer.py
「sound」ディレクトリ直下の「__init__.py」は、中身が空のファイルです。
これにより、Pythonはそのディレクトリがパッケージであると認識します。
(Python 3.3以降は必須ではありませんが、互換性のため、残されています。)
パッケージの利用方法
作成したパッケージのモジュールを利用するには、以下のようなimport
ステートメントを記述します。
from sound.effects import echo
このコードは、
sound
パッケージの中のeffects
サブパッケージからecho
モジュールをインポート
しています。
その上で、例えば「echo」モジュールに、「apply_echo」関数がある場合、次にように利用する事ができます。
from sound.effects import echo
echo.apply_echo(input_audio)
パッケージ内の全てのモジュールを、インポートする方法があります。
from sound import * # 全て読込む場合、* を使用
ただしこれは、推奨される方法ではありません。
なぜなら、不必要なモジュールまで読み込んでしまい、コードの汚染や、パフォーマンスの低下を、招く可能性があるからです。
モジュール、パッケージのベストプラクティス
モジュールとパッケージを、理解する事は、
- Pythonプログラミングにおいてコードの再利用性、
- 可読性(コードの読みやすさ)、
- そしてメンテナンスを容易にするために、
非常に重要です。
効率的で理解しやすいコードを書くため、以下のベストプラクティスに、従いましょう。
- モジュールは、分かりやすい名前にしましょう
- モジュールの役割や機能が、一目でわかる名前を心がけましょう。
- 各モジュールは、単一の目的に沿ったものにしましょう
- モジュールは、一つの機能に関連するコードのみを、記載しましょう。
- コードの再利用とテスト(別記事で紹介します。)が、容易になります。
- importステートメントは、ファイルの最初にまとめて書きましょう
- 循環importを避けましょう
- 循環インポートは、モジュールAがモジュールBをインポートし、
- モジュールBがさらにモジュールAをインポートする状況を指します。
- この場合、エラーが発生します。
モジュール・パッケージは、自分のものだけではなく、他社が作成したものも、利用可能です。
外部パッケージの利用方法は、以下の記事で、解説しております。
(Anacondaの章は、必要に応じて読んでください。)
まとめと次回予告
まとめ
今回の記事では、
- モジュールとパッケージの基本から、
- それらを作成と利用方法、
- そして、ベストプラクティスについて
解説しました。
今回の内容は
- コードの再利用性を高め、
- プロジェクトを整理し、管理しやすくするために
非常に重要です。
しっかりと、理解しておきましょう。
次回予告
次回は、プログラミングにおいて非常に重要な
- ファイルの入出力方法について
解説します。
- ファイル入出力の基礎、
- テキストファイルの読み書き方法、
- CSVやJSONなどの一般的なデータ形式の取り扱い方
そしてPythonが提供する、
- 便利なライブラリを利用した簡単で効率的な作業方法まで
を詳しく解説していきます。
最後までお付き合い頂き、ありがとうございました。
また次回、お会いしましょう!