Composerの導入＆使い方（初心者の復習用）

一度Composerを使ったけど使い方忘れてしまったという人向けに書いています

# インストール
## Linux
下記リンクを参考
[Qiita - CentOS7にComposerをインストールする](https://qiita.com/inakadegaebal/items/d370bcb1627fce2b5cd1)

## Windows
[公式サイト](https://getcomposer.org/)からインストーラーをダウンロードしてインストール。
途中で聞かれるPHP実行ファイルのパスはphp.exeのパスを指定。
（例）XAMPPだと`C:\xampp\php\php.exe`

# Composer自体のアップデート

## Linux

## Windows
インストーラーでもう一度インスト―ルすればよい（自分の場合は上書きインストールで問題なかった）

# 使い方
## 一番最初
プロジェクトのルートディレクトリに「composer.json」ファイルを作成して下記のようにインストールしたいパッケージをJSON形式で書く。


```composer.json
{
  "require": {
    "zendframework/zend-cache": "2.*"
  },
  "require-dev": {
    "phpunit/phpunit": "6.*",
    "apigen/apigen": "*"
  }
}
```

ターミナル（Windowsだとコマンドプロンプト）でプロジェクトのディレクトリに移動。
下記コマンドを実行したらパッケージがインストールされる。

```
composer install
```

インストール後は下記のようなディレクトリ構造になる。

```
(プロジェクトルート)/
  ├ composer.json
  ├ composer.lock  
  └ vendor/
```

- composer.json
インストールするパッケージ一覧
- composer.lock
インストールしたいパッケージに必要な関連パッケージを含めた一覧（composer.jsonと同じ記述形式）
- vendor
インストールしたパッケージのソース本体

## パッケージの追加／パッケージの削除／パッケージの最新版へのアップデート
- パッケージを追加の場合はcomposer.jsonに追加したいパッケージを追記して下記コマンドを実行。
- パッケージを削除の場合はcomposer.jsonに削除したいパッケージを消して下記コマンドを実行。
- 単純にインストール済みのパッケージのアップデートの場合は下記コマンド実行のみ。

```
composer update
```

## 他の環境でのインストール
例えばローカル環境でインストールしたパッケージをサーバー上でセットアップする場合。
下記コマンドを実行する。

```
composer update
```


#composer.json ファイルの解説

## JSONの各要素の解説
- "require": { 導入したいパッケージの設定、JSON }
- "require-dev": {開発環境のみで使われる導入したいパッケージの設定、JSON }
`composer install`や`composer update`のときに `--nodev` オプションを付けるとインストールされない
- {パッケージの設定、JSON}
{"(開発者名)/(パッケージ名)": "(バージョン指定)"}

## パッケージのバージョン指定
下記表の「対象となるバージョーン」の「最新版」がインストールされる
### 直接指定
| 指定例       |      対象となるバージョン |
|:-----------------|:------------------:|
| 1.0.2            |      version =  1.0.2 |

### レンジ

| 指定例       |      対象となるバージョン |
|:-----------------|:------------------:|
| >=1.0            |1.0 <= version |
| >=1.0,<2.0         |1.0 <= version < 2.0 |
| >=1.0,<1.1 ｜｜ >=1.2    | 1.0 <= version < 1.1 もしくは 1.2 <= version |
- 「 」（スペース）「,」はAND
- 「||」はOR（※注意、上記表の「|」は全角で書いてます、半角で書いたらエスケープしても表の区切り文字として認識された・・・orz）

### ワイルドカード
| 指定例       |     対象となるバージョン |
|:-----------------|:------------------:|
| *            |全て|
| 2.*            |2.0.0 <= version  < 3.0.0|
| 2.1.*            |2.1.0 <= version  < 2.2.0|

### チルダ
| 指定例       |     対象となるバージョン |
|:-----------------|:------------------:|
| ~2.1             |2.1.0 <= version  < 3.0.0|
| ~2.2.3           |2.2.3 <= version  < 2.3.0|

### キャレット
| 指定例       |     対象となるバージョン |
|:-----------------|:------------------:|
|  ^1.3.2          |1.3.2 <= version  < 2.0.0|
|  ^2.0.2          |2.0.2 <= version  < 3.0.0|
|  ^0.3.2          |0.3.2 <= version  < 0.4.0 *|
*「0.x.x」というメジャーバージョンが0のときだけ例外、ちなみに「^1.3」という指定はないっぽい

## バージョンの表記
基本的に下記のようにバージョンナンバーを付けるのが一般的である

```
(メジャーバージョン).(マイナーバージョン).(パッチ)
```

##参考
- [COMPOSER公式 - composer.jsonの説明](https://getcomposer.org/doc/articles/versions.md)
- [QUARTETCOM TECH BLOG - [初心者向け] composerのバージョン指定方法](http://tech.quartetcom.co.jp/2015/01/19/composer-practices/)
- [A Day in Serenity (Reloaded) - Composerのバージョン指定方法でのチルダ（~）とキャレット（^）の違い](http://blog.a-way-out.net/blog/2015/06/19/composer-version-tilde-and-caret/)
- [composer.json - Composer ドキュメント日本語訳](https://kohkimakimoto.github.io/getcomposer.org_doc_jp/doc/01-basic-usage.html)

# コマンド
よく使うコマンドをメモ

## composer install
最初にインストールするとき、依存関係を解決済みでその指定バージョンをインストールしたいとき使用

```
composer install
```
「composer.lock」がある場合「composer.lock」からそのままパッケージをインストール
「composer.lock」がない場合は「composer.json」から依存関係を解決してインストール

###オプション
- `--no-dev`
「"require-dev"」はインストールしない

## composer update
パッケージをアップデートするとき、パッケージを追加・削除したいときに使用

```
composer update
```

「composer.json」から依存関係を解決してパッケージをインストール

###オプション
- `--no-dev`
「"require-dev"」はインストールしない


## composer require
コマンドでパッケージを直接追加したいときに使用

```
composer require (パッケージ名)
```
指定パッケージを「composer.json」に追記してインストールする
### オプション
- `--dev`
「"require-dev"」の開発用の方にパッケージを追記する

## その他コマンドの使い方は
下記のコマンド（「composer --help」ではなく単に「composer」だけ）を入力したらコマンド一覧が出て来る（英語）

```
composer
```

それか下記公式サイト

## 参考
- [公式 - Command-line interface / Commands](https://getcomposer.org/doc/03-cli.md)
- [Qiita - composer.json、composer.lockって何なの？という人向けのまとめ](https://qiita.com/masarufuruya/items/23131a465b7e9c8f3060)




# Composerのインストール遅いねん
というときは

## ウイルス対策ソフトを一時的にOFFにする
自分はこれが原因で激遅でした orz
ウイルス対策ソフトの何が原因で遅くなったかは原因不明ですが・・・

## packagistのミラーサーバを日本国内のサーバに変更する
下記コマンドを実行

```ミラーサーバをpackagist.jpに変更
composer config -g repos.packagist composer https://packagist.jp
```

- `composer config [setting-key] [setting-value1] ... [setting-valueN]`
コンポーザーに設定を追加
- `-g `
グローバル環境に設定を追加。`$COMPOSER_HOME/config.json`ファイルに追加

## 参考
- [Qiita - Composerの実行速度を高速化する方法](https://qiita.com/keita-nishimoto/items/37f0fac49442b72c403e)

# Git使っている場合は
「.gitignore」に下記を追加するとコンポーザーでインストールしたパッケージはバージョン管理対象外になる。
よく使われている手法らしい。

```gitignore
vendor
```

# 全体を通しての参考
- [COMPOSER ・・・公式サイト](https://getcomposer.org/)
- [packagist ・・・パッケージのリポジトリ](https://packagist.org/)
- [独習PHP 第3版 ・・・お勧め書籍](https://www.amazon.co.jp/%E7%8B%AC%E7%BF%92PHP-%E7%AC%AC3%E7%89%88-%E5%B1%B1%E7%94%B0-%E7%A5%A5%E5%AF%9B/dp/479813547X/ref=tmm_pap_swatch_0?_encoding=UTF8&qid=&sr=)