slim入門:composerをDockerコンテナに置き換える

スポンサーリンク
slim入門:composerをDockerコンテナに置き換える ノウハウ
slim入門:composerをDockerコンテナに置き換える
この記事は約9分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、PHP ComposerをDockerコンテナに置き換える方法についてご紹介します。

スポンサーリンク

前提

この記事は下記の記事をベースにしています。

背景

先日、slim用のローカル開発環境を構築した際に、PHPのComposerを利用していましたが、PHPをインストールしていなくても利用できるように、ComposerをDockerコンテナに切り替えた方法についてご紹介します。

修正内容

下記のファイルを修正します。修正内容は下記の各セクションにあります。

        modified:   Makefile
        modified:   app/compose.yml

Makefile

-       cd $(WOKR_DIR)/php-fpm/slim_app \
-       && composer install
+       cd $(WOKR_DIR) \
+       && docker compose run -it --rm composer-cmd install

app/compose.yml

25行目に追記します。

+  composer-cmd:
+    image: composer:2.5.8
+    volumes:
+      - ./php-fpm/slim_app:/app

動作確認

下記のコマンドを実行します。

rm -rf app/php-fpm/slim_app/vendor 
make composer_install
make up

ブラウザで「localhost:8080」にアクセスして、「Hello world!」が表示されていれば成功です。

解説

composerとは

Composerは、PHPの依存関係管理ツールであり、PHPプロジェクトで外部のライブラリやパッケージを簡単に管理するために使用されます。Composerを使用することで、他の開発者が作成したパッケージやフレームワークを自動的にダウンロードしてプロジェクトに組み込むことができます。

以下に、Composerの基本的な機能と使い方を説明します。

  1. composer.jsonファイル: Composerプロジェクトのルートディレクトリには、composer.jsonというファイルが存在します。このファイルには、プロジェクトの依存関係や設定情報が記述されます。例えば、必要なパッケージやそのバージョン、プロジェクトのオートローディングの設定などが含まれます。
  2. パッケージの追加: composer.jsonファイル内のrequireセクションに必要なパッケージの情報を追加します。例えば、以下のように記述します。
{
    "require": {
        "monolog/monolog": "^1.0"
    }
}

上記の例では、monolog/monologというパッケージを追加しています。

  1. 依存関係の解決: composer.jsonファイルを更新した後、コマンドラインでプロジェクトのルートディレクトリに移動し、以下のコマンドを実行します。
composer install

これにより、Composerは定義された依存関係を解決し、必要なパッケージをダウンロードしてvendorディレクトリに配置します。

  1. オートローディング: Composerは、オートローディング機能を提供しています。composer.jsonファイルのautoloadセクションを使用して、自動的にクラスファイルを読み込む設定を行うことができます。
{
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    }
}


上記の例では、srcディレクトリ内のクラスをApp名前空間に関連付けています。

これらはComposerの基本的な機能ですが、さらに高度な設定や機能も利用することができます。詳細な情報やComposerの使い方については、公式のComposerのドキュメントを参照してください。

composer.lockファイルについて

composer.lockファイルは、Composerによって生成されるファイルであり、プロジェクトの依存関係の正確なバージョン情報を含んでいます。このファイルは、パッケージのバージョンの一貫性を確保するために重要です。

以下に、composer.lockファイルの役割と使い方について説明します。

  1. 依存関係の固定化: composer.lockファイルは、プロジェクトに使用されるパッケージとそのバージョンの一覧を含んでいます。このファイルには、プロジェクトが依存するパッケージの特定のバージョンが記録されており、他の開発者が同じ環境で正確なパッケージのバージョンを再現できるようになっています。
  2. 再現性と安定性の確保: composer.lockファイルが存在する場合、Composerはこのファイルを優先して依存関係を解決します。つまり、composer installcomposer updateなどのコマンドを実行するときに、Composerはcomposer.lockファイルの内容に基づいて依存関係を解決します。これにより、パッケージのバージョンが自動的に更新されることを防ぎ、プロジェクトの再現性と安定性を確保します。
  3. バージョンの更新と同期: composer.lockファイルが存在しない場合、Composerはcomposer.jsonファイルに記述された依存関係を解決し、新しいバージョンのパッケージをダウンロードします。その後、composer.lockファイルが自動的に生成され、現在のパッケージのバージョン情報が含まれるようになります。このようにして、パッケージのバージョン情報を最新に保ちつつ、他の開発者との同期を取ることができます。
  4. バージョン固定とアップデート: composer.lockファイルが存在する場合、パッケージのバージョンは厳密に固定されます。新しいバージョンがリリースされた場合でも、composer updateを実行してもcomposer.lockファイルが更新されません。このため、意図しないバージョンアップが行われることを防ぎ、安定性を保つことができます。

composer.lockファイルは、バージョン管理システム(例えばGit)で共有されるべきです。これにより、チーム内の他の開発者が同じ環境で作業できるようになります。また、プロジェクトをデプロイする際にも、composer.lockファイルが含まれていることを確認し、正確なパッケージのバージョンをデプロイ先で使用することが重要です。

重要なのは、composer.lockファイルは手動で編集すべきではないということです。代わりに、composer.jsonファイルを更新し、依存関係の変更を反映させ、Composerにcomposer.lockファイルを再生成させるべきです。

app/compose.yml

composer-cmd:
    image: composer:2.5.8
    volumes:
      - ./php-fpm/slim_app:/app
  • composer-cmd: これはサービスの名前です。Docker Composeでは、コンテナやサービスに名前を付けることができます。この場合、composer-cmdという名前のサービスが定義されています。
  • image: composer:2.5.8: この行は、Dockerイメージの指定を行っています。composer:2.5.8というイメージを使用します。ここで指定されたイメージは、Docker HubからダウンロードされるComposerのバージョン2.5.8です。
  • volumes: - ./php-fpm/slim_app:/app: この行は、ボリュームのマウントを行っています。./php-fpm/slim_appというホスト側のディレクトリが、コンテナ内の/appディレクトリにマウントされます。これにより、ホスト側のディレクトリとコンテナ内のディレクトリとの間でファイルの共有やデータの永続化が可能になります。この場合、./php-fpm/slim_appディレクトリがComposerコンテナの/appディレクトリと関連付けられます。

上記の設定は、composer-cmdという名前のサービスを定義し、Composerのイメージを使用します。また、ホスト側のディレクトリとコンテナ内の/appディレクトリとをマウントします。これにより、ホスト側のディレクトリ内のファイルがComposerコンテナ内の/appディレクトリで利用できるようになります。この設定は、PHP-FPMとSlimアプリケーションを使用している環境で、Composerを使用して依存関係を解決するために使用される可能性があります。

Makefile

docker compose run -it --rm composer-cmd install
  • docker-compose: Docker Composeコマンドを実行するためのコマンドです。Docker Composeは、複数のDockerコンテナを定義し、管理するためのツールです。
  • run: Dockerコンテナ内でコマンドを実行するためのオプションです。
  • -it: インタラクティブモードでコマンドを実行するためのオプションです。これにより、ターミナルとの対話が可能になります。
  • --rm: コマンドの実行が終了した後にコンテナを自動的に削除するオプションです。一時的な作業用コンテナを使用する場合に便利です。
  • composer-cmd: Docker Composeファイルで定義されたコンテナのサービス名です。この場合、composer-cmdはComposerを実行するために定義されたサービス名です。
  • install: Composerコマンドの一部であり、プロジェクトの依存関係を解決し、必要なパッケージをインストールするために使用されます。

つまり、上記のコマンドは、Docker Composeを使用してcomposer-cmdという名前のサービスを起動し、そのサービス内でcomposer installコマンドを実行します。これにより、Composerがプロジェクトの依存関係を解決し、必要なパッケージをインストールします。実行終了後、コンテナは自動的に削除されます。

おわりに

今日は、PHP ComposerをDockerコンテナに置き換える方法についてご紹介しました。

自分のローカルマシンにアプリをインストールしなくても、Dockerさえインストールしておけば利用できるので、インストールの手間が省けていいですよね。また、他の人にも共有しやすくて便利だなたと思いました。

本記事でご紹介したソースは、下記のリポジトリにあります。

https://github.com/Gate-Yossi/Ran/releases/tag/v2023.07.13

よっしー
よっしー

何か質問や相談があれば、遠慮なくコメントしてください。また、エンジニア案件についても、いつでも相談にのっていますので、お気軽にお問い合わせください。

それでは、また明日お会いしましょう(^^)

コメント

タイトルとURLをコピーしました