Makefile で 動的にコマンドを変える方法

概要

使用できるコマンドかどうかチェックして、使用できない場合は別のコマンドを使用するみたいなことをやりたかったので

例えば、docker-compose がインストールされている場合はそれを使用、それ以外の場合は docker compose を使用みたいな感じ

実装

動的にコマンドを変更

DOCKER_COMPOSE := $(command -v docker-compose >/dev/null && echo docker-compose || echo docker compose)

up:
	$(DOCKER_COMPOSE) up -d
down:
	$(DOCKER_COMPOSE) down
  • command -v でコマンドの存在をチェックし、存在すればそれを、存在しなければ別のコマンドを echo
  • := は即時評価。echo されて変数に代入された結果を $(変数) で使用

動的にオプションを設定

GitHub Actions で docker compose exec する際に -T オプションが必要みたいなときは以下で実現できる。

TTY_OPTION := $(echo $CI | grep -q true && echo "-T")

test:
	$(DOCKER_COMPOSE) exec $(TTY_OPTION) app yarn lint
  • GitHub Actions 実行時に設定される $CI=truegrep コマンドでチェックし、該当する場合に -Techo

auto height で transition
next thumbnailnext article
arrow