モヒカンは正義

プログラマー風林火山で言う「風のエンジニア」になりたい(比較的)若者Webエンジニアの備忘録

Makefileを使ってcomposerをスマートにダウンロードする

やりたいこと

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

f:id:pinkumohikan:20181015132436p:plain

やりたいことを叶える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 を参考にした。