shinke1987.net
雑多な備忘録等のはず。
他のカテゴリ・タブ
目次
PR

Composer Tips

2023-05-23 2023-05-23
カテゴリ: PHP

概要

PHPでの拡張ライブラリ(パッケージ)のための、パッケージ管理ツール。

メリット

  1. 依存性を自動で解決しながら、インストール・アンインストールがコマンドで実行できる。
    アプリで利用するパッケージをあらかじめ定義ファイルとして準備しておくことで、
    複数の環境で同一の環境を準備したい場合にも重宝する。
  2. アプリ単位でパッケージを管理する。
    以前普及していたパッケージ管理ツールにPEARがある。
    PEARは全てのパッケージをプラットフォーム共通で管理していたので、
    同じパッケージの異なるバージョンを同居させるのが困難というデメリットがあった。
    Composerはアプリ単位でパッケージ管理をするので、
    例えばアプリAではZライブラリの1.0を利用、アプリBではZライブラリの1.5を利用、といった環境を作りやすい。
    また、アプリコードとライブラリ(パッケージ)を1つのフォルダの中でまとめて管理できる。
  3. ライブラリの自動ローディング機能を利用できる。
    クラスライブラリをいちいち個別にインポートしなくても、必要に応じて自動で有効化できる。
  4. 対応するライブラリが豊富。
    Composerで提供されているパッケージは次のWebサイトから確認できる。
    Packagist

補足

ライブラリはC言語とPHPのどちらかで記述されていることが多い。
C言語で書かれたライブラリは動作が高速だが、
自分でライブラリを作成したり、既存ライブラリを読み込む場合にハードルが高いという難点がある。
近年はPHPのパフォーマンスが向上しているので、拡張ライブラリの大部分はPHPで書かれている。
C言語で書かれたライブラリとしては、古くから提供されているPECLが有名。

バージョン番号

セマンティックバージョニングと呼ばれる次の書式のルールで、
バージョン番号を管理することが推奨されている。

書式:メジャーバージョン.マイナーバージョン.バッチ番号(例:7.3.0)

バッチ番号:バグフィックスなどの微少な変更で、機能の追加は無し。

マイナーバージョンアップ:機能追加を伴うが、互換性は維持される。

メジャーバージョンアップ:互換性が維持されない可能性のある変更がある。

※ ただし、全てのライブラリがセマンティックバージョニングに従っているわけでは無い。

Tips

Composer を利用してライブラリをインストール

※アプリルートで実行する必要がある。

> composer require ライブラリ名 バージョン表記
利用例
意味
~1.2.01.2.0以上、1.3.0未満
^1.2.01.2.0以上、2.0.0未満
1.2.*1.2.0以上、1.3.0未満
*現在の最新バージョン

composer.json

composer.jsonはパッケージ定義ファイルとも呼ばれる。
現在のアプリで利用するライブラリ(パッケージ)の情報が記録されている。
composer require コマンドを実行すると、アプリルートに自動で生成されている。

composer require guzzlehttp/guzzle * を実行した後のcomposer.jsonの内容例

{
    "require": {
        "guzzlehttp/guzzle": "*"
    }
}

composer.json を編集してライブラリ削除

composer.json の削除対象ライブラリの部分を削除して、次のコマンドを実行する。
※ update コマンドはcomposer.lock ではなく composer.json の記述を優先する。

> composer update

異なる環境にcomposerを利用して必要なライブラリをインストール

元となる composer.json をアプリルートに配置して、次のコマンドを実行する。
※ composer.lock があるならその情報に基づいて、無ければcomposer.json に基づいてライブラリをインストールする。
※ インストールするライブラリのバージョンを完璧に再現したい場合は、composer.json と composer.lock の2つをアプリルートに配置して、次のコマンドを実行すると良い。

> composer install

composer.lock

composer.json と同様にバージョン番号等が記録されているが、
composer.lock はバージョン番号が厳密に記載されている。

開発者が直接編集することはほぼ無い。

例えば、
composer.json では “*” と記載されていても、
composer.lock では実際にインストールされた “7.7.0”が記載される。

composer.lockの有無でcomposer install / update のコマンドも結果が変わることがある。

主なサブコマンド

コマンド
概要
composer require –dev パッケージ名指定されたライブラリ(パッケージ名)を開発専用としてインストール。–dev オプションは開発時にだけ利用する(実行には必要無い)ライブラリをインストールするために利用する。–dev オプション付きでインストールされたライブラリは、composer.jsonでもrequireキー配下ではなく、require-devキー配下で管理される。別環境にインストールする時に、開発向けライブラリだけ除外する時に便利。
composer install –no-dev開発向けライブラリだけを除外してcomposer.json等に基づいてライブラリをインストール。
composer self-updateComposer 自身を更新。
composer validatecomposer.json に誤りが無いかを検証する。
composer search name指定された名前(name)にマッチするライブラリの情報を取得。
composer show -iインストール済みライブラリの情報を表示。
composer show -pプラットフォームパッケージ(PHP拡張)の情報を表示。
composer show パッケージ名指定されたライブラリ(パッケージ名)の情報を表示。
同一カテゴリの記事