他の *env 系と比べてだいぶインストール作業が難航したのでメモ. (環境は macOS 12.3 の M1 mac)

phpenv 自体のインストール

phpenv 自体のインストールはそれほど複雑ではない. 概ね、他の env 系のツールと似たような操作でインストールできる.

# git clone することで ~/.phpenv にインストール.
$ git clone [email protected]:phpenv/phpenv.git ~/.phpenv

続いて、 ~/.zshrc を編集して phpenv のパスを通した上で初期化スクリプトを実行するようにする.

# phpenv
$ export PATH="$HOME/.phpenv/bin:$PATH"
$ eval "$(phpenv init -)"

シェルに設定を再読み込みする.

$ exec $SHELL -l

このままだと phpenv コマンド自体は使えるが phpenv install が使えないため、 php-build をプラグインとして phpenv にインストールする必要がある.

$ git clone https://github.com/php-build/php-build $(phpenv root)/plugins/php-build

これで phpenv が動くようになった.

$ phpenv --version
phpenv v0.9.0-rc.1

phpenv install 7.4.30

続けて phpenv を用いて実際に php をインストールしていく. ここからが本題である. 今回は php 7.4.30 のインストールを行う.

インストールのコマンド自体は phpenv install 7.4.30 であるが、事前に依存関係やパスの指定を済ませておかないとエラーが発生してしまう.

まず、 phpenv install は内部で grep コマンドに -P オプションを渡すようで、 macOS 環境のデフォルトの grep (BSD grep) はインストール中に以下のようなエラーを発生させてしまう. (https://qiita.com/bellx2/items/c03f3149fdf2dfb9d9a6)

grep: invalid option -- P

このエラーを回避するため、まずは brew install grep で macOS 環境に GNU grep をインストールし、 デフォルトの /usr/bin/grep よりも PATH の優先度の高いディレクトリ に ggrep への symlink を grep という名前で生成しておこう. ここでは /opt/homebrew/bingrep という symlink を作成する.

$ brew install grep
$ ln -s /opt/homebrew/bin/ggrep /opt/homebrew/bin/grep

phpenv install については様々な人が詰まるポイントのようで、検索してみると様々な報告が見つかる. いろいろな報告を参考に試行錯誤したところ、自分の環境では以下のコマンドでインストールできた.

# 依存関係のインストール
brew install curl zlib bzip2 libpng libjpeg libiconv icu4c libedit [email protected] tidy-html5 libzip autoconf pcre2

# php 7.4.30 のインストール
PHP_BUILD_CONFIGURE_OPTS="--with-bz2=$(brew --prefix bzip2) --with-iconv=$(brew --prefix libiconv) --with-tidy=$(brew --prefix tidy-html5) --with-external-pcre=$(brew --prefix pcre2)" PKG_CONFIG_PATH="$(brew --prefix icu4c)/lib/pkgconfig:$(brew --prefix [email protected])/lib/pkgconfig:$(brew --prefix tidy-html5)/lib/pkgconfig" phpenv install 7.4.30

なお、 Apple Silicon mac 特有の問題として、Apple Silicon mac では PCRE で JIT が有効にできないらしく、JIT を無効にするようにスイッチを指定しないと

PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be enabled.

というエラーが発生する. したがって Apple Silicon mac 環境では

--with-external-pcre=$(brew --prefix pcre2)

というオプションの指定は必須であるようだ.

ひとまず、これで php 7.4.30 がインストールできた.

$ phpenv versions
  7.4.30

composer のインストール

最後に composer をインストールする. phpenv-composer という phpenv の拡張を使うことで簡単に composer のインストールができるようだ. (https://otaqq.com/uncategorized/post-59/2019/04/16/)

$ git clone https://github.com/ngyuki/phpenv-composer.git ~/.phpenv/plugins/phpenv-composer
$ phpenv rehash

これだけで composer のインストールは完了する.

Download composer.phar ...
Move composer.phar to /Users/annpin/.phpenv/versions/7.4.30/composer

後は composer install でプロジェクトの依存関係をインストールできるはず.