はじめに
プログラムの規模が大きくなって、ソースコードの見通しが悪くなっていませんか?
たとえひとりで開発しているとしても、大規模なプログラムではコード行が数万行単位になることも少なくありません。ましてや複数人での開発ではなおさらです。明らかに、ひとつのファイルで開発を続けるのは現実的ではないでしょう。
そのため、Pythonでは「モジュール」という仕組みを使って、プログラムを複数のファイルに分割します。
この記事では、Python初心者の方向けに、Pythonのモジュールの作り方・使い方についてお伝えしていきます。
プログラムをひとつのファイルに詰め込まずに、適切に分割しましょう。
そもそもモジュールってなに?
モジュールとは、他のプログラムから利用できるようにしたプログラムのことです。
Pythonでは、ファイル=モジュールとなっており、事実上すべてのPythonファイルがモジュールといえます。Pythonプログラムは、単一のモジュールまたは複数のモジュールを組み合わせて構成します。
モジュールを使うことには、次のようにさまざまなメリットがあります。
モジュールに分割するメリット
ソースコードの見通しが良くなる
大きなプログラムを単一のファイルに記述すると、ファイルが非常に長くなって閲覧性を損ないます。
ソースコードを上下に行ったり来たりしなければならず、生産性が低下してしまうでしょう。
関連する機能をまとめられる
プログラムには、たいてい関連する複数の機能が存在しています。
それらの機能をモジュールにまとめれば、該当の機能を探すのも、修正するのも容易になります。また、類似機能がまとまっているため、再利用性も高くなります。
複数人でも開発できる
多くのプログラムは複数人で開発するため、ファイルがひとつでは開発は困難です。
モジュールに分割して、それぞれを担当者が開発すれば、ファイルの衝突も避けられます。
基本的なモジュールの作り方・使い方
Pythonでモジュールを作るのは簡単です。先程お伝えした通り、Pythonではファイル=モジュールなので、これまで通りに新しいPythonファイルを作ればOKです。
次の内容で、mymodule.pyファイルを作成して下さい。
mymodule.py: PI = 3.14 def sayhello(): print("hello, module!")
上記のモジュールは、単に変数と関数を定義しているだけの、これまでとなんら変わりないプログラムです。
次に、このモジュールを利用するプログラムを、次のようにmain.pyという別のファイルに記述しましょう。
main.py: import mymodule print(mymodule.PI) mymodule.sayhello()
main.pyでは、1行目でmymoduleをインポートしています。モジュールはインポートしなければ使えませんので、忘れないようにしましょう。
モジュールをインポートしたら、モジュール名を使ってモジュール内の変数や関数を使うことができます。また、次のように特定の属性(変数や関数など)に限定してインポートすることもできます。
main.py : from mymodule import PI, sayhello print(PI) sayhello()
上記の例のように、fromキーワードを使ってインポートした場合には、モジュール名を使わずにアクセスします。
つまり、同じファイルに記述されているような形でアクセスできるわけです。
また、次のようにすると、モジュール内のすべての属性をまとめてインポートできます。
main.py: from mymodule import * print(PI) sayhello()
状況に合わせて、複数の方法を使い分けましょう。
どのようにモジュールを分割するべきか?
モジュールは無秩序に分割すればいいというわけではありません。
モジュールはプログラム構造の一部なので、関連する機能をまとめて適切に分割しなければいけません。最初に起動するメインモジュールを起点として、ツリー構造のようにモジュールを定義していくとよいでしょう。
注意しなければいけないのは、モジュール間の依存関係をシンプルにすることです。
特に、循環した依存関係は問題が起きやすいので避けるべきでしょう。
まとめ
モジュールでプログラムをうまく分割できそうですか?
分け方がいまいちピンとこない場合は、標準モジュールを参考にしてみましょう。関連性のある機能が、しっかりとまとまっています。
また、モジュール間の依存関係には注意しましょう。複雑な依存関係を持たせると、モジュールを管理することが難しくなってしまいます。モジュール図を書いて、依存関係を明示しておくとよいでしょう。