はじめに
先日、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をバージョンアップすればいいじゃんとなるのですが、それが上手くできず今回苦戦した感じです。
ハマったポイント
今回ハマったポイントは二点あります。
これを知っていればもっと早く作業が終わったかと思います。
二度とこんな時間を使いたくないので備忘録として残しておこうと思った次第です。
恐ろしいことに、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/php
がphp.exeの場所と認識されたままのはずです。
ターミナルを新しく開いて、php -v
でインストールしたバージョンが表示されるか、
which php
で /opt/homebrew/opt/php@8.1/bin/php
が表示されればOKです。
composerのインストール
こちらは公式のトップページのコマンドをそのまま実行しました。
https://getcomposer.org/download/
composer -v
とかでバージョンが表示されれば完了です。
終わりに
作業自体はシンプルなのですが、基礎・前提知識の有無が今回時間のかかった原因かと思います。
かなりしんどかったので二度と忘れないとは思います。
最後までご覧いただきありがとうございました!