こんにちは。よっしーです(^^)
今日は、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
ターゲットでは、grep
、tr
、sed
、awk
などの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にタグ付けしています。
また明日お会いしましょう!
コメント