個人で色々試したいものがある時に最新のPHPが必要となる事が多々あります。そんな時、今まではHomebrewで両方のversionをインストールして環境変数のパスを手作業で切り替えていましたが、正直面倒です。今回はPHPBrewを使ってそんな面倒が解消されるか試してみます。今回の記事は私の作業環境であるmacOSでの話となります、ご承知ください。
PHPBrew
前々からPHPBrew自体は知っていましたが、ローカルには既にHomeBrewで複数のversionがインストールされていいた為、試してはいませんでした。今回、Laravel10.xのインストールを試すのにPHP8.1以上が必須となった為、そちらのインストールに使用してみます。
READMEに書いてありますが、PHPBrewは異なるPHPのversionをホームディレクトリ配下(macだと~/.phpbrew/php配下)にビルドしインストールするツールです。PHPBrewはバージョン毎にディレクトリを分けてインストールする為、それぞれが独立しており、管理や使用するバージョンの切り替えが容易となる様です。恐らくバージョン切り替え時は単に参照のパスを書き換えているのでしょうね。これは期待大です。
OSのサポート
PHPBrewはUnix系のOSでサポートされているようです。今回紹介するのはmacOSでの手順ですが、他にもLinuxのディストリビューション(Ubuntu, Debian, RHEL, Fedoraなど)でも使えるようです。
install
早速、試してみましょう。まず、install前にRequirementから各OSごとに事前にinstallが必要なパッケージ等が書いてあるのでチェックします。macOSの場合はHomebrewが必要との事でした。私の環境には既にinstallされているので飛ばします。
次にcurlでphpbrewをダウンロードし、/usr/local/bin配下に配置します。
curl -L -O https://github.com/phpbrew/phpbrew/releases/latest/download/phpbrew.phar # chmodで実行権限を付ける chmod +x phpbrew.phar # /usr/local/bin 配下にphpbrewとして設置 mv phpbrew.phar /usr/local/bin/phpbrew
/usr/local/bin配下はパスが通っているので、以下のようにどこからでも呼び出せるようになったはずです。
which phpbrew >>> /usr/local/bin/phpbrew
次に、phpbrewを初期化します。
phpbrew init
初期化が完了すると $HOME/.phpbrew 配下に必要なファイルが生成されます。
ls ~/.phpbrew >>> bashrc build php phpbrew.fish
Terminal起動時に必要な機能を読み込ませる為に、.bashrc または .zshrc に以下の行を追記します。(私の環境では.zshrcに追記した)
[[ -e ~/.phpbrew/bashrc ]] && source ~/.phpbrew/bashrc
追記後にsourceコマンドで.zshrcから設定を読み直しましょう。
source ~/.zshrc
最後にライブラリ探索用のプレフィックスをセットしてinstall完了です。これをセットしないとライブラリが見つからない旨のエラーが沢山出てしまいます。
phpbrew lookup-prefix homebrew
PHPbrewを使ってPHPをインストール
phpbrewの準備ができたところで任意のVersionのPHPをインストールしてみましょう。今回はPHP8.1をインストールします。まず、インストール可能なPHPのバージョンを確認します。
phpbrew known >>>===> Fetching release list... Downloading https://www.php.net/releases/index.php?json=1&version=8&max=100 via curl extension Downloading https://www.php.net/releases/index.php?json=1&version=7&max=100 via curl extension 8.2: 8.2.7, 8.2.6, 8.2.5, 8.2.4, 8.2.3, 8.2.2, 8.2.1, 8.2.0 ... 8.1: 8.1.20, 8.1.19, 8.1.18, 8.1.17, 8.1.16, 8.1.15, 8.1.14, 8.1.13 ... 8.0: 8.0.29, 8.0.28, 8.0.27, 8.0.26, 8.0.25, 8.0.24, 8.0.23, 8.0.22 ... 7.4: 7.4.33, 7.4.32, 7.4.30, 7.4.29, 7.4.28, 7.4.27, 7.4.26, 7.4.25 ... 7.3: 7.3.33, 7.3.32, 7.3.31, 7.3.30, 7.3.29, 7.3.28, 7.3.27, 7.3.26 ... 7.2: 7.2.34, 7.2.33, 7.2.32, 7.2.31, 7.2.30, 7.2.29, 7.2.28, 7.2.27 ... 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 ...
最新は8.2までありますね、古いバージョンは7.0まで指定できる様です。インストール可能なリストに8.1も含まれているので、次のコマンドでインストールします。ビルドに時間が掛かるようで、私の環境では15分ほど掛かりました。
phpbrew install 8.1 +default +dbs +apxs2
8.1の最新のバージョンをインストールしたいので、マイナバージョン(8.1.XのX部分)は指定しませんでした。
Versionの後に指定している+default +dbs +apxs2というのはバリアントと呼ばれるものです。
バリアント
バリアントとは、通常のPHPをビルド・インストール際に指定するオプションを抽象化したものです。DBのドライバであったり、opensslなどのライブラリであったり、PHPで有効にしたい機能をオプションとして指定できます。バリアント無しだと最小構成でインストールされます。+defaultだとよく使われるバリアントがまとめてインストールされます。また、今回のインストールではDB(mysql)を使用する為の+dbs、Apache2を使用する為の+apxs2を追加で指定しました。以下のコマンドで、指定可能なバリアントが確認できます。
phpbrew variants >>> Variants: all, apxs2, bcmath, bz2, calendar, cgi, cli, ctype, curl, dba, debug, dom, dtrace, editline, embed, exif, fileinfo, filter, fpm, ftp, gcov, gd, gettext, gmp, hash, iconv, imap, inifile, inline, intl, ipc, ipv6, json, kerberos, ldap, libgcc, mbregex, mbstring, mcrypt, mhash, mysql, opcache, openssl, pcntl, pcre, pdo, pear, pgsql, phar, phpdbg, posix, readline, session, soap, sockets, sodium, sqlite, static, tidy, tokenizer, wddx, xml, xmlrpc, zip, zlib, zts Virtual variants: dbs: sqlite, mysql, pgsql, pdo mb: mbstring, mbregex neutral: small: bz2, cli, dom, filter, ipc, json, mbregex, mbstring, pcre, phar, posix, readline, xml, curl, openssl default: 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 everything: dba, ipv6, dom, calendar, wddx, static, inifile, inline, cli, ftp, filter, gcov, zts, json, hash, exif, mbstring, mbregex, libgcc, pdo, posix, embed, sockets, debug, phpdbg, zip, bcmath, fileinfo, ctype, cgi, soap, pcntl, phar, session, tokenizer, opcache, imap, ldap, tidy, kerberos, xmlrpc, fpm, dtrace, pcre, mhash, mcrypt, zlib, curl, readline, editline, gd, intl, sodium, openssl, mysql, sqlite, pgsql, xml, gettext, iconv, bz2, ipc, gmp, pear
+defaultには以下が含まれている様です、
default: 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
話をインストールに戻します。installコマンドが完了したらlistコマンドでインストール済みのバージョン一覧に表示されるか確認しましょう。
phpbrew list >>> * (system) php-8.1.20
アスタリスク(*)が付いているのが現在使用中のバージョンです。(system)はHomebrewでインストールしたシステムデフォルトのバージョン(8.0.28がインストールされています)の事です。PHPBrewによって php-8.1.20 がインストールされた様ですね。このバージョンに切り替えるにはuseコマンドで指定します。
phpbrew use php-8.1.20
バージョンが切り替わったか、確認してみましょう。
php -v >>> PHP 8.1.20 (cli) (built: Jun 20 2023 21:18:43) (NTS) Copyright (c) The PHP Group Zend Engine v4.1.20, Copyright (c) Zend Technologies
8.1.20 になりましたね。尚、このままでは一度Terminalを再起動するとまたシステムデフォルトの8.0.28に戻ってしまいます。PHPBrewでインストールしたPHPをデフォルトで使用するにはswitchコマンドで指定します。
phpbrew switch php-8.1.20
逆にPHPBrewの使用をやめてシステムデフォルトに戻したい場合は
phpbrew switch-off
それまでに使用していた環境も残しつつ、別バージョンをインストールして試せるのは安心感があって良いですね。
まとめ
以上、PHPBrewのインストールから基本的な操作の解説でした。Homebrewでも複数のバージョンをインストールして切り替える事は可能でしたが、冒頭で書いたように手動で切り替えが必要な部分があります。最近L10.xの検証などでバージョンを切り替える頻度が多いため、コマンド一発で切り替えられるPHPBrewは重宝しそうです。
メルマガ購読の申し込みはこちらから。