macOS に PHP 開発環境をセットアップするなかで、 Composer の導入につまづいたためログします。

Composer インストールのおさらい

よくある Composer のインストール手順を確認しましょう。
次の 3 ステップです。

    1. composer.phar を入手する
1$ curl -sS https://getcomposer.org/installer | php
    1. パスの通っているディレクトリに移動する
1$ mv composer.phar /usr/local/bin/composer
    1. 実行パスを確認する
1$ which composer

which は「実行コマンドのフルパスを表示する」コマンドです。

ここではこれを利用し、システムが composer というコマンドを認識しているかどうかを確認しています。

この手順では /usr/local/bin/composermv しましたが、 which でもこの通りのパスが表示されれば OK です。

今回のエラー

たいていはスッと完了する Composer のインストールですが、躓くこともあります。

今回

1$ mv composer.phar /usr/local/bin/composer

の実行で

1mv: rename composer.phar to /usr/local/bin/composer: No such file or directory

という結果になりました。

No such file or directory

を訳すと

そのようなファイルやディレクトリはありません。

ということですが、そんなことってあり得るのでしょうか ?

‘No such file or directory’ ?

はい、ありえます。

今回 MacBook というのがポイントかもしれません。

/usr/local/bin は初期に用意されるディレクトリではなく、 macOS のクリーンインストール直後など、このディレクトリがない状態も普通にあります。

mv では移動先の親となるディレクトリが存在しなかった場合に、勝手にディレクトリを作成することはしません。
(勝手に作ってしまうのは、副作用ですね。)

そのため、

No such file or directory

そのようなファイルやディレクトリはありません。

というエラーを出し、「ディレクトリが存在するのか ?」をまずチェックしてねと促しているわけです。

typo することなど考えると、親となるディレクトリが存在しない場合にエラーとするのは妥当な処理だということがわかりますね。


1mv: rename composer.phar to /usr/local/bin/composer: No such file or directory

/usr/local/bin/composer

に移動しようとしたが

/usr/local/bin

が存在しなかったため、

No such file or directory

そのようなファイルやディレクトリはありません。

対処方法

今回、親となるディレクトリが見つからなかったため、移動できずにエラーとなっていました。

そのため、親となるディレクトリを作ってあげる、具体的には /usr/local/bin を作ることで対処が可能です。

ここでまた一つポイントがあり、単純に mkdir をしても Permission denied と権限エラーになります。

1$ mkdir /usr/local/bin
2mkdir: /usr/local/bin: Permission denied

はい、やっぱりね。

理由は、 /usr/local の所有者が root であるため、一般ユーザが安易にディレクトリを追加できないためです。

1$ ls -la /usr | grep local
2drwxr-xr-x    14 root  wheel    448 May 16 14:51 local

上記を考慮し、スーパーユーザでディレクトリを作成し、

1$ sudo mkdir /usr/local/bin

次に

1$ sudo chown [user_name] /usr/local/bin

を実行して、所有者を自分自身に変更します。

ここまでやることで、

1$ mv composer.phar /usr/local/bin/composer

が実行でき

1$ which composer
2/usr/local/bin/composer

と、 which も期待通りの結果が返るようになりました。

もちろん composer コマンドも通ります。

1   ______
2  / ____/___  ____ ___  ____  ____  ________  _____
3 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
4/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
5\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
6                    /_/

話自体は凄くシンプルなのですが、シェルや権限周りがわからないと難しいかもしれない、というお話でした。

余談:パスが通っていればどこでもいい

余談なのですが、

1$ mv composer.phar /usr/local/bin/composer

は、どこからでも composer というコマンドで Composer を実行可能にするための手順です。

これは パスが通った場所であればどこでも よく、 /usr/local/bin/ に拘る必要はないのです。

私も愛用しております ColorfulBox(カラフルボックス) など

レンタルサーバでは /usr/local/bin/ が開放されていないのが当たり前ですから、置きようがないのですね。

ではどうするのかというと、

~/.local/bin などを作って、 .bashrc あたりを編集し

1PATH=$PATH:$HOME/.local/bin:$HOME/bin

のようにパスに追記してあげる、というのがベターだと考えています。