元セブ島在住のエンジニアの僕「Tommy」が、プログラミング・英語・セブ事情を発信するブログ

Tommy's blog

【Python】モジュール化の方法【→プログラム初心者向け】

2月 4, 2020

プログラム女子
プログラムってどうやって整理すればいいのかな...自分が書いたプログラムだけど、どこにいったか分からなくなって..
「モジュール化」という考え方があるよ。それは「意味のある単位に分割する」という意味なんだけど、ここでは、大きな処理をファイルに分割する方法を紹介するね。
Tommy

この記事で分かること

  • 「モジュール化」の内容とその目的が分かる
  • 「モジュール化」する方法が分かる

Pythonでモジュール化する概要

モジュール化とは、「一連の大きな処理を意味のある単位に分割する」という意味です。Pythonでのモジュール化には2つの手段があります。

1つ目の手段は「別の関数を作る」ことです。つまり、大きなロジック(処理)を機能単位に分割して、それら1つ1つを関数にしていくことが考えられます。これによって、機能や処理目的別の関数が作られることになるので、巨大な一枚岩の関数を追っていく手間が省くことができて、プログラムの見やすさが向上します。

2つ目手段は、「関数を別のファイルに移す」ことです。プログラム(ソースコード)はファイルに記述されることになります。大規模なプログラムになれば、ソースコードも複数のファイルにまたがって記述されます。もし、処理が関数単位で整理されているとしても、その関数を複数のファイルのうち、どのファイルに定義するかはよく考えなければいけません。

例えば、1つのファイルに関数が1000個並んでいる場合は、いくら機能単位の関数に分割できているとは言っても、その関数の多さで、プログラムの見やすさは失われてしまいます。このような場合には、いくつかの関数が集まった1つのファイルを作って、そのファイルがどのような意味があるか?ということに従ってファイルの名前をつける。これが「関数を別のファイルに移す」という手段を取った「モジュール化」です。

本記事では、「関数を役割単位で別ファイルへ移す」ことによってモジュール化する方法を説明します。このモジュール化することによって、意味のある単位でファイルにプログラムがまとめられるので、プログラムの再利用が可能になります。また、大きな規模のプログラムが、役割を持ったファイルに分割され、プログラム全体が把握しやすくなります。

Pythonでモジュール化する為の前提環境

Pythonのモジュール化(別ファイル)の方法の前提の環境は、下の記事で説明している私の環境と同じ環境で確認しています。

また、レンタルサーバなどのLinuxサーバを使っている場合は、下の記事でプログラミングする環境の作り方を説明しています。

もし、まだプログラムする環境ができていない方は、先にこちらの記事を読んで、プログラミングできる環境をつくることをおすすめします。

Pythonでモジュール化する為のサンプルプログラム

ここでは、別のファイルの関数を移すことによってモジュール化するサンプルプログラムを説明します。

別ファイル(モジュール化)のプログラム作成

モジュール化では次の手順でモジュール化を行います。

  1. モジュール化された関数を定義する
  2. モジュール化された関数を呼び出す

具体的には、「test.py」「test1.py」という2つのファイルを作成して、「test.py」から「test1.py」で定義した関数を使うというプログラムを説明します。

1.モジュール化された関数を定義する

まず、test1.pyというファイルに関数「method_test1」という関数を定義します。この関数の中では、単純に「method_test1 is called.」と表示するプログラムが書かれています。

def method_test1():

	print("method_test1 is called.")

  1. 関数「method_test1」を定義宣言する
  2. 文字列「method_test1 is called」を表示する

2.モジュール化された関数を呼び出す

一方、test.pyというファイルでは、「method_test」という関数を定義します。この中では、「method_test is called.」という文字列を表示するプログラムを書くことにします。ここで、test.pyから、test1.pyの「method_test1」を呼び出すことを考えます。

また、test1.pyの関数「method_test1」を呼び出す為に、test1をインポートします。処理の中で、

モジュール名(test1) + .(ドット) + 関数名(method_test1())

とすると、test1.pyの 関数「method_test1」を呼び出すことができます。比較の為に、test.pyのmethod_test()を呼び出す処理も記載しました。method_test()は、test.pyの関数なので、モジュール名を記載する必要はなく、関数名だけで呼び出すことができます。

import test1

def method_test():

	print("method_test is called.")


if __name__ == '__main__':

	test1.method_test1()
	method_test()

  1. 関数「method_test」を定義宣言する
  2. 文字列「method_test is called」を表示する
  3. メインの処理を定義宣言する
  4. ファイル「test1」の関数「methond_test1」を呼び出す
  5. 自身のファイルの関数「methond_test」を呼び出す

別ファイル(モジュール化)の実行結果

下の表示が実行結果になります。Mainの処理では、初めにファイル「test1.py」の関数「method_test1」を呼び出し、次に、ファイル「test.py」の関数「method_test」を呼び出したので、その順番で各関数で定義したPrint文が実行されていることが分かります。

$ python test.py
method_test1 is called.
method_test is called.