(Mac)phpbrewでPHPのバージョンを切り替える

phpbrewのセットアップと使用方法

OSにバージョン違いのPHPを複数インストールし、
任意のタイミングで使用するバージョンを切り替える事を可能にする「phpbrew」というツールをMacに導入する手順をメモします。

環境: Mac OS 10.13.6、Homebrew 2.2.5、phpbrew 1.25.3

Homebrewを使用してPHPをインストールする

任意のバージョンのPHPをMacへインストールするにはパッケージマネージャーのHomebrewというツールも必要になりますので、
あらかじめインストールして使えるようにしておきます。

homebrewが既にインストールされているかどうかはターミナルから
バージョン確認コマンド brew -v を実行して確かめることができます。

Homebrewの詳細とインストール方法

Homebrewが準備出来たらphpbrewをセットアップしていきますが、
Macに初めからインストールされているPHPのバージョンが古い場合は、

Warning! The usage of PHP older than 7.2.0 as the interpreter is deprecated.
Please set the system interpreter using ‘phpbrew system <version>’.
See https://github.com/phpbrew/phpbrew/wiki/System-Interpreter for details.

上記のようなメッセージが出てphpbrewを上手くセットアップ出来ないようですので

homebrewを使用してあらかじめ、バージョン7.2以降のPHPをインストールしておきます。

インストール出来るPHPの確認

$ brew search php@7
==> Formulae
php@7.2        php@7.3        php@7.4

7.4系をインストールしておきます。

$ brew install php@7.4

phpbrewのセットアップ

最新版のPHPがインストール出来たら、phpbrewのセットアップに移ります。

※基本的にphpbrew公式ドキュメントに沿って進めていけば良いと思いますが、
本記事執筆時の環境でのエラー発生箇所と解決方法も含めてメモしていきます。

phpbrewインストール、初期化、bashの設定

※ターミナルがbashではなく、zshの場合は、最後の「~/.bashrc」を「~/.zshrc」にします

$ curl -L -O https://github.com/phpbrew/phpbrew/releases/latest/download/phpbrew.phar
$ chmod +x phpbrew.phar
$ sudo mv phpbrew.phar /usr/local/bin/phpbrew
$ phpbrew init
$ echo 'source ~/.phpbrew/bashrc' >> ~/.bashrc
$ phpbrew lookup-prefix homebrew

インストールが完了しphpbrewコマンドが使用出来るようになったら、
他のバージョンのPHPをインストールしてみます。

他のバージョンのPHPをインストール

phpbrew known でインストール出来るバージョン一覧を確認します。
(行ごとに各バージョンの一覧が表示されている)

$ phpbrew known
Read local release list (last update: 2020-02-12 08:50:46 UTC).
You can run `phpbrew update` or `phpbrew known --update` to get a newer release list.
7.4: 7.4.2, 7.4.1, 7.4.0 ...
7.3: 7.3.14, 7.3.13, 7.3.12, 7.3.11, 7.3.10, 7.3.9, 7.3.8, 7.3.7 ...
7.2: 7.2.27, 7.2.26, 7.2.25, 7.2.24, 7.2.23, 7.2.22, 7.2.21, 7.2.20 ...
7.1: 7.1.33, 7.1.32, 7.1.31, 7.1.30, 7.1.29, 7.1.28, 7.1.27, 7.1.26 ...
7.0: 7.0.33, 7.0.32, 7.0.31, 7.0.30, 7.0.29, 7.0.28, 7.0.27, 7.0.26 ...
5.6: 5.6.40, 5.6.39, 5.6.38, 5.6.37, 5.6.36, 5.6.35, 5.6.34, 5.6.33 ...
5.5: 5.5.38, 5.5.37, 5.5.36, 5.5.35, 5.5.34, 5.5.33, 5.5.32, 5.5.31 ...
5.4: 5.4.45, 5.4.44, 5.4.43, 5.4.42, 5.4.41, 5.4.40, 5.4.39, 5.4.38 ...

例として上記から7.3系のインストールを行います。
phpbrew install コマンドを実行

$ phpbrew install 7.3.14
===> phpbrew will now build 7.3.14
You haven't enabled any variants. The default variant will be enabled: 
[bcmath, bz2, calendar, cli, ctype, dom, fileinfo, filter, ipc, json, mbregex, mbstring, mhash, pcntl, pcre, pdo, pear, phar, posix, readline, sockets, tokenizer, xml, curl, openssl, zip]
Please run 'phpbrew variants' for more information.

===> Loading and resolving variants...
Homebrew prefix "/usr/local/Cellar/libxml2/2.9.10" does not exist.
Homebrew prefix "/usr/local/Cellar/bzip2/1.0.8" does not exist.
Homebrew prefix "/usr/local/Cellar/mhash/0.9.9.9" does not exist.
Homebrew prefix "/usr/local/Cellar/curl/7.68.0" does not exist.
Downloading https://www.php.net/distributions/php-7.3.14.tar.bz2 via curl extension
phpbrew installコマンドでインストールに失敗!

(Ctrl + C でインストール処理を中断)

上記で表示されたphpbrew installを実行するため足りないソフトウェア(does not exist.)を
brew installコマンドでまとめてインストールします。

brew install libxml2 bzip2 mhash curl

足りないソフトウェアのインストールが完了したら、PHPのインストールを再度試みます。
(ドキュメントの通り、次は +defaultを付けて実行してみた)
phpbrew install 7.3.14 +default

(略)
* To configure your installed PHP further, you can edit the config file at
    /Users/ken/.phpbrew/php/php-7.3.14/etc/php.ini

* WARNING:
  You haven't setup your .bashrc file to load phpbrew shell script yet!
  Please run 'phpbrew init' to see the steps!

To use the newly built PHP, try the line(s) below:

    $ phpbrew use php-7.3.14

Or you can use switch command to switch your default php to php-7.3.14:

    $ phpbrew switch php-7.3.14

Enjoy!

(PHPバージョン 7.3.14が無事インストール出来た模様)

phpbrew list コマンドでバージョンの一覧を表示

$ phpbrew list
* (system)
  php-7.3.14

上記の内容から、あらかじめインストールしていたバージョン7.4系が消えてなくなりましたが、
とりあえず進めます。

phpbrew useでバージョン切り替えに失敗

今存在するバージョン 7.3.14を使用するために
phpbrew useコマンドを実行

$ phpbrew use php-7.3.14
Invalid argument php-7.3.14

Invalid argument php-7.3.14
次は上記のようにエラーが出てphpbrew useを実行出来ませんでした。

【解決】

いろいろ試行錯誤した挙句、
下記のsourceコマンドを実行することで解決しました。

source ~/.phpbrew/bashrc

※参考 https://github.com/phpbrew/phpbrew/issues/562

sourceコマンドを実行するとプロセスが終了します。

~ > user@USERnoMacBook-ea [php:7.3.14-phpbrew]
$ exit
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.
Deleting expired sessions...37 completed.

[プロセスが完了しました]

上記の内容が表示されたら、ターミナルから新しいウィンドウを開いて再開。

phpbrew use コマンドが実行出来るようになっていました。

※この辺りは理解が完全でないのですが、
先に行なった ~/.bashrcへの追記を消してもコマンドは実行出来るようです。

(phpbrew listで選択出来るバージョン一覧を表示確認)

$ phpbrew use 7.3.14
$ phpbrew list
* php-7.3.14
他バージョンへの切り替えと確認

他のバージョンのPHPをインストールしてみます。
先ほど消えてしまった7.4系から選択して再インストール

phpbrew install 7.4.2

インストールが完了したら、phpbrew listでインストール済み一覧を表示。

$ phpbrew list
  php-7.4.2      
* php-7.3.14

7.4系が無事インストール出来ており、先にインストールした7.3系も存在しています。

インストールし直した、7.4系に切り替えてみます。

$ phpbrew use php-7.4.2

PHPのバージョン確認コマンド php -v を実行

$ php -v
PHP 7.4.2 (cli) (built: Feb 12 2020 19:44:39) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

phpbrew useコマンドで切り替えたバージョンが表示されるようになっていればOKです。

Follow me!