Check! anyenv を使って phpenv を使おう（Mac OS X 編）

こんにちは、オークファンの @dz_ こと大平かづみです。

Prologue - はじめに
===
仕事で使っている Mac OS X で、指定のPHPバージョンを利用するため、 `anyenv` で `phpenv` をインストールして使ってみることにしました。

anyenv とは？
----
[anyenv](https://github.com/riywo/anyenv "riywo/anyenv: all in one for **env") は、 `renv` （rubyのバージョン管理）、 `phpenv` （PHPのバージョン管理）などの `**env` を管理するためのツールです。同居させるのは手間だったりするらしく、便利そうです！

作業環境
====

- Max OS X El Capitan (10.11.4)
- [Homebrew](http://brew.sh/ "Homebrew — The missing package manager for OS X") ( `brew` ) インストール済み
- Xcode CLI インストール済み

インストール手順
====
`anyenv` のインストール
----
早速、`anyenv` を導入します。

基本的には、 [anyenv](https://github.com/riywo/anyenv "riywo/anyenv: all in one for **env") のインストール手順に従い、以下のコマンドを実行します。（ GitHub の手順では、 `.bash_profile` が `.your_profile` を記述されてるのでご留意ください。）

```bash
$ git clone https://github.com/riywo/anyenv ~/.anyenv
$ echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(anyenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l
```

`anyenv` を使って `phpenv` をインストール
----
次に、 `anyenv` で `phpenv` をインストールします。

```bash
# phpenv をインストール
$ anyenv install phpenv

# シェルを再読み込み
$ exec $SHELL -l
```

`phpenv` を使って php のバージョン指定してインストール
----
```bash
# インストール可能なPHPバージョンの列挙
$ phpenv install -l

# バージョンを指定して PHP インストール
$ phpenv install {バージョン}

# シェルを再読み込み
$ exec $SHELL -l

# インストールしたバージョンを確認
$ phpenv versions

# システム全体で使用する PHPバージョンを指定する
$ phpenv global {バージョン}
```

以上で、 php を任意のバージョンで利用することができました！

トラブルシューティング
====
ちなみに、途中で以下のトラブルに引っかかったので、対処法を残しておきます。

`libmcrypt` がなくエラーの場合
----

### エラー内容
```bash
$ phpenv install 5.6.9

[Info]: Loaded extension plugin
[Info]: Loaded apc Plugin.
[Info]: Loaded composer Plugin.
[Info]: Loaded github Plugin.
[Info]: Loaded uprofiler Plugin.
[Info]: Loaded xdebug Plugin.
[Info]: Loaded xhprof Plugin.
[Info]: php.ini-production gets used as php.ini
[Info]: Building 5.6.9 into ~/.anyenv/envs/phpenv/versions/5.6.9
[Downloading]: https://secure.php.net/distributions/php-5.6.9.tar.bz2
[Preparing]: /var/tmp/php-build/source/5.6.9

-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
configure: WARNING: This bison version is not supported for regeneration of the Zend/PHP parsers (found: 2.3, min: 204, excluded: 3.0).
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
configure: error: mcrypt.h not found. Please reinstall libmcrypt.
-----------------------------------------

The full Log is available at '/tmp/php-build.5.6.9.20160420144448.log'.
[Warn]: Aborting build.
```

### 対処
`libmcrypt` がなかったためなので、インストールしました。

```bash
$ brew install libmcrypt
```

`openssl` がなくエラーの場合
----
### エラー内容
```bash
$ phpenv install 5.6.9

[Info]: Loaded extension plugin
[Info]: Loaded apc Plugin.
[Info]: Loaded composer Plugin.
[Info]: Loaded github Plugin.
[Info]: Loaded uprofiler Plugin.
[Info]: Loaded xdebug Plugin.
[Info]: Loaded xhprof Plugin.
[Info]: php.ini-production gets used as php.ini
[Info]: Building 5.6.9 into ~/.anyenv/envs/phpenv/versions/5.6.9
[Skipping]: Already downloaded and extracted https://secure.php.net/distributions/php-5.6.9.tar.bz2
[Preparing]: /var/tmp/php-build/source/5.6.9
[Compiling]: /var/tmp/php-build/source/5.6.9

-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
                                                         ^
/var/tmp/php-build/source/5.6.9/ext/libxml/libxml.c:493:22: warning: assigning to 'char *' from 'xmlChar *' (aka 'unsigned char *') converts between pointers to integer types with different sign [-Wpointer-sign]
                error_copy.message = xmlStrdup(msg);
                                   ^ ~~~~~~~~~~~~~~
2 warnings generated.
/var/tmp/php-build/source/5.6.9/ext/openssl/openssl.c:44:10: fatal error: 'openssl/evp.h' file not found
#include <openssl/evp.h>
         ^
1 error generated.
make: *** [ext/openssl/openssl.lo] Error 1
-----------------------------------------

The full Log is available at '/tmp/php-build.5.6.9.20160420144812.log'.
[Warn]: Aborting build.
```

### 対処
OpenSSL は Mac OS X に標準でインストールされていますが、 brew から参照できなかったためにこのエラーが発生したようです。以下のように、 `brew` からリンクすることで対処できました。

```bash
$ brew link openssl --force
```

Epilogue - おわりに
====
当初、 `brew` で `phpenv` をインストールしようとして、思った以上に手間取り苦戦してたところ、 `anyenv` に出会って事なきを得ました。快適になりました！