Makefile入門:Pythonにおけるビルド自動化の初心者ガイド
By hientd, at: 2023年12月29日9:55
Estimated Reading Time: __READING_TIME__ minutes
                                
                            
                                
                            自動化は、現代のソフトウェア開発において重要な役割を果たし、開発者は時間とエラーを削減できます。bashスクリプトやCI/CDプラットフォームなどのツールが広く使用されていますが、Makefileは、タスクを自動化する最も効率的で汎用性の高い方法の1つです。もともとC/C++プロジェクト用に設計されたMakefileは、Python開発者にとっても同様に強力です。このガイドでは、Makefileの概要とPythonプロジェクトでの使用方法を紹介します。
Makefileとは何か?
Makefileは、コードのビルド、テスト、デプロイなどのタスクを自動化するためのルールを定義したシンプルなテキストファイルです。makeコマンドと連携して動作し、Makefileを読み取ってタスクを効率的に実行します。
PythonプロジェクトでMakefileを使用する理由
- 自動化: テストの実行やコードのフォーマットなどの反復的なタスクを簡素化します。
 - 一貫性: チームメンバーがタスクを実行するための標準的な方法を提供します。
 - 移植性: 重い依存関係を必要とせずに、さまざまな環境で動作します。
 
Makefileの基本構造
Makefileは、ターゲット、依存関係、コマンドで構成されています。
target: dependencies
    command 
- ターゲット: タスクの名前。
 - 依存関係: 現在のターゲットが依存するファイルまたはターゲット。
 - コマンド: ターゲットが実行されたときに実行されるシェルコマンド。
 
注記: コマンドはタブでインデントする必要があります。スペースを使用しないでください。
Python用の最初のMakefileを作成する
ステップ1: プロジェクトの設定
Pythonプロジェクトの構造を作成します。
my_project/
│
├── Makefile
├── requirements.txt
├── src/
│   ├── app.py
│   └── utils.py
└── tests/
    ├── test_app.py
    └── test_utils.pyステップ2: Makefileの作成
Makefileの例を以下に示します。
# 変数の定義
PYTHON = python3
PIP = pip3
# 依存関係のインストール
install:
    $(PIP) install -r requirements.txt
# テストの実行
test:
    $(PYTHON) -m pytest tests/
# blackを使用したコードのフォーマット
format:
    $(PYTHON) -m black src/ tests/
# flake8を使用したコードのlint
lint:
    $(PYTHON) -m flake8 src/ tests/
# 一時ファイルのクリーンアップ
clean:
    find . -name '__pycache__' -exec rm -rf {} +
    find . -name '*.pyc' -exec rm -f {} +
ステップ3: makeを使用したタスクの実行
 
- 依存関係のインストール: 
make install
 - テストの実行: 
make test
 - コードのフォーマット: 
make format
 - コードのlint: 
make lint
 - 一時ファイルのクリーンアップ: 
make clean 
Makefileの説明
1. 変数
PYTHONやPIPのような変数は、異なる環境にMakefileを簡単に適応させることができます。
2. ターゲットとコマンド
各ターゲット(例:install、test)はタスクに対応し、ターゲットが呼び出されるとコマンドが実行されます。
PythonプロジェクトでMakefileを使用するケース
- テスト、フォーマット、lintなどの反復的なタスクの実行。
 - 新規開発者向けのプロジェクトセットアップの自動化。
 - 複雑なツールに依存することなく、開発ワークフローを簡素化します。
 
結論
Makefileは、Pythonプロジェクトのタスクを自動化する軽量ながらも強力なツールです。基本を習得することで、ワークフローを簡素化し、時間を節約し、開発プロセスに一貫性をもたらすことができます。
次回の投稿では、高度なMakefileテクニックについて詳しく説明し、変数、phonyターゲット、効率化のためのベストプラクティスを探ります。