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ターゲット、効率性のためのベストプラクティスを検討します。