インストール - Composer
概要
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();