5分で作る「Makefile」 for docker-compose

大瀧

2024.07.31

97

こんにちは、オオタキです。


この記事ではdocker-composeの操作コマンドを簡略化する「Makefile」の作成方法を解説します。

5分で作成できて日々の開発効率が上がるのでよかったら読んでいってください。

本題

Makefileを作成する

さっそくですが本題のMakefileをお見せします。

Makefileというファイルをプロジェクトのルートディレクトリに作成し、以下の内容を記載します。

# makeを打った時のコマンド
.DEFAULT_GOAL := help


.PHONY: up down build ps api mysql help


up: ## コンテナ起動
	docker-compose up
down: ## コンテナ停止
	docker-compose down
build: ## コンテナビルド
	docker-compose build
ps: ## コンテナのステータス確認
	docker-compose ps
project-api: ## project-apiコンテナに入る
	docker-compose exec -it project-api /bin/bash
mysql: ## mysqlコンテナに入る
	docker-compose exec -it mysql /bin/bash


help: ## ヘルプ
	@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
		awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'


作成したらMakefileと同じ階層でmakeもしくはmake helpコマンドを実行して、ヘルプが使用可能なコマンドとそれぞれのコマンドの説明が表示されることを確認しましょう。

$ make
up                    コンテナ起動
down                コンテナ停止
build                 コンテナビルド
ps                   コンテナのステータス確認
project-api         manager-apiコンテナに入る
mysql                 mysqlコンテナに入る
help                 ヘルプ

Makefileの使用方法

使い方は他のコマンドと同じです。

$ make ターゲットという形式でターミナルに入力して実行するだけで使えます。


例えば、

$ docker compose upをしたい場合には、ターミナルに$ make upと入力して実行します。

同様にコンテナを停止する場合は$ make down、ビルドする場合は$ make buildで実行できます。


Makefileの解説

Makefile内の各項目について解説していきます。


.DEFAULT_GOAL

コマンドラインでターゲットが指定されなかった場合に使用されるデフォルトの動作を定義します。

今回はコマンドの説明を表示するために help をデフォルトのターゲットとして設定しています。


.PHONY

ターゲットと同名のファイルが作成された場合にコマンドが正しく動作しなくなることを回避するために定義します。


例えば、cleanというターゲットがあるとします。

clean:
	rm *.o temp


このままの状態だと、同じディレクトリ内にcleanという名前のファイルが作成された場合に、$ make cleanコマンドが正常に動作しなくなります。

このような名前の衝突を避けるため、.PHONYにcleanターゲットを記載する必要があります。

.PHONY: clean
clean:
    rm *.o temp


up, down, build, ps ターゲット

それぞれdocker-composeのup, down, build, psコマンドを実行します。

up: がターゲット、その下の行が実際に実行するコマンドという構成です。


project-api, mysql ターゲット

APIサーバー用のコンテナやmysqlコンテナに入るためのdocker-compose execコマンドを実行します。

コマンドが長いのでよく設定していますが意外と便利です。

ご自身のプロジェクトのコンテナ名に書き換えて使用してください。

<コンテナ名>:
	docker-compose exec -it <コンテナ名> /bin/bash


help ターゲット

Makefile内のターゲットと説明を出力するために設定しています。

ファイル内で## コンテナ起動のようにシャープ2つの後に続けて説明を記載しておくと以下のように説明として出力されます。

$ make
up          コンテナ起動
down        コンテナ停止
build         コンテナビルド
ps          コンテナのステータス確認
project-api     manager-apiコンテナに入る
mysql         mysqlコンテナに入る
help         ヘルプ

まとめ

いかがでしたでしょうか。

他にもテスト用のコマンドなどを作成してみてもいいかもしれないですね。

Makefileを作成してmakeコマンドが使えるようになると開発の効率がかなり上がるので、皆さんもぜひやってみてください。


参考:

Top (GNU make)

docker-composeを詠唱する黒魔術「Makefile」入門 #Docker - Qiita

Makefileで開発効率をあげよう!

この記事をシェアする