Composerとは
PHP向けのソフトウェアパッケージ・ライブラリの依存関係を管理する、パッケージ管理システム
そもそもパッケージて何
システム開発を行う際に、便利な仕組みや関数をまとめたもの
標準のphpのみでの開発は難しいので、大体パッケージを利用しているのが常
もしパッケージがなければ、ここに書かれている内容を全て開発者自身がコードを書かなければいけないので、
私たちは常にパッケージの恩赦を受けながら開発している(と思う)
Composerはこのようなパッケージを管理するためのツール
Composerのメリットて何
・使用しているパッケージをファイルで管理できる
「パッケージ管理」なので、上記で説明したパッケージをファイルで管理できる
パッケージを取得したあとに、パッケージにバグや脆弱性が発覚し作成者がパッケージを更新することがある
手動でダウンロードしてきたパッケージだと、定期的にアップデート情報を確認して、
再ダウンロードするという作業が必要になるが、Composerで取得したものであるなら、updateコマンドを実行するだけで、
使用しているすべてのパッケージの更新を確認し、更新がある場合は再取得してソースコードを最新の状態に保ってくれる
また、プロジェクトに必要なパッケージと参照しているURLがファイルがcomposer.lockというファイルに記録されるので、
このファイルをGit管理などして、チーム内で共有すれば、
ローカルの環境をチーム内で統一しやすくなるという利点もある
・パッケージの依存関係を解消してくれる
そもそも依存管理システムとは、
そのPHPプロジェクトで必要なパッケージは何かを列挙すると、それらを自動的にインストールしてくれるものである
例えば、Aというパッケージが必要なとき、Bというライブラリが必要だという事例が多々存在する。
手作業でそれらのライブラリを収集する場合は、特に手間と時間がかかる。
Composerでは利用するパッケージとしてAを記述すれば、自動的にBも含めてインストールしてくれるという感じ
・オートローダーが存在する
→オートロードとは
文字通り自動でロードする仕組み
PHPではrequire_once
などの記述によって、使用したいファイルを明示的にする必要があるが、
これを自動的に読み込んでくれる仕組み
Composerでは、PHPのオートローダーが内蔵されており、Composerで取得したファイルだけでなく、
パッケージ管理外のファイルも対象に含んでくれる
このオートロード機能だけを使用するといったことも可能
Composerにおいての重要なファイル
composer.json
Composerの設定を記述する為のファイル
Composerをインストールして、composer install
したら、このcomposer.jsonを基に、パッケージなどを
venderディレクトリ配下にまとめてインストールする
{
"name": "laravel/laravel",
"type": "project",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"require": {
"php": "^7.4|^8.0",
"aws/aws-sdk-php-laravel": "~3.0",
"doctrine/inflector": "^1.4",
"fruitcake/laravel-cors": "^2.0",
"guzzlehttp/guzzle": "^7.0.1",
"laravel-doctrine/migrations": "^2.3",
"laravel-doctrine/orm": "^1.7",
...
composer.lock
composer install
したときに生成されるのがこのファイル。
composer insatall
時に参照されたパッケージのバージョン情報や、URLが記載される。
"packages": [
{
"name": "asm89/stack-cors",
"version": "v2.0.3",
"source": {
"type": "git",
"url": "https://github.com/asm89/stack-cors.git",
"reference": "9cb795bf30988e8c96dd3c40623c48a877bc6714"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/asm89/stack-cors/zipball/9cb795bf30988e8c96dd3c40623c48a877bc6714",
"reference": "9cb795bf30988e8c96dd3c40623c48a877bc6714",
"shasum": ""
},
"require": {
"php": "^7.0|^8.0",
"symfony/http-foundation": "~2.7|~3.0|~4.0|~5.0",
"symfony/http-kernel": "~2.7|~3.0|~4.0|~5.0"
},
"require-dev": {
"phpunit/phpunit": "^6|^7|^8|^9",
"squizlabs/php_codesniffer": "^3.5"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0-dev"
}
},
2回目以降にcomposer install
した際は、このcomposer.lockが参照される
ディレクトリ内にcomposer.lockがある場合、composer install
しても、単にcomposer.lockを参照してライブラリをインストールするので、何かが書き換わることはない。(アップデートしたいときはcomposer update
)
なので、前述したように、このファイルをチーム内で共有し、ローカルに落としてcomposer install
するだけで、
チームでバージョン等を統一した状態で開発に必要なパッケージをインストールする事が可能
まとめると
コマンド | composer.lock | 動作 |
---|---|---|
composer install | あり | composer.lockを元にインストール |
composer install | なし | composer.jsonを元にインストール・composer.lock生成 |
composer update | あり | composer.jsonを元にアップデート・composer.lock更新 |
composer update | なし | composer.jsonを元にアップデート・composer.lock生成 |
インストール方法
windows
ComposerのダウンロードページからComposer-Setup.exe
をダウンロードし、ファイルを実行する
その際に、PHPのパスを指定する必要がある
また、コマンドラインで直接インストールすることも可能
XAMPPでインストールしたディレクトリにインストールする場合は、
cd c:\xampp\php
でPHPがインストールされている場所に移動し、
php -r "readfile('https://getcomposer.org/installer');" | php
で直接composerのファイルを配置
echo @php "%~dp0composer.phar" %*>composer.bat
でバッチファイル(複数のコマンド列をあらかじめ記述してあるファイル、ここではComposerの機能を実現させる為のコマンド列)を作成することでインストールが完了する
cd c:\xampp\php
> php -r "readfile('https://getcomposer.org/installer');" | php
> echo @php "%~dp0composer.phar" %*>composer.bat
Linux/Mac
コンソール上でインストールすることが可能
curl -sS https://getcomposer.org/installer | php
でComposer本体をダウンロード
sudo -s mv composer.phar /usr/local/bin/composer
でcomposerコマンドを使用することができるように、ダウンロードしたファイルを/user/local/binなどのサーチパス(コマンドを実行する際に参照するディレクトリ)が通った場所に配置する
$ curl -sS https://getcomposer.org/installer | php
#!/usr/bin/env php
All settings correct for using Composer
Downloading...
Composer successfully installed to: /Users/phpuser/tmp/composer.phar
Use it: php composer.phar
$ sudo -s mv composer.phar /usr/local/bin/composer
まとめ
Composerってありがたい
(何か間違えあれば指摘お願い致します)