1. はじめに
Django で開発をするとき、以下のコマンドを多用します。
// マイグレーションを作成
python manage.py makemigrations
// マイグレーションを適用
python manage.py migrate
// サーバーを起動
python manage.py runserver
データベースの構造を変更した場合などは、マイグレーションを新しく作成・適用しないと、エラーが発生してしまいます。
この一連のコマンドを毎回手動で入力するのは、かなり面倒な作業です。
そこで本記事では、これらのコマンドを1回で実行できる方法である、バッチファイル(.bat)について説明します。
バッチファイルは、任意のコマンドに、任意の処理を登録させることができます。これにより、複数の処理を一つのコマンドを叩くだけで自動で実行することができるようになります。
頻繁に使うコマンドをバッチファイルに登録することで、開発速度が向上します。
バッチファイルは Windows 環境向けの仕組みですが、Linux では Makefile が同様の用途として使われます。
2. バッチファイルの作成と実行方法
2.1. バッチファイルの作成の基本
バッチファイルは、プロジェクトのルートディレクトリに作成をします。拡張子は .bat です。
例えば、以下のような構成になります。
project/
├── manage.py <-- Django の管理コマンド
├── run.bat <-- 作成したバッチファイル
├── config/ <-- 設定ファイル
├── app/ <-- アプリケーション
└── requirements.txt <-- 依存関係
バッチファイルの名前が、コマンド名になります。そのため、上記の例であれば、run がコマンド名になります。
次に、バッチファイルの中身を作成します。
例えば、以下のようなバッチファイルを作成したとします。
@echo off
python manage.py makemigrations
python manage.py migrate
python manage.py runserver
このバッチファイルをプロジェクトのルートディレクトリに配置しておくことで、
run
と実行するだけで、
- マイグレーションの作成
- マイグレーションの適用
- 開発用サーバーの起動
という一連の流れを、自動的に実行できます。
これにより、毎回コマンドを手入力する必要がなくなり、開発時の手間を減らすことができます。
2.2. バッチファイルの応用
バッチファイルの応用として、実行時に渡した「引数」を利用して、処理を分岐させることができます。 例えば、プロジェクトのビルドや掃除(ファイルの削除)を一つのバッチファイルで使い分けたい場合、次のように記述します。
ここでは、LaTeXのコンパイルを例に挙げてみます。
@echo off
if "%1"=="pdf" (
echo [BUILD] Creating PDF from src/main.tex...
lualatex -output-directory=bin src/main.tex
if not exist dist mkdir dist
copy bin\main.pdf dist\main.pdf
del bin\main.pdf
echo [SUCCESS] PDF is ready in dist/main.pdf
) else if "%1"=="clean" (
echo [CLEAN] Removing files in bin/ directory...
if exist bin del /q bin\*
echo [SUCCESS] Done.
) else (
echo Usage: make pdf ^| make clean
)
ここで、%1 は1番目の引数を指す特殊な変数です。
このバッチファイル(make.bat)は、実行時のコマンドによって動きが変わります。
2.2.1. make pdf
make pdf
と実行した場合 %1 に pdf が代入されます。その結果、LaTeXのビルド、ディレクトリ作成、ファイルのコピーという一連のビルド処理が実行されます。
2.2.2. make clean
make clean
と実行した場合、%1 に clean が代入され、bin ディレクトリ内の中間ファイルを削除する処理が実行されます。
2.2.3. 引数がない、または間違っている場合
引数が指定されていない、あるいは pdf、clean 以外のコマンドが渡された場合は、
Usage: make pdf | make clean
と表示され、正しい使い方が案内されます。
3. さいごに
バッチファイルは古くからある技術ですが、Windows 環境での開発作業を効率化する上では今でも非常に強力なツールです。
毎回手動で入力していたコマンドを一つのファイルにまとめるだけで、タイポを減らし、本来集中すべき開発に時間を使うことができます。
4. 参考資料
Webサイト
[1]. バッチファイルで繰り返し処理を使う(FOR)
[2]. Wikipedia, バッチ
[3]. わわわIT用語辞典, バッチファイル
[4]. とほほのバッチ入門