Help us understand the problem. What is going on with this article?

phpenv/php-build の小ネタ集

はじめに

この記事は、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_ENABLEoff にすればOKです。

先程は、開発用に build するならば、 -i 引数を使ったほうがいいという説明をしましたが、本番用に使うならば、 -i 引数なしで PHP_BUILD_XDEBUG_ENABLE=off にするのがいいと思います。

PECL で配布されている拡張を同時に入れる

こちらは、「phpenv/php-build で拡張がすこし入れやすくなりました」に以前書いたように PHP_BUILD_INSTALL_EXTENSION を使うと同時に入れることができます。

前回の記事ではきちんと説明してなかったですが、これは php-build の環境変数ということになります。

configure オプションを変更する

php-build では、次のような流れで configure オプションを組み立てています

  1. php-build/share/php-build/default_configure_options でベースとなるオプションを定義
  2. php-bulid/share/php-build/definitions/<指定されたバージョン> 内で追加定義されているオプションがあればそれも追加
  3. 環境変数 PHP_BUILD_CONFIGURE_OPTS を追加
  4. 環境変数 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 のセクションでは homebrewphpbrew を使った PHP のインストール方法のみを説明して、 phpenv/php-build の説明を端折ったので、その補足というのも兼ねての記事でした。

phpenv/php-build は初心者の方にはおすすめしにくいものではあるんですが、私もちょこちょこコントリビュートしていってるソフトウェアなので、いい感じに使っていければいいなと思っています。

kunit
2018年末に福岡に移住して、ロリポップ!、ヘテムル、ムームードメインといったサービスに携わっています とはいえまだまだ修行中...
https://kunit.jp/
pepabo
「いるだけで成長できる環境」を標榜し、エンジニアが楽しく開発できるWebサービス企業を目指しています。
https://pepabo.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした