makeコマンドにcleanとhelpターゲットを追加

スポンサーリンク
makeコマンドにcleanとhelpターゲットを追加 ノウハウ
makeコマンドにcleanとhelpターゲットを追加
この記事は約8分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、dockerで構築した開発環境において、makeコマンドにターゲットを追加する手順をご紹介します。

スポンサーリンク

実行環境

この記事では、下記の記事で構築している開発環境を前提にしていますので、環境構築をされていない方は、記事を参考に環境構築をお願いします。

makeコマンドにターゲットを追加

この記事で使用しているmakeコマンドのバージョンは下記になります。

% make --version
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for i386-apple-darwin11.3.0

ディレクトリ構造

ディレクトリ構造は下記のようになっています。赤字の箇所が更新になります。

.
├── LICENSE
├── Makefile (更新)
├── README.md
└── app
    ├── docker-compose.yml
    ├── flyway
    ├── mysql
    ├── schemaspy
    └── web

Makefile

下記の赤字の箇所を修正します。

SHELL = /bin/bash
WOKR_DIR = ./app
.DEFAULT_GOAL := help

# アプリのビルドから起動
.PHONY: setup
setup:
	@make build
	@make up
	@make setup_db

# コンテナの状態
.PHONY: ps
ps:
	cd $(WOKR_DIR) \
	&& docker compose ps

# アプリのビルド
.PHONY: build
build:
	cd $(WOKR_DIR) \
	&& docker compose build

# アプリの起動
.PHONY: up
up:
	cd $(WOKR_DIR) \
	&& docker compose up -d

# アプリの停止
.PHONY: down
down:
	cd $(WOKR_DIR) \
	&& docker compose down

# DBのセットアップ
.PHONY: setup_db
setup_db:
	cd $(WOKR_DIR) \
	&& docker compose run --rm flyway-baseline \
	&& docker compose run --rm flyway-migrate \
	&& docker compose run --rm flyway-info \
	&& docker compose run --rm schemaspy-cmd

# テスト用DBのセットアップ
.PHONY: setup_test_db
setup_test_db:
	cd $(WOKR_DIR) \
	&& docker compose run --rm flyway-cmd baseline -configFiles=/flyway/conf/flyway-test.conf \
	&& docker compose run --rm flyway-cmd migrate  -configFiles=/flyway/conf/flyway-test.conf \
	&& docker compose run --rm flyway-cmd info     -configFiles=/flyway/conf/flyway-test.conf

# テスト実施
.PHONY: test
test:
	cd $(WOKR_DIR) \
	&& docker-compose run web sh -c "cd /var/www/application/tests && /var/www/vendor/bin/phpunit"

# コンテナの削除
.PHONY: clean
clean:
	cd $(WOKR_DIR) \
	&& docker-compose down --rmi all --volumes --remove-orphans

# help
.PHONY: help
help:
	@grep -B 2 -E '^[a-zA-Z_-]+:' Makefile \
	| grep -v '.PHONY' \
    | grep -v -E '^\s*$$' \
	| tr '\n' ',' \
	| sed 's/--,/\n/g' \
	| awk -F, '{printf "%-20s %s\n", $$2, $$1}'

動作確認

下記のコマンドを実行してエラーにならなければOKです。

make clean

下記のコマンドを実行して、同じ結果になっていればOKです。

% make help                      
setup:               # アプリのビルドから起動
ps:                  # コンテナの状態
build:               # アプリのビルド
up:                  # アプリの起動
down:                # アプリの停止
setup_db:            # DBのセットアップ
setup_test_db:       # テスト用DBのセットアップ
test:                # テスト実施
clean:               # コンテナの削除
help:                # help

解説

cleanターゲット

# コンテナの削除
.PHONY: clean
clean:
	cd $(WOKR_DIR) \
	&& docker-compose down --rmi all --volumes --remove-orphans

このコマンドは、Docker Composeで作成されたコンテナ、ネットワーク、イメージ、およびボリュームを停止して削除するために使用されます。各オプションの説明は以下の通りです。

  • down : コンテナ、ネットワーク、イメージ、およびボリュームを停止して削除します。
  • --rmi all : 使用されているすべてのイメージを削除します。これにより、コンテナが使用する以前のイメージも削除されます。
  • --volumes : コンテナで使用されているすべてのボリュームを削除します。
  • --remove-orphans : コンポーザーファイルに定義されていないコンテナを削除します。

つまり、このコマンドは、Docker Composeで作成したすべてのリソースを削除し、イメージ、ボリューム、ネットワークを含めて、クリーンな状態に戻すために使用されます。ただし、イメージやボリュームなど、必要なものも削除されるので、十分注意して使用する必要があります。

helpターゲット

# help
.PHONY: help
help:
	@grep -B 2 -E '^[a-zA-Z_-]+:' Makefile \
	| grep -v '.PHONY' \
    | grep -v -E '^\s*$$' \
	| tr '\n' ',' \
	| sed 's/--,/\n/g' \
	| awk -F, '{printf "%-20s %s\n", $$2, $$1}'

このコマンドは、Makefileに定義されたターゲットの説明を表示するために使用されます。ターゲットは、Makefile内で定義された名前付きセットのことで、一連のコマンドを一度に実行できるようにします。

このMakefileのhelpターゲットでは、greptrsedawkなどのUnixコマンドを使用して、Makefile内で定義されたターゲットの説明を抽出して表示します。各コマンドは以下のような役割を担っています。

  • grep -B 2 -E '^[a-zA-Z_-]+:' Makefile: Makefile内で定義されたターゲットの行を検索し、2つの行を出力します。
  • grep -v '.PHONY': .PHONYターゲットを除外します。
  • grep -v -E '^\s*$$': 空行を除外します。
  • tr '\n' ',': 改行をカンマに変換します。
  • sed 's/--,/\n/g': --,を削除し、改行を追加します。
  • awk -F, '{printf "%-20s %s\n", $$2, $$1}': カンマで区切られた各行をタブで分割し、ターゲット名を左揃えで表示します。

このようにして、make helpを実行することで、Makefile内のターゲットの説明を読み取ることができます。

.PHONY

.PHONY:は、当初、ターゲットリストを並べていましたが、今回の変更でターゲットごとにつけることにしました。リストだと追加しているかどうかの視認性がわるかったので、こちらのほうがわかりやすいかなと思い、各ターゲットにつけました。

おわりに

今日は、dockerで構築した開発環境にmakeコマンドにターゲットを追加する方法をご紹介しました。これで、開発環境に合わせていろんなターゲットを追加してみてください。

今回使用したファイルは下記のGitHubにタグ付けしています。

よっしー
よっしー

また明日お会いしましょう!

コメント

タイトルとURLをコピーしました