最近、Github CLIの存在を知って使いこなそうと頑張っている。

その中のコマンドの1つとしてPRを作成するコマンド gh pr create がある。

https://cli.github.com/manual/gh_pr_create

オプションの1つである --body を使えば、PRのbodyもコマンドラインから渡せてしまう。


gh pr create --web --body "
### What

プルリクエストをコマンドラインから作成してみた
"

ただし、これをMakefileの中でやろうとすると以下のようなエラーになる。

# Makefile
create-pr:
	gh pr create --web --body "
	### What

	プルリクエストをコマンドラインから作成してみた
	"
# execute `make create-pr`
gh pr create --web --body "
/bin/sh: -c: line 0: unexpected EOF while looking for matching `"'
/bin/sh: -c: line 1: syntax error: unexpected end of file
make: *** [create-pr] Error 2

Makefileの中では1行1コマンドとして解釈されてしまうため、ダブルクオーテーションの終わりを探してくれない。

かといって、こうすると

# Makefile
create-pr:
	gh pr create --web --body "\
	### What\
	\
	プルリクエストをコマンドラインから作成してみた\
	"

コマンド自体は実行できるが改行文字が含まれていないことになり、bodyが ###Whatプルリクエストをコマンドラインから作成してみた になる。

よってこうする。

# Makefile
define PR_BODY
### What

プルリクエストをコマンドラインから作成してみた
endef
export PR_BODY
.PHONY: cloud-gov/prd/main/upd-apl-status
create-pr:
	gh pr create --web --body "$${PR_BODY}"

環境変数としてexportすることで、Makefileの中で改行文字を扱えるようになる。