composerは、phpのプロジェクトで使用されるパッケージを管理するコマンドです。昨今はcomposerなしではphpのプロジェクトは作成できないほど重要なものです。しかし、知らないことがたくさんあります。ということで「composerをもっと知ろう」シリーズです。composerに関するいろいろな面を紹介していきます。
composerがインストールしたパッケージ
まず、最新のLaravelのプロジェクトを作成してみましょう。
$ composer create-project laravel /laravel laravel-11x |
composer create-projejtに関しては違う機会に説明するとして、上のコマンド実行後に何のパッケージがインストールされたか見てみましょう。
$ composer show |
を実行すると、以下のように107ものパッケージのリストが、パッケージ名、バージョン、説明を列として表示されます。
brick /math 0.12.1 Arbitrary-precision arithmetic library carbonphp /carbon-doctrine-types 3.2.0 Types to use Carbon in Doctrine dflydev /dot-access-data 3.0.3 Given a deep data structure, access data by dot notation. doctrine /inflector 2.0.10 PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper /lowercase and singular /plural forms of words. doctrine /lexer 3.0.1 PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers. dragonmantank /cron-expression 3.4.0 CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due egulias /email-validator 4.0.2 A library for validating emails against several RFCs fakerphp /faker 1.24.0 Faker is a PHP library that generates fake data for you. filp /whoops 2.16.0 php error handling for cool kids fruitcake /php-cors 1.3.0 Cross-origin resource sharing library for the Symfony HttpFoundation graham-campbell /result-type 1.1.3 An Implementation Of The Result Type guzzlehttp /guzzle 7.9.2 Guzzle is a PHP HTTP client library guzzlehttp /promises 2.0.4 Guzzle promises library guzzlehttp /psr7 2.7.0 PSR-7 message implementation that also provides common utility methods guzzlehttp /uri-template 1.0.3 A polyfill class for uri_template of PHP hamcrest /hamcrest-php 2.0.1 This is the PHP port of Hamcrest Matchers laravel /framework 11.31.0 The Laravel Framework. laravel /pail 1.2.1 Easily delve into your Laravel application's log files directly from the command line. laravel /pint 1.18.1 An opinionated code formatter for PHP. laravel /prompts 0.3.2 Add beautiful and user-friendly forms to your command -line applications. laravel /sail 1.38.0 Docker files for running a basic Laravel application. laravel /serializable-closure 1.3.6 Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP. laravel /tinker 2.10.0 Powerful REPL for the Laravel framework. league /commonmark 2.5.3 Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM) .. 続く |
まだ開発を始めていなのにすでにこれだけのパッケージがインストールされます。上のリストを見ていて気付くのは、もちろんのことですが、Laravel自体もパッケージなのです。上のリストにあるlaravel/frameworkがそうです。他のもlaravelのレポからは6つのパッケージがインストールされます。私が大好きなlaravel/tinkerも含まれます。
composer.jsonの中身を見ればわかりますが、そこでは上のすべてのパッケージを指定はしていません。以下を実行すると指定したパッケージがリストされます。
$ composer show --self |
上で、requiresの下にリストされているのが、ライブ環境で必要なパッケージです。phpはすでにインストールされているのでたったの2つです。
requires (dev)は、開発環境において必要なパッケージです。こちらもたったの7つです。
さて、どうしてcomposer showでは107ものパッケージがリストされるのでしょうか?
それは、requiresあるいはrequires (dev)でリストされているそれぞのパッケージがまた違うパッケージを必要とするからです。さらにそのパッケージもまた他のを…と。
例えば、私が好きなtinkerのパッケージを見てみましょう。
$ composer show --tree "laravel/tinker" |
ツリー構造はtinkerのパッケージが依存するパッケージを表示します。
パッケージだけでなく、phpのバージョンやphpもモジュール(ext-json *など)の依存もあります。
composerはこれらを全部チェックして、すべてのをまとめて必要なパッケージをインストールします。それぞれパッケージは違うバージョンを指定することもあるので、バージョンの整合性もチェックする必要あります。非常に大変に複雑な作業です。composerの偉大さが理解できますね。
インストールされているパッケージは最新?
インストールしたパッケージたちは時間が経つと、バグの修正や新規のの追加など行われ、インストール時のバージョンと変わってきます。
以下のコマンドは、最新のパッケージの情報を取得してきて見せてくれます。それゆえにコマンド実行には時間がかかります。
$ composer show --latest |
それぞれの列は、パッケージ名、インストールされているバージョン、最新のバージョン、そして説明となります。
最新のパージョンに列において緑字は「最新」であり更新の必要はないということで、赤字は更新を「推薦」という意味です。
黄色時は「メジャー」のバージョン更新がリリースされていることを示します。以下は違うプロジェクトからですが、前バージョンのLaravel 10xを使用しており、ご覧のようにLaravel 11xのメジャーリリースがあることを示しています。
先のプロジェクトに戻って、全部ではなく更新を推薦するパッケージのみを見たいなら以下を実行してください。–no-devのオプションは開発のパッケージを表示しません。
$ composer show --outdated --no-dev |