新規のLaravelのプロジェクトを作成するときや、ライブラリを追加するときに使用するcomposerのコマンド。Laravelの陰で一見地味な存在に見えます。しかし、このおかげでphp言語のライブラリのインフラが整備され、アプリのモダンな開発の基盤を提供しているなくてはならないコマンドです。今回はこのコマンドに注目してみます。
composerのインストール
1回実行すれば何もしないのですっかり忘れていたけれど、以下が正しいインストール方法。これによると。
$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" $ php -r "if (hash_file('SHA384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" $ php composer-setup.php $ php -r "unlink('composer-setup.php');"
上を実行すると、composer.pharのファイルが作成されます。開発環境なら、自分のホームのbinのディレクトリに、グローバルで使用したいなら、ルート権限で以下のように適切なディレクトリへ移します。
$ mv composer.phar /usr/local/bin/composer
composer.pharの作成時には、ホームディレクトリに、.composerのディレクトリ(あるいは、.config/composer)が作成されます。
.composer ├── cache ├── keys.dev.pub └── keys.tags.pub
今はほとんど空ですが、将来はすでにインストールしたパッケージのキャッシュやlaravelなどのコマンドの保存場所となります。
Laravelのパッケージのインストール
composerのコマンドが使えるようになったところで、laravelのパッケージをインストールします。
$ composer global require "laravel/installer"
globalのオプションは、ホームディレクトリの.composerのディレクトリにファイルをインストールすることを指定します。インストール後は、.composerのディレクトリは以下のような感じになります。
.composer ├── cache │ ├── files │ │ ├── guzzlehttp │ │ ├── laravel │ │ ├── psr │ │ └── symfony │ └── repo │ └── https---repo.packagist.org ├── composer.json ├── composer.lock ├── keys.dev.pub ├── keys.tags.pub └── vendor ├── autoload.php ├── bin │ └── laravel -> ../laravel/installer/laravel ├── composer ├── guzzlehttp ├── laravel │ └── installer ├── psr └── symfony
vendor/bin/laravelのコマンドに気づいたと思いますが、Laravelのプロジェクトの作成に使われるコマンドです。簡単に実行できるように、.bashrcなどのファイルにおいて、$PATHに、$HOME/.composer/vendor/binを追加しておいてください。
Laravelのプロジェクトの作成
ここまで来ると、プロジェクトの作成は簡単です。インストールしたいディレクトリへ行き以下を実行します。
$ laravel new new-project
注意が必要なのは、上のコマンドの実行では最新のLaravelのバージョン(今なら、5.7)がインストールされることです。
バージョンを指定したいなら、composerコマンドの登場です。
$ composer create-project --prefer-dist laravel/laravel new-project "5.5.*"
composerのオプション
新規のLaravelのプロジェクトを作成したところで、いったい何のパッケージがインストールされたのでしょう?
ホームディレクトリの.composerと同様に、vendorのディレクトリを見るとパッケージに対応していろいろなディレクトリが作成されています。
パッケージの情報をより見たいなら、
composer show
の実行です。
$ composer show beyondcode/laravel-dump-server 1.2.1 Symfony Var-Dump Server for Laravel dnoegel/php-xdg-base-dir 0.1 implementation of xdg base directory specification for php doctrine/inflector v1.3.0 Common String Manipulations with regard to casing and singular/plural rules. doctrine/instantiator 1.1.0 A small, lightweight utility to instantiate objects in PHP without invoking their constructors doctrine/lexer v1.0.1 Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers. dragonmantank/cron-expression v2.2.0 CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due egulias/email-validator 2.1.5 A library for validating emails against several RFCs erusev/parsedown 1.7.1 Parser for Markdown. fideloper/proxy 4.0.0 Set trusted proxies for Laravel filp/whoops 2.2.1 php error handling for cool kids fzaninotto/faker v1.8.0 Faker is a PHP library that generates fake data for you. hamcrest/hamcrest-php v2.0.0 This is the PHP port of Hamcrest Matchers jakub-onderka/php-console-color 0.1 jakub-onderka/php-console-highlighter v0.3.2 laravel/framework v5.7.3 The Laravel Framework. laravel/tinker v1.0.7 Powerful REPL for the Laravel framework. ...
他のパッケージをインストールしたいなら、例えば、スプレッドシートのライブラリをインストールしたいなら、
composer require "phpoffice/phpspreadsheet"
を実行します。
composer.jsonのファイルも更新されて、"phpoffice/phpspreadsheet": "^1.4"
の行が追加されます。
{ "name": "laravel/laravel", "description": "The Laravel Framework.", "keywords": ["framework", "laravel"], "license": "MIT", "type": "project", "require": { "php": "^7.1.3", "fideloper/proxy": "^4.0", "laravel/framework": "5.7.*", "laravel/tinker": "^1.0", "phpoffice/phpspreadsheet": "^1.4" }, ...
開発のみに使用するパッケージは、
composer require barryvdh/laravel-debugbar --dev
と、–devオプションをつけて実行します。実行後は、composer.jsonのrequire-devセクションも以下のように更新されています。
... "require-dev": { "barryvdh/laravel-debugbar": "^3.2", "beyondcode/laravel-dump-server": "^1.0", "filp/whoops": "^2.0", "fzaninotto/faker": "^1.4", "mockery/mockery": "^1.0", "nunomaduro/collision": "^2.0", "phpunit/phpunit": "^7.0" }, ...
手動でこのファイルを編集してパッケージを追加したときには、
composer update
を実行します。他のパッケージの更新やパッケージ間の依存のチェックもあり、時間がかかります。
上記のコマンドの実行で、composer.jsonが編集されることを見てきましたが、composer.lockというファイルも更新されます。このファイルは、プロジェクトのデプロイにおいて重要です。開発環境でテストされたプログラムと同じパッケージの同じパージョンを、本環境にプログラムをデプロイする必要あります。それには、
composer install
を本サイトで実行します。このコマンドは、composer.lockのデータに従って開発環境と同じパッケージの同じバージョンのファイルをインストールしてくれます。
さらに、
composer install --no-dev
と、–no-devオプションを付ければ、開発だけに必要なパッケージは一切インストールはしません。
composer.jsonとcomposer.lockはそれゆえに、gitなどで必ずバージョン管理する必要があります。
メルマガ購読の申し込みはこちらから。