はじめに
この記事は、PHP Advent Calender 2019 の15日目の記事です。
少し前に phpenv/php-build で拡張がすこし入れやすくなりました という記事を書いたんですが、それに引き続き、phpenv/php-build のちょっとした使い方を紹介したいと思います。
phpenv をいれるならば、anyenv 経由がおすすめ
phpenv の github のページ を参考に phpenv
および php-build
を入れて使うことももちろんできるのですが、 anyenv を使ってインストールすることをおすすめします。
最初は phpenv
だけ使っていたが、途中から rbenv
も使う必要が出たというときに、この2つを共存させようとすると結構めんどくさいので、最初から anyenv
を使っておくのがいいかと思います。
phpenv でインストールする際に動作モードを切り替える
phpenv install <version>
でインストールすると、デフォルトでは本番(production)モードでインストールされます。
phpenv install --ini|-i <environment> <version>
というように --ini
もしくは -i
引数で、 本番(production)モード もしくは 開発(development)モードのどちらでインストールするかが選択できるようになっています。
動作モードで何が違ってくるかというと、インストールされる php.ini
の内容が違ってきます。
PHP をソースから build したことがある方にはおなじみなのですが、PHPのソースには次の2つの php.ini
の雛形が用意されており、それのどちらを利用するか?ということを選択するということになります。
- php.ini-production
- 本番で使うことを想定された設定
- display_errors が Off になっていたり、 error_reporting で STRICT/DEPRECATED のエラーが抑制されていたりする
- php.ini-development
- 開発で使うことが想定された設定
- display_errors は On になっており、error_reporting はすべてエラーを出力するモードになっている
ローカル環境等で開発用に使う場合には、 phpenv install -i development 7.4.0
のように、開発モードでインストールしておいたほうがいいと思います。
build 方法を変更するには php-build の環境変数を使う
phpenv
の -i
引数を紹介しましたが、それ以外に引数からいろいろとカスタマイズする方法は提供されておらず、build 時の設定をあれこれカスタマイズするには実際の処理を担当している php-build
が提供している環境変数を利用することになります。
どのような環境変数が提供されているかの説明が php-build
の README.md には説明がないので、そのあたりをいくつか紹介してみたいと思います。(php-build/php-build/man には書いてありますのでそちらもご確認ください)
Xdebug を含めないようにする
phpenv
ではデフォルトで Xdebug ありで build されます。それを抑制するには環境変数 PHP_BUILD_XDEBUG_ENABLE
を off
にすればOKです。
先程は、開発用に build するならば、 -i
引数を使ったほうがいいという説明をしましたが、本番用に使うならば、 -i
引数なしで PHP_BUILD_XDEBUG_ENABLE=off
にするのがいいと思います。
PECL で配布されている拡張を同時に入れる
こちらは、「phpenv/php-build で拡張がすこし入れやすくなりました」に以前書いたように PHP_BUILD_INSTALL_EXTENSION
を使うと同時に入れることができます。
前回の記事ではきちんと説明してなかったですが、これは php-build
の環境変数ということになります。
configure オプションを変更する
php-build
では、次のような流れで configure オプションを組み立てています
-
php-build/share/php-build/default_configure_options
でベースとなるオプションを定義 -
php-bulid/share/php-build/definitions/<指定されたバージョン>
内で追加定義されているオプションがあればそれも追加 - 環境変数
PHP_BUILD_CONFIGURE_OPTS
を追加 - 環境変数
CONFIGURE_OPTS
の内容を更に追加
上記のような流れになっているので、 php-build
で設定されている configure オプションをカスタマイズしたい場合には、 PHP_BUILD_CONFIGURE_OPTS
で追加定義するのがいいと思います。
このあたりは、以前 @hnw さんが「php-buildでpeclコマンドをインストールする」という記事で紹介されています。
PHP の build をどのようにするのかをしらないとコントロールできないのが少々つらいという方は、 phpbrew を使ったほうがいいかもしれません。
早速 7.4.0 を build してみたい!
PHP 7.4 では configure オプションが結構変更されているために、対応に少々時間がかかりましたが、現状の phpenv/php-build で 7.4.0 も build できるようになりました。
ただし、今まで 7.3.x までを phpenv/php-build で build されてきた方でも今までと違った設定を追加する必要があるので注意です。
1. homebrew を使って以下のパッケージをインストール
brew install oniguruma krb5 openssl@1.1 icu4c libedit
この中で oniguruma
は PHP 7.3 まではバンドルされていたのがされなくなったために必要となりました。
2. PKG_CONFIG_PATH 環境変数を定義
export PKG_CONFIG_PATH="$(brew --prefix krb5)/lib/pkgconfig:$(brew --prefix openssl@1.1)/lib/pkgconfig:$(brew --prefix icu4c)/lib/pkgconfig:$(brew --prefix libedit)/lib/pkgconfig"
PHP 7.4 から pkg-config
を利用するようになったため、この環境変数を設定することになりました。
3. phpenv で 7.4.0 をインストール
ここまで準備すれば、次のコマンドでインストールできるはず!
phpenv install -i development 7.4.0
最後に
つい最近、 「みんなのPHP」という本の第1章で PHP の環境構築周りのことを書いたんですが、その記事の macOS のセクションでは homebrew
と phpbrew
を使った PHP のインストール方法のみを説明して、 phpenv/php-build の説明を端折ったので、その補足というのも兼ねての記事でした。
phpenv/php-build は初心者の方にはおすすめしにくいものではあるんですが、私もちょこちょこコントリビュートしていってるソフトウェアなので、いい感じに使っていければいいなと思っています。