21
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

環境を汚さずに Composer を使いたい

Posted at

要約

Composer どうやって実行してますか?

PHP 開発に Composer は必須です。
ではどうやって実行しているでしょうか。

  • ローカルで composer コマンドを使う
    • ローカルにインストールする
    • composer.phar をコミットする
  • Docker コンテナで composer コマンドを使う
    • PHP コンテナにインストールする
      • 自前インストール
      • Composer イメージを使ってインストール
    • コミットされた composer.phar を PHP コンテナ内で使う
    • Composer コンテナを使う
      • Docker で使う
      • Docker Compose で使う ← 今回はこれ
  • GitHub Actions で composer コマンドを使う

様々な実行方法があると思います。
ローカルで composer コマンドを使うには PHP もインストールしないといけません。
ローカルに環境を構築するのは大変です。チームメンバー全員の面倒なんて見たくありません。
そこで Docker コンテナの出番です。
よく見かけるのは PHP コンテナに Composer をインストールする方法です。
ですが Composer を使うのはライブラリのインストール(復元)時だけです。
稼働中の PHP コンテナに果たして必要なものでしょうか?
そこで今回は独立した Composer コンテナでコマンドを実行する方法を紹介します。

Composer コンテナ

composer - Docker Hub

docker コマンドで直接使用する方法は ComposerをDockerコンテナで動かす - Qiita を、
PHP コンテナにインストールする方法は Docker に Composer をインストールするベストプラクティス(と解説) - Qiita を参考にしてください。
この記事では独立した Composer コンテナを docker-compose コマンドで使用する方法を紹介します。
PHP コンテナは不要なので Composer だけ使いたい方にもおすすめです。

Docker Compose で定義する

docker-compose.yml
version: "3.8"

services:
  composer:
    image: composer
    command: "composer install"
    volumes:
      - ./:/app

./:/app: の前がローカルのディレクトリパス、後が composer コンテナ内のパスです。
ローカルは composer.json, composer.lock を作成したい場所、 composer コンテナは /app を指定します。

ライブラリのインストール (composer require)

docker-compose run composer composer require --dev phpunit/phpunit

composer が 2 つあるのは 1 つ目がコンテナ名(変更可)で 2 つ目がコマンド名です。

ライブラリの復元 (composer install)

docker-compose.yml に command: "composer install" を定義しておけば docker-compose up -d する際に自動的に composer install が実行されます。定義しなくても良いです。

もちろんコマンドでも実行できます。

docker-compose run composer composer install

ライブラリのバージョンアップ

composer.lock の更新。

docker-compose run composer composer update

その他のコマンド

他のコマンドも同様に docker-compose run composer から実行できます。
どんなコマンドがあるかは PHP開発でComposerを使わないなんてありえない!基礎編 - Qiita を参照してみてください。

サンプルコード

SnowCait/docker-compose-composer-example にサンプルコードを置いています。
Docker がインストールされていれば git clone して気軽に試せると思うので良かったら試してみてください。

参考にした記事

Docker環境でcomposerのimageつかってupdateしてみる - Qiita
補足:リンク先では command: "composer update" となっていますが起動する度にバージョンが変わるのはよろしくないので command: "composer install" にしておいた方がいいのではないかと思います。

余談

(Docker) Compose と Composer が似ていて間違えそう。

21
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?