インストール - Composer

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動

概要

Composerは、PHP向けの依存関係管理ツールとして広く使われているツールである。
主に、PHPのライブラリやパッケージを効率的に管理することができる。

プロジェクトで必要なパッケージの依存関係をcomposer.jsonファイルに記述する。
このファイルには、プロジェクトが必要とするパッケージとそのバージョンが定義される。

 {
    "require": {
       "monolog/monolog": "^2.0",
       "symfony/http-foundation": "^5.4"
    }
 }


パッケージをインストールする場合は、composer installコマンドを実行するだけで、Composerは自動的に必要なパッケージをダウンロードして、vendorディレクトリに配置する。
また、依存関係の解決も自動的に行われる。

重要な点として、オートローディング機能がある。
Composerは、PSR-4やPSR-0等の標準的なオートローディング規約に従い、クラスファイルを自動的に読み込む仕組みを提供する。
これにより、require文やinclude文を手動で記述する必要がない。

パッケージを更新する場合は、composer updateコマンドを使用することにより、既存のパッケージを最新バージョンに更新できる。
また、composer.lockファイルにより、チーム内で同じバージョンのパッケージを使用することが保証される。

パッケージの検索は、Packagistという公式リポジトリを通じて行うことができる。
ここには、数多くのオープンソースパッケージが登録されており、必要な機能を持つパッケージを見つけることができる。


また、プライベートリポジトリの設定も可能で、社内専用のパッケージを管理することもできる。
VCSリポジトリや、独自のパッケージリポジトリサーバを指定することができる。

セキュリティ面では、パッケージの脆弱性をチェックする機能も提供されている。
composer auditコマンドを使用することにより、インストールされているパッケージの既知の脆弱性を確認できる。

Composerの使用は現代のPHP開発では標準的な方法となっており、効率的な開発とコードの保守性向上に大きく貢献する。


Composerのインストール

以下に、Composerの公式Webサイトを示す。
https://getcomposer.org/download

Composerのインストーラをダウンロードする。

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"


インストーラのSHA-384を確認する。

php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') \
{ echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"


Composerをインストールする。
composer.pharファイルが生成される。

php composer-setup.php --install-dir=<Composerのインストールディレクトリ>


composer.pharファイルのシンボリックリンクを作成する。

ln -s composer.phar composer


.profileファイル等に、Composerのインストールディレクトリを環境変数PATHに追加する。

vi ~/.profile


~/.profileファイル

export PATH="/<Composerのインストールディレクトリ>:$PATH"


また、Composerをアンインストールする場合は、以下のコマンドを実行する。

php -r "unlink('composer-setup.php');"



composer.jsonの作成

プロジェクトのトップディレクトリ等にcomposer.jsonを作成する。

以下の例は、php-imap/php-imapライブラリに依存するプロジェクトである。

 {
    "require": {
       "php-imap/php-imap": "^3.0"
    }
 }


※注意
vendorディレクトリは、Git等のバージョン管理システムから除外するのが一般的である。
composer.jsonとcomposer.lockは必ずバージョン管理に含める必要がある。


依存パッケージのインストール

composer.jsonが存在するディレクトリ (プロジェクトのトップディレクトリ等) に移動して、依存パッケージをインストールする。

# 開発環境
composer install

# 本番環境
composer install --no-dev



オートローディング

autoload.php

autoload.phpは、クラスの自動読み込み (オートローディング) を設定するファイルである。
これは、必要なクラスファイルを自動的にrequire / includeするものである。

これにより、手動でrequire文やinclude文を記述する必要がない。

オートローディングのメリット

  • 可読性が上がる。 (require文が減る)
  • 名前空間の管理が容易になる。
  • 依存関係の管理が自動化される。
  • バージョン管理が容易になる。


オートローディングの仕組み

 // 従来の方法 (手動で読み込む)
 require_once 'PhpImap/Mailbox.php';
 require_once 'PhpImap/Exceptions/ConnectionException.php';
 require_once 'PhpImap/Exceptions/InvalidParameterException.php';
 
 // Composerを使用した方法 (自動で読み込まれる)
 require 'vendor/autoload.php';
 use PhpImap\Mailbox;
 use PhpImap\Exceptions\ConnectionException;


autoload.phpの生成

  • composer.jsonの設定例
 {
    "autoload": {
       "psr-4": {
          "<任意の名前空間名 1>\\": "src/",
          "<任意の名前空間名 2>\\": "lib/",
          "App\\": "app/",
          "Database\\Factories\\": "database/factories/",
          "Database\\Seeders\\": "database/seeders/",
          "Tests\\": "tests/"
       },
       "files": [
          "src/helpers.php"
       ],
       "classmap": [
          "legacy/classes"
       ]
    }
 }


  • autoloadセクション
    Composerのオートローディング設定を定義する部分である。
    クラスの自動読み込みルールを指定する。

  • psr-4
    PHP-FIGが定めたPSR-4オートローディング規約に従うことを示す。
    モダンなPHPの標準的な命名規則とファイル構造を定義する。
    名前空間とディレクトリ構造を1:1で対応させる方式。

    • PSR-4の命名規則
      ファイル名はクラス名と完全に一致する必要がある。
      ディレクトリ構造は、名前空間の構造と一致する必要がある。
      大文字小文字を厳密に区別される。

    • "<任意の名前空間名>\\"
      プロジェクトのルート名前空間を指定する。
      バックスラッシュを2つ記述するのは、JSONのエスケープルール上の要件である。
      実際のPHPコードでは、<任意の名前空間名\ 例: YourNamespace\>として解釈される。

      名前空間は一般的に企業名やプロジェクト名が使用される。

  • "src/"
    指定した名前空間に対応するディレクトリパスを記述する。
    これは、プロジェクトのルートディレクトリからの相対パスである。

  • files
    常に読み込むファイルを指定する。

  • classmap
    PSR-4に従わない古いコードのための設定する。


オートローダーを生成および更新する。
また、composer.jsonを変更した場合は、必ず、composer dump-autoloadコマンドの実行が必要となる。

# 開発環境
composer dump-autoload

# 本番環境では最適化のため composer dump-autoload -o を使用する
composer dump-autoload -o


autoload.phpの使用例

# プロジェクト構造例
my-project/
├── composer.json
├── src/
│   ├── Controller/
│   │   └── UserController.php
│   ├── Model/
│   │   └── User.php
│   └── Service/
│       └── UserService.php
└── vendor/


 // src/Controller/UserController.php
 
 namespace YourNamespace\Controller;
 
 class UserController
 {
    // クラスの実装
 }


 // src/Model/User.php
 
 namespace YourNamespace\Model;
 
 class User
 {
    // クラスの実装
 }


 // src/Service/UserService.php
 
 namespace YourNamespace\Service;
 
 class UserService
 {
    // クラスの実装
 }


 // 使用例
 use YourNamespace\Controller\UserController;
 use YourNamespace\Model\User;
 use YourNamespace\Service\UserService;
 
 $controller = new UserController();
 $user       = new User();
 $service    = new UserService();