Skip to content

Composer を v2.0 にアップデートする

  • PHP
  • Composer
  • Docker

📅 2020-12-31

⏱️ 4 min read

ローカル環境

mac のローカルにインストール済みの Composer のバージョンを上げる。

$ sw_vers
ProductName:	macOS
ProductVersion:	11.0.1
BuildVersion:	20B50

$ composer --version
Composer version 1.8.4 2019-02-11 10:52:10

$ composer self-update
Deprecation Notice: Required parameter $path follows optional parameter $schema in phar:///usr/local/bin/composer/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/UndefinedConstraint.php:62
Deprecation Notice: Required parameter $path follows optional parameter $schema in phar:///usr/local/bin/composer/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/UndefinedConstraint.php:108
Deprecation Notice: Method ReflectionParameter::getClass() is deprecated in phar:///usr/local/bin/composer/src/Composer/Repository/RepositoryManager.php:130
Deprecation Notice: Method ReflectionParameter::getClass() is deprecated in phar:///usr/local/bin/composer/src/Composer/Repository/RepositoryManager.php:130
Updating to version 2.0.8 (stable channel).
   Downloading (100%)         
Deprecation Notice: Function openssl_free_key() is deprecated in phar:///usr/local/bin/composer/src/Composer/Command/SelfUpdateCommand.php:229
Use composer self-update --rollback to return to version 1.8.4

$ composer --version
Composer version 2.0.8 2020-12-03 17:20:38

結論

self-update コマンドで最新のバージョンにアップデートできた。

ハマったところ

composer self-update --2 でできるよ!と言う記事が多かったが怒られた。

$ composer self-update --2
Deprecation Notice: Required parameter $path follows optional parameter $schema in phar:///usr/local/bin/composer/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/UndefinedConstraint.php:62
Deprecation Notice: Required parameter $path follows optional parameter $schema in phar:///usr/local/bin/composer/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/UndefinedConstraint.php:108
Deprecation Notice: Method ReflectionParameter::getClass() is deprecated in phar:///usr/local/bin/composer/src/Composer/Repository/RepositoryManager.php:130
Deprecation Notice: Method ReflectionParameter::getClass() is deprecated in phar:///usr/local/bin/composer/src/Composer/Repository/RepositoryManager.php:130

  [Symfony\Component\Console\Exception\RuntimeException]  
  The "--2" option does not exist.                        

self-update [-r|--rollback] [--clean-backups] [--no-progress] [--update-keys] [--stable] [--preview] [--snapshot] [--set-channel-only] [--] [<version>]

Docker 環境

FROM php:7.4-fpm-alpine
LABEL maintainer="ysmtegsr"

COPY php.ini /usr/local/etc/php/

ARG TZ

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer

RUN composer config -g repos.packagist composer https://packagist.jp
# RUN composer global require hirak/prestissimo <- コメントアウト
RUN docker-php-ext-install pdo_mysql

ポイント

  • 5 行目の --from=composer:latest

    • 公式の Composer Docker イメージ を指定している箇所で :{version} とすることでイメージのバージョンを指定することができる。
    • 何も考えずに最新が良い時は上記のように latest とする。
    • :2.0 のようにタグで任意のバージョンを指定することができる。
  • 9 行目のコメントアウト

    • Laravel の環境構築する際など PHP の Dockerfile には Composer を高速化するためのパッケージ hirak/prestissimo を入れるのが割と定番化している。1
    • しかし、先日の PHP カンファレンス 2020 でも 2 系の高速化の話が取り上げられていたので高速化の仕組みは理解できていた。
    • 2 系では並列ダウンロードが実現され、高速化されたため、結果 hirak/prestissimo ライブラリは必要なくなったというオチ。
← PrevNext →
  • © ysmtegsr 2019 - 2021