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




