M1 mac 環境に phpenv + php 7.4.30 + composer をインストールする
他の *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/bin に grep という 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 でプロジェクトの依存関係をインストールできるはず.