PHPのComposerを使うメリットをまとめてみた

#Composerとは
PHPのプロジェクトで必要となったライブラリやパッケージなどを管理する「ライブラリ依存管理ツール」です。

>【具体例】例えば、Schoolという名前のライブラリがあったとします。
Schoolライブラリを使うにはstudentとteacherという名前のライブラリをインストールしなければ使えません。さらに、teacherライブラリはMathTeacher,EnglishTeacher,JapaneseTeacherというライブラリをインストールしなければなりません。

つまり本来使いたいライブラリであるSchoolをインストールするために、他にもたくさんのライブラリをインストールしなければならず、それを把握しイチからインストールしていくのは非常に大変です。

そこでComposerというツールを使うことで、Schoolライブラリをインストールすると自動的にstudent,teacherなどの必要なライブラリも一緒にインストールできるようになります。

#Composerの特徴

###vendor（ベンダー）ディレクトリでライブラリ群を参照
Composerでインストールしたライブラリはすべて`vendor`という名前のディレクトリ（フォルダ）の中に格納されます。

###composer.lockファイルの生成
`composer install`した際に、どのバージョンのライブラリをインストールしたか等が`composer.lock`ファイルとして自動生成されます。
チーム開発で`composer.lock`を基準にすることで、メンバー間で同じバージョンのライブラリを使うことができるようになります。

###autoload（オートロード）の設定
オートロードとは「自動で読み取る」という意味になります。
PHPのautoloadではファイル内に別のファイルを読み込ませることができるようになります。

別ファイルを複数読み込ませたい場合、autloadファイルだけを読み込めば自動で複数のファイルを読み込んでくれるので大変便利です。

```php
//autoloadの呼び出し
require_once 'autoload.php';
````


####autoloadの記述方法
autoloadの機能は`composer.json`に記述することで使用することができます。
composer.jsonにautoloadを記述して、 `composer install`とすることで`autoload.php`が自動生成されます。

```composer.json
"autoload": {
        "psr-4": {
            "App\\" : "app/"
        }
```
`App\\`は名前空間、`app/`は実際のディレクトリ名を表し、
`App\\`というキーを`app/`に持たせています。

`psr-4`というのは、PHPのコーディング規約としてPSR(PHP Standards Recommendations)が設定されておりその中の１つです。`psr-4`はオートローダーの記述についてのきまりです。

>PSR一覧
PSR-1　Basic Coding Standard（基本的なコーディング標準）
PSR-2　Coding Style Guide（コーディングスタイルガイド）
PSR-3　Logger Interface（ロガーインタフェース）
PSR-4　Autoloader（オートローダー）
PSR-6　Caching Interface（キャッシングインターフェイス）
PSR-7　HTTP Message Interface（HTTPメッセージインターフェイス）
PSR-11　Container Interface（コンテナインタフェース）
PSR-13　Hypermedia Links（ハイパーメディアリンク）
PSR-15　HTTP Handlers（HTTPハンドラ）
PSR-16　Simple Cache（シンプル・キャッシュ）
PSR-17 HTTP Factories(HTTPファクトリー)

#composer.jsonの作成
手動でファイルを作るか、プロジェクトのディレクトリで`composer init`というコマンドを実行することで`composer.json`を作成することができます。
もしファイルの中身を変更した場合は`compsoer update`をする必要があります。

###composer.jsonとcomposer.lockの違い
composer.jsonとcomposer.lockもどちらもライブラリやパッケージを管理するファイルですが、少し役割が異なります。

【インストールする場合】
最初にComposerをインスストールする場合、composer.jsonに書かれた情報をもとにパッケージやライブラリをインストールします。
このときにcomposer.lockが同時に生成され、インストール時に参照したパッケージ情報やバージョンが書き込まれます。
そして２回目以降`composer install`した場合は、composer.lockに書かれたバージョンのパッケージやライブラリがインストールされます。

【アップデートする場合】
パッケージやライブラリなどの追加などはcompsoer.jsonに記述します。記述しただけでは反映されないので`composer update`を使って更新する必要があります。
アップデートをするとcomposer.jsonの情報に基づいてパッケージやライブラリが最新の状態になります。
そしてこのバージョン等の変更はcomposer.lockにも書き込まれて更新されます。

 <font color="red">ただし`composer update`を実行すると、すべてのパッケージのバージョンが上がってしまいます。
バージョン更新や追加の際は`composer update パッケージ名`や`composer require パッケージ名`として更新したいパッケージのみ指定してを更新することが多いです。
<font>

#Composerでライブラリをインストールする手順
1. compsoer.jsonにインストールしたいライブラリを記述する
2. `composer install`コマンドを実行する
3. vendorディレクトリとcomposer.lockファイルにインストールしたライブラリが保存されている

```composer.json
"require": {
        "nesbot/carbon": "^2.50"
    }
```

#参考

[PHP開発でComposerを使わないなんてありえない！基礎編](https://qiita.com/niisan-tokyo/items/8cccec88d45f38171c94)
[PHPのライブラリ管理ツール「Composer」入門](https://weblabo.oscasierra.net/php-composer-1/)
[composer.json、composer.lockって何なの？という人向けのまとめ](https://qiita.com/masarufuruya/items/23131a465b7e9c8f3060#composerlock%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
[composer.jsonとcomposer.lockの役割について分かりやすくまとめてみた](https://www.engilaboo.com/about-composer/)