はじめに
今回は、PHPのパッケージマネージャーであるcomposerの管理方法について書いていこうと思います。
以前、CakePHPをインストールする方法を書きました。
この記事でcomposerをインストールしているのですが、この方法はその時のバージョンをインストールするような方法で、アップデートした時にまた入れ直したりする必要があるのでは?と思いました。
そこで、 前回記事にしたHomebrewを使ってcomposerをインストールすればバージョンが上がった際には、Homebrewのコマンドでアップデートを行うことができ、composerを入れ直す必要がなくなると考えたので、その方法を紹介します。
初心者なので、解釈等が違っていたり、説明が不明瞭な部分があるかもしれませんので、そちらだけご了承ください汗
開発環境
mac OS High Sierra バージョン10.13.6
Homebrewでcomposerをインストール
1.composerの確認
composerが現在macに入っているかどうかを確認します。
ターミナルを起動して、以下を入力します。
$ composer -v
composerがmacに入ってなければ、「command not found」等と返ってくると思います。
また、すでにターミナルを使ってインストールしている場合は、事前に入っているcomposerを削除するなど、各々で対策をお願いします。
ちなみに…
自分は事前にmacにcomposerを入れた状態のままHomebrewでcomposerをインストールしてしまったので、その場合についてもこの後半で説明してますので、宜しければそちらも参考にしてみてください^^;
では、Homebrewでcomposerをインストールしていきます。
2.Homebrewでcomposerをインストール
では、composerをインストールするために以下を入力します。
$ brew install composer
すると、以下のようにインストールが始まります。
上の画像の説明をしていくと、自分の場合はcomposerがある状態でHomebrewでcomposerをインストールした為、エラー(黄色の枠)が出ていますので、composer無い状態からの人は気にしないでいいです。
そして、インストールが上手くいくと、一番下にあるHomebrewのお馴染みのマークであるビールの絵文字が出ます。これでHomebrewでのcomposerのインストールは完了です。
この後の説明は、composerが元々ある状態の人たち向けの話なので、インストールが完了した方は参考程度に流し読んで、目次の4へ移動してください(^ ^)
3.composerのある状態でインストールしてしまった場合
お待たせしました!٩( ‘ω’ )و
先ほど事前に説明した通りで、自分はcomposerを前回書いたCakePHPのインストール方法のやり方でcomposerをすでに入れており、その状態でHomebrewを使って2の操作を行いました。
その結果、さっきの画像のようなエラーが出ました。エラー文を見ると
The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink bin/composer
とあります。なんかlinkとかsymlinkedとか言っていて、シンボリックリンクがダブっていて、エラーが起きているようです。
ここで、「シンボリックリンクってなに?」となりました。
なので、シンボリックリンクの説明をしてから、本題に移ろうと思います。
シンボリックリンクって?
UNIX系のOS(mac,Linux )で使われるファイルやフォルダの代理となるファイルのこと
例えとしては、「Windowsのショートカット」です。もう少し詳しく別の例えで説明すると、「田舎の山奥にA工場があるとして、そこのA工場への注文窓口を駅前に立てて注文を受ける」と言うものです。シンボリックリンクのURLは注文窓口の住所と考えるとより分かり易くなるかと思います。
エラーの原因を調べる
今回の場合、元々あるcomposerに対して
/usr/local/bin/composer
と言うシンボリックリンクをmacOSが自動的に指定しており、Homebrewでインストールしたcomposerもその同じものを扱おうとしている為、エラーが出ているわけです。
実際に、元々あるcomposerのシンボリックリンクを表示するには以下を入力してみてください。
$ ls -l `which composer`
すると以下のように返ってきます。(green31のところは個人で異なると思います。)
-rwxr-xr-x 1 green31 staff 1932034 10 1 21:18 /usr/local/bin/composer
この後半にある記述/usr~と言うところがシンボリックリンクです。
なので、現状起きていることを工場の話で例えると、
別のB工場が駅前のA工場の注文窓口がある土地にB工場の注文窓口を建てようとしている状態です。すでに建物があるわけですから、無理ですよね^^;
この例えから考えると、シンボリックリンクである
/usr/local/bin/composer
にあるファイルは「元々インストールしていたcomposer」自体のデータではなく、「元々インストールしていたcomposerの代理ファイル(ショートカット)」と言うことです。なので、この代理ファイルを消せば、「Homebrewから入れたcomposer」の代理ファイルを同じ場所に作ることができます。
工場の話で言うと、駅前にあるA工場の注文窓口を崩して、B工場の注文窓口をそこの土地に建てると言うことです。
なので、以下のように入力して、「元々インストールしていたcomposerの代理ファイル」を削除します。(元々インストールしていたcomposer自体のファイルは消しているわけではありません)
$ sudo rm /usr/local/bin/composer
すると、以下のようにパスワードを求められます。
Password: (このパスワードはお持ちのmacPCの起動時のパスワードです)
パスワードを入力すると、完了します。次の行には特に何も出ません。
では、一度composerの代理ファイルがあるか確認するために以下を入力します。
$ which composer
代理ファイルの削除ができていれば何も返ってきません。
今の状況を工場の話で考えると、A工場の注文窓口を壊し、土地をまっさらにして他の誰かが土地を購入できる状態と言うことです。なので、次に行いたいことはB工場の注文窓口をそこに建てることです。
では、工場の話をもとに実際のcomposerの話で考えると、「Homebrewで入れたcomposerの代理ファイル」をシンボリックリンクに設定すると言うことになります。
まず、以下のように入力します。
$ brew link composer
すると、以下のように返ってきたら上手くいっています。
Linking /usr/local/Cellar/composer/1.10.1... 1 symlinks created
では、composerを確認する為に以下を入力します。
$ which composer
以下のように返ってきます。
/usr/local/bin/composer
つまりこれは、何かのcomposerの代理ファイルがシンボリックリンクに設定されていると言うことです。より、詳しく調べる為に以下のように入力してリンクを調べます。
$ ls -l `which composer`
すると、以下のように返ってきます。
lrwxr-xr-x 1 green31 admin 38 3 22 16:13 /usr/local/bin/composer ->../Cellar/composer/1.10.1/bin/composer
「->」が境目で、「->」より左側にあるURLがシンボリックリンク、右側にあるURLがHomebrewでインストールしたcomposer本体のファイルが入っている場所です。
これで無事に設定が終わり、確認も終わりました!
シンボリックリンクについては、以下のサイトを参考に説明しました。
シンボリックリンクとは
https://wa3.i-3-i.info/word1151.html
Homebrewでcomposerをアップデートする
Homebrewでcomposerを管理している状態になったので、ターミナルで以下のように入力して見てください。
$ brew upgrade composer
すると、composerのアップデートが行われます。
自分の場合はバージョンが最新の状態で行なったので、下に
Warning: composer 1.10.1 already installed
と出てます。「すでにインストールしてありますよ」と言っています。
このようにHomebrewによるアップデートなどの管理ができるわけです。
他にも、Homebrewによる操作ができるようなので、brewコマンドを説明した記事を載せておきます。今まで、brew ~と書いたコードはbrewコマンドと言われています。
Homebrewメモ
https://qiita.com/saba1024/items/0f397b3f59d28e0ef527
Composerと、Homebrewのまとめ
https://qiita.com/yukiigarashi/items/17ca7e84ec56dfedddc1
Homebrew以外でcomposerをアップデートする方法もあった
どちらの管理方法がいいのかは、正直分かりませんが、以下のサイトではcomposer自体にアップデートを促すような方法もあるみたいです^^;
PHPのComposerのバージョンアップとかダウングレードとか
https://yoshinorin.net/2017/07/15/update-php-composer/
まとめ
最後まで読んでいただきありがとうございました。少しでも役に立てたら幸いです。
今回は、Homebrewを使ったcomposerのインストール方法とその管理方法(バージョンアップとか)について長々と書いてみました。自分もここら辺の話はつい最近知ったことで、まだまだ説明が拙い気がします笑
今回の勉強によって、自分としてもようやくターミナルの操作に不安や恐怖心が減ってた気がします^^;