herokuがcomposer.lock必須になったのでcomposerの入れ方をメモしておく
herokuにcomposerを使用したプロジェクトをデプロイする場合、今まではwarningは出ていたようだけど、composer.lockはなくてもデプロイ出来ていた。
それが、2015/8/21にPHPのランタイムがアップデートされ、composer.lockが必須になった、とのこと。
PHP versions 5.5.28, 5.6.12, 7.0.0RC1 available; new composer.lock requirements | Heroku Dev Center
composer.lockがない場合は以下のようなエラーが出る。
ERROR: Your ‘composer.json’ lists dependencies inside ‘require’,but no ‘composer.lock’ was found. Please run ‘composer update’ to re-generate ‘composer.lock’ if necessary, and commit it into your repository. For more information, please refer to the docs at https://devcenter.heroku.com/articles/php-support#activation
composerのインストール
環境はmacで、デフォルト等のPHPが入っている前提で。
以下のコマンドを適当なディレクトリで叩くだけ。
1 2 |
|
ターミナルを再起動して、確認。
1 2 |
|
参考
http://mawatari.jp/archives/install-composer-in-mac
composer install
この状態で、composer.jsonがあるディレクトリに移動し、$ composer install
を叩いてみる。
これでインストール出来れば完了。
ただし、PCにインストールされているPHPによってはモジュールの関係でエラーが出る場合がある。
例)
Problem 1
– The requested PHP extension ext-mcrypt * is missing from your system.
この場合は、全部入りのPHPを入れ直すのが早い。
PHPのインストール
以下のサイトに全部入りのものがまとまっているようなので、そこからインストール。
PHP for OS X as binary package
現時点で最新の5.6を入れる。
$ curl -s http://php-osx.liip.ch/install.sh | bash -s 5.6
このままだと使用するようにはなってないのでパスを通す。
環境によって違うが、デフォルトでは、.bash_profile
に記述すればよいよう。
~/
ディレクトリ以下の.bash_profile
をエディタ等で開いて記述。
なければ作成する。
コマンドで実行する場合は、なければ新規作成としてくれる。
例えば、vi
で開く場合は以下。
sudo
をつけてルート権限で実行している。
$ sudo vi ~/.bash_profile
以下を記述。
export PATH=/usr/local/php5/bin:$PATH
保存して終了。
(viの場合は、i
で入力モードに、esc
で戻って、:x
で保存して終了)
viエディタの使い方
ターミナルを再起動してphpのバージョンを確認。
$ php -v
PHP 5.6.11 (cli) (built: Jul 10 2015 21:46:48)
composer install
この状態で、$ composer install
すれば完了。
実行後は実行したディレクトリ内に、composer.lock
とvendor/
が出来上がる。
vendor
ディレクトリ以下はgitで共有しないように、.gitignore
に追記しておくこと。
.lockと.jsonの関係
composer.json
には、必要なパッケージとインストールするバージョンの指定があれば記述する。
その状態で、$ composer install
すると、パッケージがインストールされ、インストールされたパッケージのバージョン情報などが記述された、composer.lock
ファイルが作成される。
この状態で、他環境などで同じく$ composer install
すると、composer.lock
に書かれたバージョンのパッケージがインストールされ、全く同じ環境が構築される。
$ copmoser update
をすると、再度composer.json
の記述を元にパッケージがインストールされ、composer.lock
が更新される。