CentOS7にComposerをインストールしよう

# はじめに
PHPにはComposerが必須だとのことなので、インストールすることにしました。

# 前提
過去記事のWindows10にVagrantをを入れてCentOS7をインストールしよう([1](https://qiita.com/erik_t/items/d7f7abbf7deafa4c6fe4)、[2](https://qiita.com/erik_t/items/909efb63fd389f486ec3)、[3](https://qiita.com/erik_t/items/2e3c43cfe8731621b82d)、[4](https://qiita.com/erik_t/items/8d006b599815c8fbf38b)、[5](https://qiita.com/erik_t/items/9fbe7b5630b1f62893a1)、[6](https://qiita.com/erik_t/items/11f24633f4248e4f33f0))、
ローカルでLAMP環境を構築しよう（[0](https://qiita.com/erik_t/items/9c7c49db061a250cbc32)、[1](https://qiita.com/erik_t/items/e36235896b327f5cb461)、[2](https://qiita.com/erik_t/items/8dc3f2a5e8e8c9376e27)、[3](https://qiita.com/erik_t/items/617503557020a4a6ba82)、[4](https://qiita.com/erik_t/items/a898d0f547bff6b3d8ff)）で構築した環境を前提とします。

# 使用ツール
- Tera Term

# Composerとは？
Composerとは、PHPのパッケージ管理システムのこと。
必要なパッケージをコマンド一つでインストールしてくれる便利アイテム。

# 方法は3種類
## 1. 公式インストール手順
Composer公式のCommand-line installationのコードを実行する方法です。

```
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
```
### 解説
各行でやっていることを簡単に説明します

カレントディレクトリにインストーラーをダウンロード。

```
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
```

インストーラーが`SHA-384`か確認。
たぶん最新版かどうかみたいな話のような気がするので、
この行はバージョンアップとかの際に変わるのかもしれませんね。

```
php -r "if (hash_file('sha384', 'composer-setup.php') === 'e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
```
インストーラーを実行。

```
php composer-setup.php
```
インストーラーを削除。

```
php -r "unlink('composer-setup.php');"
```
## 2. 簡易版
上記の[公式のインストール手順](https://qiita.com/erik_t/items/0b3492f38f6cd8605a4c#1-%E5%85%AC%E5%BC%8F%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%89%8B%E9%A0%86)と同内容を下記コマンドで実行することができます。
こっちのほうが簡単かも？

```
curl -sS https://getcomposer.org/installer | php
```

### 解説
①`curl`コマンド
HTTPアクセスをしてコンテンツを取得できるコマンド。
https://getcomposer.org/installer からインストーラーを取得しています。
②`-s`オプション
ダウンロードの進捗とエラーメッセージを表示しないためのオプションです。
③`-S`オプション
`-s`オプションと併用することで、エラーメッセージを表示することができます。
`-s`オプションのみの使用だと、エラーメッセージが表示されません。
④`|(パイプ)`
`|(パイプ)`とはコマンドの標準出力を次のコマンドに渡す処理のことです。
`curl`コマンドで取得したインストーラーをphpコマンドで実行する...ということになるでしょうか。

## 3. yumを用いたインストール手順
コメントで[@ABE_TAKASHI](https://qiita.com/ABE_TAKASHI)さんにアドバイスいただいた方法です。
`yum --enablerepo=remi install composer`を使用すると便利とのことで調べてみました。

そのまま実行すると、エラーが出てしまいました。

```
Error: Package: php-process-5.4.45-18.el7.remi.x86_64 (remi)
           Requires: php-common(x86-64) = 5.4.45-18.el7.remi
           Installed: php-common-7.1.33-8.el7.remi.x86_64 (@remi-php71)
               php-common(x86-64) = 7.1.33-8.el7.remi
           Available: php-common-5.4.16-48.el7.x86_64 (base)
               php-common(x86-64) = 5.4.16-48.el7
           Available: php-common-5.4.45-18.el7.remi.x86_64 (remi)
               php-common(x86-64) = 5.4.45-18.el7.remi
Error: Package: php-pecl-zip-1.18.2-1.el7.remi.5.4.x86_64 (remi)
           Requires: php(api) = 20100412-64
           Installed: php-common-7.1.33-8.el7.remi.x86_64 (@remi-php71)
               php(api) = 20160303-64
           Available: php-common-5.4.16-48.el7.x86_64 (base)
               php(api) = 20100412-64
           Available: php-common-5.4.45-18.el7.remi.x86_64 (remi)
               php(api) = 20100412-64
Error: Package: php-pecl-zip-1.18.2-1.el7.remi.5.4.x86_64 (remi)
           Requires: php(zend-abi) = 20100525-64
           Installed: php-common-7.1.33-8.el7.remi.x86_64 (@remi-php71)
               php(zend-abi) = 20160303-64
           Available: php-common-5.4.16-48.el7.x86_64 (base)
               php(zend-abi) = 20100525-64
           Available: php-common-5.4.45-18.el7.remi.x86_64 (remi)
               php(zend-abi) = 20100525-64
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest
```

調べてみると、上記ではphpのバージョンを指定していなかったこと、
php-pecl-zipがインストールされていないことで起こったエラーのようです。
以下のコマンドに修正して実行すると、無事インストールが完了しました。

```
sudo yum install --enablerepo=remi,remi-php71 php-pecl-zip composer
```

# Composerをどこからでも使えるようにしよう
Slimフレームワークの使い方を知りたくて[First Application Walkthrough](http://www.slimframework.com/docs/v3/tutorial/first-app.html#configuration-and-autoloaders)を読んでいると、
プロジェクトのsrcフォルダにComposerをインストールしろと書いてあります。
zipとかのコマンドと違って、1つのサーバーにいくつもプロジェクトがある場合、
プロジェクトごとにこの作業を行わないといけないんでしょうか。

なぜ上記サイトではそうしろと書いてあるかはわかりませんが、
調べてみると、Linuxでは、"/bin/" や "/usr/bin/" などのディレクトリに
「その中の実行ファイルを任意のディレクトリから パス の指定なしに実行できる。」
という許可が与えられているため、
`/usr/local/bin`フォルダにComposerの実行ファイル`composer.phar`を移動させれば、
どのディレクトリからでもComposerを使用することができるようです。

下記コマンドで、パスを通しましょう。

```
sudo mv composer.phar /usr/local/bin/composer
```
Composerのインストール確認は以下のコマンドで可能です。

```
composer -v
```
ちなみに、[3. yumを用いたインストール手順](https://qiita.com/erik_t/items/0b3492f38f6cd8605a4c#3-yum%E3%82%92%E7%94%A8%E3%81%84%E3%81%9F%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%89%8B%E9%A0%86)では、パスを通す作業は不要のようです。
以下のコマンドで実行ファイル`composer.phar`を探しても見つからなかったのですが、
インストール確認コマンドをしたらバージョンが表示されました。

```
find / -name composer.phar
```

あと、rootユーザーでインストール確認コマンドを実行すると、
`Do not run Composeras root/sper user!...`と表示されて怒られてしまうので、
ローカルユーザーで実行したほうが良いようです。

# 参考サイト
[Download Composer](https://getcomposer.org/download/)
[hydroculのメモ > コマンドの使い方(Linux) > curl コマンド](https://hydrocul.github.io/wiki/commands/curl.html)
[パイプ「|」を使って 複数のコマンドを組み合わせる](https://webkaru.net/linux/commands-pipeline/)
[CentOSにcomposerをインストールする方法](https://qiita.com/yukachin0414/items/bb2f54f59564919be6c7)
["パスが通っている"とは](http://www.obenri.com/_operation/path_through.html)
[CentOS7環境でLaravelを構築する](https://qiita.com/tosite0345/items/1e5bbeb33508abb1eaae)

# 関連ページ
## Windows10にVagrantをを入れてCentOS7をインストールしよう
[1. VagrantインストールからVagrantfileを設置まで](https://qiita.com/erik_t/items/d7f7abbf7deafa4c6fe4)
[2. 仮想マシンの操作](https://qiita.com/erik_t/items/909efb63fd389f486ec3)
[3. WinSCP、Tera Termに秘密鍵でログイン ](https://qiita.com/erik_t/items/2e3c43cfe8731621b82d)
[4. WinSCP、Tera Termにrootユーザーでパスワードログイン](https://qiita.com/erik_t/items/8d006b599815c8fbf38b)
[5. zip/unzipをインストール](https://qiita.com/erik_t/items/9fbe7b5630b1f62893a1)
[6. Vagrantにて仮想環境を配布](https://qiita.com/erik_t/items/11f24633f4248e4f33f0)

## ローカルでLAMP環境を構築しよう
[0. 事前準備](https://qiita.com/erik_t/items/9c7c49db061a250cbc32)
[1. Apacheをインストール](https://qiita.com/erik_t/items/e36235896b327f5cb461)
[2. MySQLをインストール](https://qiita.com/erik_t/items/8dc3f2a5e8e8c9376e27)
[3. PHPをインストール](https://qiita.com/erik_t/items/617503557020a4a6ba82)
[4. ファイアウォールとか停止する](https://qiita.com/erik_t/items/a898d0f547bff6b3d8ff)