やりたいこと
- Macで
- 簡単なインストールで
- php8.1とphp8.2をインストールし
- php8.1なプロジェクトにcdしたらphp8.1を使いたい
- php8.2なプロジェクトにcdしたらphp8.2を使いたい
mise
- https://github.com/jdx/mise
- The front-end to your dev env.
- mise (pronounced "meez")
- mise was formerly called rtx.
asdfとの比較
- asdfはランタイムを呼び出すときにオーバーヘッド(~120ms)かかるが、miseはプロンプトがロードされるときに少量のオーバーヘッド(~5ms)を追加する。
- 参考
Uninstall old phps
- brewでインストールしたphpがあるなら削除しておく
brew remove php@8.2 php@8.1 php@8.0 php@7.4 php
Dependencies
- miseとphpの依存をインストールする
- asdf-phpのreadmeに書いてあるとおりですが、ここに依存パッケージが書いてあります。
# Install packages
brew install autoconf automake bison freetype gd gettext icu4c krb5 libedit libiconv libjpeg libpng libxml2 libzip openssl@1.1 pkg-config re2c zlib
# Install conflicting packages
brew install openssl@3
Install, Setup mise
- miseをインストールして設定する(zshの場合)
# Install
curl https://mise.jdx.dev/install.sh | sh
# zsh
echo "eval \"\$(~/.local/bin/mise activate zsh)\"" >> ~/.zshrc
echo 'export PATH="$HOME/.local/share/mise/shims:$PATH"' >> ~/.zprofile
source ~/.zshrc
Install asdf-php
- miseではasdf-phpというコミュニティpluginを使ってphpをインストールするため。
mise plugin install php https://github.com/asdf-community/asdf-php
List phps
- miseを使ってインストール可能なphpを表示する
- RCがlatestになるようです
# 全表示
mise ls-remote php
# 8.1系を表示
mise ls-remote php@8.1
# 8.2系を表示
mise ls-remote php@8.2
# 8.2系のlatestを表示
mise latest php@8.2
Install phps
- miseをつかってphpをインストールする
mise install php@8.1.27
mise install php@8.2.15
Set php version
- 各プロジェクトにバージョン指定ファイルを作る
- このファイルがあることでこのdirにcdしたとき、phpのバージョンが変わります
- ドキュメント
echo "[tools]\nphp = '8.2'" > ~/your/php82/project/.mise.toml
echo "[tools]\nphp = '8.1'" > ~/your/php82/project/.mise.toml
Tests
- 実害はないけど、mise use後に1秒くらい待たないとバージョンが切り替わらないような気がする
mkdir -p /tmp/php81 /tmp/php82
# Global phpのテスト
cd /tmp
mise use --global php@8.2
php -v
# php81のテスト
cd /tmp/php81
mise use php@8.1
php -v
# php82のテスト
cd /tmp/php82
mise use php@8.2
php -v
Install php extentions
- phpバージョンごとにpeclコマンドがあるのでそれぞれのバージョンでpecl installする
mkdir -p /tmp/php81 /tmp/php82
# php81
cd /tmp/php81
mise use php@8.1
pecl install igbinary
pecl install imagick
pecl install xdebug
pecl install redis
pecl install apcu
# 自分のphp81プロジェクトに必要なextををインストールしてください
# php82
cd /tmp/php82
mise use php@8.2
pecl install igbinary
pecl install imagick
pecl install xdebug
pecl install redis
pecl install apcu
# 自分php82のプロジェクトに必要なextををインストールしてください
php.ini
- php8.1の例。例です例
$(cat << 'EOF' > $(mise where php@8.1)/conf.d/php.ini
# add system-wide php configuration options here
extension=redis.so
extension=apcu.so
extension=ddtrace.so
extension=igbinary.so
extension=imagick.so
zend_extension=opcache.so
date.timezone=Asia/Tokyo
upload_max_filesize=200M
post_max_size=200M
opcache.preload=
opcache.preload_user=
opcache.validate_timestamps=1
opcache.file_update_protection=2
EOF
)
- php8.2の例。例です例
$(cat << 'EOF' > $(mise where php@8.2)/conf.d/php.ini
# add system-wide php configuration options here
extension=redis.so
extension=apcu.so
extension=ddtrace.so
extension=igbinary.so
extension=imagick.so
zend_extension=opcache.so
date.timezone=Asia/Tokyo
upload_max_filesize=200M
post_max_size=200M
opcache.preload=
opcache.preload_user=
opcache.validate_timestamps=1
opcache.file_update_protection=2
EOF
)
ほか
# php full pathを知りたいとき
mise where php@8.1
mise where php@8.2
# アップグレードしたいとき
mise upgrade php@8.1
mise upgrade php@8.2
# shim phpを使いたいとき
~/.local/share/mise/shims/php --version
# インストール済みのphpバージョンを表示する
mise ls php
# phpをアンインストールする
mise uninstall php@8.1.27RC1
mise uninstall php@8.2.16RC1
# キャッシュクリア
mise cache clear