検証環境にcomposerの本体をインストールしようと思ったら、躓いたので備忘録

# はじめに

検証用に建てた環境でcomposerの本体がインストールされていないことが判明→どこでインストールするべきか、どこに`composer.phar`ファイルをおくべきかLinux環境でのディレクトリ構造（各ディレクトリの意味）をよく知らなかったためわりと適当にインストールしようとしたら、新人SEが先輩SEからつっこまれたので忘れないようにまとめておきます。

今回の検証環境は
CentOs
Laravel
で作ってます。

参照：[composerダウンロードページ][composerダウンロード]

[composerダウンロード]:https://getcomposer.org/download/

## 事の発端

プロジェクトの検証環境に差分をアップするように指示を受ける
↓
検証環境にssh接続してappディレクトリやpublicディレクトリをアップする
↓
そういえば、新しいライブラリも入れたからcomposer updateしなきゃ
↓
composer command not found
↓
composer入ってないのか確認
↓
なかった
↓
composerないのかじゃあインストールするか！

ということでcomposerの本体を検証環境にインストールすることになりました。


### じゃあどこでインストールするか

phpディレクトリにインストールすればいいんじゃない？と思い、root権限をたちまち教えてもらい（元々のユーザーにはフォルダへの書き込み権限がなかったため）、phpディレクトリを探す旅に...

とここでSTOPがかけられました。

・そもそも変更しても大丈夫なディレクトリの情報をroot権限で変更しようとしているのか
・他のプロジェクトの影響は大丈夫なのか
・composerをインストールする推奨のディレクトリがあるんじゃないのか

私は勘違いしていました。
え、どこのディレクトリでもいいんじゃないの？と
と、とりあえずcomposerのドキュメントを読みことになりました。

## コマンドでのcomposerの本体ダウンロード、設定

### はじめに

> The installer - which requires that you have PHP already installed - will download Composer for you and  set up your PATH environment variable so you can simply call composer from any directory.

> このインストーラーはComposerをダウンロードし、PATH環境変数を設定して任意のディレクトリーから簡単に呼び出すことができるようにします。(PHPをインストールしている必要があります。)

### composer本体のインストール
1.　phpコマンドでコピー、DL
`php -r "copy（'https://getcomposer.org/installer'、'composer-setup.php'）;" `
こちらのコマンドはphpのcopy()関数`copy( コピー元、コピー先 )`を実行するコマンドになっています。
コピー先の部分はコピーを置きたいディレクトリのパスを書くことで任意の場所にコピーでき、コピー後のファイルの名前を書くことで名前の変更をすることができます。
実際、コピー先の`https://getcomposer.org/installer`にアクセスすると`installer`というファイルがDLでき、今回はこの`installer`というファイルをカレントディレクトリ(パスは書かれていないので)に`composer-setup.php`という名前で保存するというコマンドになっています。

2.　 phpコマンドでハッシュ値を確認して、ファイルが正しいものが調べる
`pphp -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
 `
内容は
`hash_file('sha384', 'composer-setup.php')` → `composer-setup.php`ファイルのハッシュ値を`sha384`のアルゴリズムを元に計算。その計算されたものが`55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae`であれば`Installer verified`と出力され、異なった場合は`Installer corrupt`を出力し、`composer-setup.php`ファイルを削除する...というものになります。
ですので、ブログを見ながら1.のコマンドでDLサイトからインストーラーをDLしてブログのハッシュ値を比べてもバージョン違い等で、`Installer corrupt`を出力されてしまう場合があります。しっかりDLサイトのコマンドで実行しましょう(1敗)


3.　　composer本体のインストール
`php composer-setup.php`
`composer-setup.php`を実行します。実行によって、phpの設定ファイルの変更と`composer.phar`ファイルをカレントディレクトリに作成します。

4.　　必要なくなった`composer-setup.php`ファイルの削除
`php -r "unlink('composer-setup.php');"`


これでcomposerはインストールされました！ﾔｯﾀﾈ！
カレントディレクトリには`composer.phar`ファイルが出来ているはずですのでこのディレクトリで
`php composer.phar`とコマンドを打つとcomposerを確認できるかと思います。
たちまち他のプロジェクト等でcomposerを使わないのであれば、これでいいのかなーと思います。
`composer update`も`php composer.phar update`と書打てばいいので、これで事足りるかなと。
ただし、composerを他のユーザでも使えるようにするのは後々必要かと思います。

### 他のユーザも使えるようにする
上記の状態は自分が使用しているユーザでしかcomposerを使えない状態（権限があれば別）ですので、みんなが使えるようにします。
やり方は共通のディレクトリなんかに`composer.phar`を移動させて、そこにパスを通せばいいみたいです。
`sudo mv composer.phar /usr/local/bin/composer`　←　/usr/local/binは全ユーザーの共通のディレクトリの意味があるっぽいなければmkdir等で作成すればよいか。

ちなみに今回composerのインストールをしようとした場所はbinディレクトリで、知らなかったんですが、ユーザー向けの基本コマンドが入っていディレクトリらしいです。。他にもよく目にする/var/www/html等はアパッチのドキュメントルートのディレクトリだったりと、ちゃんと役割があるんだなと知りました...。


# まとめ
今まで自分のPCでの環境以外触ったことがなかったですが、今回検証環境でcomposerをインストールするだけでも、いろいろな発見がありました。