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ってありがたい
(何か間違えあれば指摘お願い致します)