こんぶにのブログ

エンジニアという職業を通して学んだことを発信するブログです。

Macに元々インストールされているphpの存在に数時間奪われ…。Macにphpとcomposerをインストールし直した話【php・備忘録】

はじめに

先日、MacBook Pro(M1チップ)にLaravelの環境を構築する機会がありました。
その時点でMacBook内にはhomebrewでかつてphp7.4 とcomposerをインストールしてありました。
ただ、phpのバージョンが古く、composerが使えない状態になり、そのエラーを解決できなそうだったので一旦すべて構築し直そうとなりました。
以下のエラーでした。

Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Root composer.json requires php ^8.1 but your php version (7.4.16) does not satisfy that requirement.
  Problem 2
    - Root composer.json requires laravel/sanctum ^3.2 -> satisfiable by laravel/sanctum[v3.2.0, ..., v3.3.1].
    - laravel/sanctum[v3.2.0, ..., v3.3.1] require php ^8.0.2 -> your php version (7.4.16) does not satisfy that requirement.
  Problem 3
    - laravel/framework[v10.10.0, ..., v10.29.0] require php ^8.1 -> your php version (7.4.16) does not satisfy that requirement.
    - Root composer.json requires laravel/framework ^10.10 -> satisfiable by laravel/framework[v10.10.0, ..., v10.29.0].

この時点で、phpをバージョンアップすればいいじゃんとなるのですが、それが上手くできず今回苦戦した感じです。

ハマったポイント

今回ハマったポイントは二点あります。

  1. Macに元々phpがインストールされているのを知らなかった
    2.ターミナルは再起動しないと新たに通したパスを認識してくれないのを知らなかった

これを知っていればもっと早く作業が終わったかと思います。
二度とこんな時間を使いたくないので備忘録として残しておこうと思った次第です。
恐ろしいことに、phpがずっとローカルのものを指していたので、homebrewでバージョンアップしてもphp -vで表示されるバージョンが変わらなかったのです。
また、パス通してるのにphpがずっとデフォルトを示すのも、ターミナルを再起動していなかったからでした。

作業手順

現状のphpの確認

まず、自分のPCのどこにphpがインストールされているのかを確認します。

which php

結果として以下のように出た場合はローカルに元々インストールされているphpにパスが通ってます。

/usr/bin/php

実際にこのパスに移動してみると編集不可のフォルダにphp.exeが存在していることを確認できます。
こいつに要注意です。 最初はこのphpをバージョンアップしようと思いましたが、難しそうでしたので諦めました。 (そもそも方法はあるのか?) というか、homebrewでやるのが主流のようなので、そちらを選択しました。

既にインストールされているhomebrewを削除

私の場合、過去にhomebrewでcomposerやらphpをインストールしており、そのバージョンが古くなっていて自分でもどういう状態なのか覚えていないほどでした。
そのためhomebrewごと一旦削除して、そこから新しく環境を作りました。
ですので、この手順は必須ではありません。
phpのバージョンアップだけならhomebrew内で切り替えられます。

MacのPHPを8.1にバージョンアップする #Mac - Qiita

アンインストール手順としては、コマンドを実行するのみです。
公式から以下に飛べます。
GitHub - Homebrew/install: 📥 Homebrew (un)installer
一応、composer -vなどhomebrewでインストールされていたものを実行してみて消えていることを確認しました。

新たにhomebrewをインストール

こちらも公式から以下をターミナルで実行するのみです。
macOS(またはLinux)用パッケージマネージャー — Homebrew

homebrewでphpをインストール

最新の安定系phpをインストールするなら以下のコマンドで十分です。

brew install php

今回は少なくともphpの8.1以上をインストールしたかったので、一応明示的にやりました。
まずはインストールできるphpのバージョンを検索し、

##実行
brew search php
##結果
brew-php-switcher     php-cs-fixer          php@8.0               phpmd                 phpunit               pop
php                   php-cs-fixer@2        php@8.1               phpmyadmin            pup
php-code-sniffer      php@7.4               phpbrew               phpstan               pcp

php@8.1がインストールできそうなので明示的にインストールします。

##実行
brew install php@8.1

実行が成功すると、最後の方に以下のメッセージが出てると思います。

If you need to have php@8.1 first in your PATH, run:
  echo 'export PATH="/opt/homebrew/opt/php@8.1/bin:$PATH"' >> ~/.zshrc
  echo 'export PATH="/opt/homebrew/opt/php@8.1/sbin:$PATH"' >> ~/.zshrc

For compilers to find php@8.1 you may need to set:
  export LDFLAGS="-L/opt/homebrew/opt/php@8.1/lib"
  export CPPFLAGS="-I/opt/homebrew/opt/php@8.1/include"

To start php@8.1 now and restart at login:
  brew services start php@8.1

このメッセージにしたがい、それぞれコマンドを実行していきます。

##ターミナルで実行
  echo 'export PATH="/opt/homebrew/opt/php@8.1/bin:$PATH"' >> ~/.zshrc
  echo 'export PATH="/opt/homebrew/opt/php@8.1/sbin:$PATH"' >> ~/.zshrc

以下はファイルに追記していきます。
open ~/.zshrcでホームディレクトリにある.zshrcファイルを開き、そこに以下を追記します。

  export LDFLAGS="-L/opt/homebrew/opt/php@8.1/lib"
  export CPPFLAGS="-I/opt/homebrew/opt/php@8.1/include"

.zshrcが無い方は以下のURLを参考にしてみてください。
echo $SHELLで設定すべきファイルが分かります。
macOSでパスを通す方法

最後にphpを起動します。

brew services start php@8.1

ここからが私のハマったポイントです。
今のターミナル画面はいったん閉じるか、新しいタブでターミナル画面を開きます。 これをやらないといつまでたってもpcがデフォルトのphpを見ています。
試しにターミナル画面を変えないまま、php -vを実行してみてください。
バージョンが変わっていないと思います。

もしくはwhich phpでもいいです。
/usr/bin/phpphp.exeの場所と認識されたままのはずです。
ターミナルを新しく開いて、php -vでインストールしたバージョンが表示されるか、
which php /opt/homebrew/opt/php@8.1/bin/phpが表示されればOKです。

composerのインストール

こちらは公式のトップページのコマンドをそのまま実行しました。

https://getcomposer.org/download/

composer -vとかでバージョンが表示されれば完了です。

終わりに

作業自体はシンプルなのですが、基礎・前提知識の有無が今回時間のかかった原因かと思います。
かなりしんどかったので二度と忘れないとは思います。

最後までご覧いただきありがとうございました!

参考

MacにHomebrewでPHPをインストールする方法 | Blog | StubCreate株式会社のブログ

MacのPHPを8.1にバージョンアップする #Mac - Qiita