Pythonスキルの習得

【Python入門】モジュールとパッケージの基本 – 再利用可能なコードを書く –

【Python入門】モジュールとパッケージの基本 - 再利用可能なコードを書く -

こんにちは、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プログラミングにおいてコードの再利用性、
  • 可読性(コードの読みやすさ)、
  • そしてメンテナンスを容易にするために、

非常に重要です。

効率的で理解しやすいコードを書くため、以下のベストプラクティスに、従いましょう。

  1. モジュールは、分かりやすい名前にしましょう
    • モジュールの役割や機能が、一目でわかる名前を心がけましょう。
  2. 各モジュールは、単一の目的に沿ったものにしましょう
    • モジュールは、一つの機能に関連するコードのみを、記載しましょう。
    • コードの再利用とテスト(別記事で紹介します。)が、容易になります。
  3. importステートメントは、ファイルの最初にまとめて書きましょう
  4. 循環importを避けましょう
    • 循環インポートは、モジュールAがモジュールBをインポートし、
    • モジュールBがさらにモジュールAをインポートする状況を指します。
    • この場合、エラーが発生します。

モジュール・パッケージは、自分のものだけではなく、他社が作成したものも、利用可能です。

外部パッケージの利用方法は、以下の記事で、解説しております。

(Anacondaの章は、必要に応じて読んでください。)

【Python】pipの使い型入門 - コマンドライン、Anaconda、PyCharmからの操作方法を解説 -
【Python】pipの使い方入門 - コマンドライン、Anaconda、PyCharmからの操作方法を解説 -Python入門者を対象に、pipの使い型を解説した記事です。 コマンドライン、Anaconda、PyCharmからの操作方法を、わかりやすく解説しました。 ...

まとめと次回予告

まとめ

今回の記事では、

  • モジュールとパッケージの基本から、
  • それらを作成と利用方法
  • そして、ベストプラクティスについて

解説しました。

今回の内容は

  • コードの再利用性を高め
  • プロジェクトを整理し、管理しやすくするために

非常に重要です。

しっかりと、理解しておきましょう。

次回予告

次回は、プログラミングにおいて非常に重要な

  • ファイルの入出力方法について

解説します。

  • ファイル入出力の基礎、
  • テキストファイルの読み書き方法、
  • CSVやJSONなどの一般的なデータ形式の取り扱い方

そしてPythonが提供する、

  • 便利なライブラリを利用した簡単で効率的な作業方法まで

を詳しく解説していきます。

最後までお付き合い頂き、ありがとうございました。

また次回、お会いしましょう!