🔄

phpenvナシでも大丈夫。Brewとシェルスクリプトで快適なPHP切り替え環境を作る

に公開

はじめに

こんにちは、田中涼平(@RyoheiTanaka)です。

Laravel や他の PHP プロジェクトに取り組んでいると、PHP のバージョン切り替えに悩まされることがよくあります。phpenvasdf といったバージョン管理ツールを使うのが定番ですが、Homebrew ユーザーならもっとシンプルに管理できたらいいのに……と思ったことはありませんか?

この記事では、Homebrew とシェルスクリプトだけで、簡単・柔軟に PHP バージョンを切り替える環境を作る方法を紹介します。

なぜphpenvを使わないのか?

  • セットアップがやや煩雑(特に Mac 環境)
  • Homebrew で PHP をすでに管理しているのに、さらに別の仕組みを使うのはやや冗長
  • .zshrcや PATH まわりの設定競合が起きやすい
  • 私が使っているのは MacBook Pro A1502(2015 年モデル) のため、ビルド時のリソース制限が厳しく、phpenv 経由のインストールで 多くのエラーが発生してしまいました

実は、brew install php@8.1 のようにして複数の PHP バージョンを入れておき、必要なバージョンを brew link で切り替えるだけでも十分に実用的です。

changephp.sh とは?

複数バージョンの PHP を brew でインストールした上で、
シェルスクリプトを使って簡単に切り替えられるようにしたのが changephp.sh です。

GitHub リポジトリはこちら:
👉 https://github.com/RyoheiTanaka/changephp

対応バージョン

  • PHP 8.1
  • PHP 8.2
  • PHP 8.3
  • PHP 8.4(※ php@8.4 ではなく php としてインストールされる)

セットアップ方法

# リポジトリをクローン
git clone https://github.com/RyoheiTanaka/changephp.git

# 実行権限を付与
chmod +x changephp/changephp.sh

# .zshrc にエイリアスを追加
alias changephp="~/Project/changephp/changephp.sh"
source ~/.zshrc

使い方

# PHP 8.2 に切り替える
changephp 8.2

# PHP 8.4(brew install php)に戻す
changephp 8.4

php -v を実行すれば、現在有効なバージョンが確認できます。

はまったポイントと対処法

php -v を切り替えても反映されない

これは、/usr/local/opt/php/bin$PATH に先に登録されていることが原因です。

✅ 対処法:

# 不要なPATHを取り除く
export PATH=$(echo "$PATH" | tr ':' '\n' | grep -v "/usr/local/opt/php/bin" | grep -v "/usr/local/opt/php/sbin" | paste -sd ':' -)

また、.zshrc の中に export PATH="/usr/local/opt/php/bin:$PATH" といった記述がないかも確認しましょう。

php@8.4 が見つからない

Homebrew では php@8.4 というフォーミュラは存在せず、単に php として提供されます。
スクリプト側で 8.4 の指定を自動的に php に置き換えて処理しているため問題ありません。

おわりに

phpenv ほど多機能ではないけれど、シンプルに Homebrew で PHP バージョンを切り替えたい人にとっては十分な選択肢だと思います。

同じように悩んでいる方の参考になれば嬉しいです!

GitHub でのスターや Issue、大歓迎です ✨


🚀 田中涼平の他の活動


Discussion