やりたいこと
- composerをダウンロードしたい
- 繰り返し実行できるように、composerが既にDL済みのときは何もしたくない (毎回DLするのは無駄なのでやりたくない)

やりたいことを叶えるMakefile
.PHONY: setup
setup: composer.phar
# ここにアプリケーションをセットアップするためのアレコレを書く。composer installとか。
composer.phar:
curl -sSfL -o composer-setup.php https://getcomposer.org/installer
php composer-setup.php --filename=composer.phar
rm composer-setup.php
実行例
# 最初はcomposer.pharが無いので、ダウンロードが走る
$ make setup
curl -sSfL -o composer-setup.php https://getcomposer.org/installer
php composer-setup.php --filename=composer.phar
All settings correct for using Composer
Downloading...
Composer (version 1.7.2) successfully installed to: /Users/pinkumohikan/products/jinsoku/composer.phar
Use it: php composer.phar
rm composer-setup.php
# composer.pharが使える状態になる
$ ./composer.phar | head -n 7
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.7.2 2018-08-16 16:57:12
# 既にcomposer.pharがあるので、composerのダウンロードは走らない
$ make setup
make: Nothing to be done for `setup'.
Makefileを解説
.PHONY: setup
.PHONY にターゲット名を羅列しておくと同名のファイル/ディレクトリが存在してもターゲットを実行する。逆にいうと、ここに composer.phar を書くと、 make setup を実行すると毎回ダウンロードが走るようになる。
setup: composer.phar
アプリケーションを使える状態にするためのアレコレを書くターゲット。
- 依存モジュールのインストール
- コンフィグファイルをテンプレからコピーしておく
など。依存ファイルとして composer.phar を指定しているので、 composer.phar が無ければ先に make composer.phar が実行される。
composer.phar:
composerを composer.phar としてダウンロードする処理を書いている。
.PHONY に指定していないので composer.phar というファイルが無かったら一度だけ実行される。
Introduction - Composer を参考にした。