nmtysh.log

Tech系のネタや日々の独り言などを書いています。

phpenvのアップデートプラグインを作ってみた

macOS環境で複数のPHPバージョンを動かしたくなって、phpenvを使ってみることにしました。

(環境構築周りは別途、書きました)
nmtysh.hatenablog.com nmtysh.hatenablog.com nmtysh.hatenablog.com

以前からnodenvを使っていて、プラグインなどをまとめてアップデートできるnodenv-updateプラグインを利用しているのですが、phpenv用を見つけることができませんでした。
無ければ、作ってしまえということで、大元のrbenv-updateからフォークして作成しました。

github.com

最初は phpenv update として作ったのですが、うまく機能しないためデバッグ用のパラメーターをつけてコマンド( PHPENV_DEBUG=1 phpenv update )を実行してみると、php-buildプラグインが持っている自身のプラグイン更新のためのコマンドと衝突してしまい作成したプラグインのコマンドが実行されていませんでした。

$ PHPENV_DEBUG=1 phpenv update
+ [phpenv:33] '[' -z '' ']'
+ [phpenv:34] PHPENV_ROOT=/Users/user/.phpenv
+ [phpenv:38] export PHPENV_ROOT
+ [phpenv:40] '[' -z '' ']'
++ [phpenv:41] pwd
+ [phpenv:41] PHPENV_DIR=/Users/user
+ [phpenv:50] export PHPENV_DIR
+ [phpenv:53] shopt -s nullglob
++ [phpenv:55] abs_dirname /Users/user/.phpenv/bin/phpenv
+++ [phpenv:20] pwd
++ [phpenv:20] local cwd=/Users/user
++ [phpenv:21] local path=/Users/user/.phpenv/bin/phpenv
++ [phpenv:23] '[' -n /Users/user/.phpenv/bin/phpenv ']'
++ [phpenv:24] cd /Users/user/.phpenv/bin
++ [phpenv:25] local name=phpenv
+++ [phpenv:26] resolve_link phpenv
++++ [phpenv:16] type -p greadlink readlink
++++ [phpenv:16] head -1
+++ [phpenv:16] /usr/bin/readlink phpenv
++ [phpenv:26] path=../libexec/phpenv
++ [phpenv:23] '[' -n ../libexec/phpenv ']'
++ [phpenv:24] cd ../libexec
++ [phpenv:25] local name=phpenv
+++ [phpenv:26] resolve_link phpenv
++++ [phpenv:16] type -p greadlink readlink
++++ [phpenv:16] head -1
+++ [phpenv:16] /usr/bin/readlink phpenv
+++ [phpenv:26] true
++ [phpenv:26] path=
++ [phpenv:23] '[' -n '' ']'
++ [phpenv:29] pwd
++ [phpenv:30] cd /Users/user
+ [phpenv:55] bin_path=/Users/user/.phpenv/libexec
+ [phpenv:56] for plugin_bin in '"${PHPENV_ROOT}/plugins/"*/bin'
+ [phpenv:57] bin_path=/Users/user/.phpenv/libexec:/Users/user/.phpenv/plugins/php-build/bin
+ [phpenv:56] for plugin_bin in '"${PHPENV_ROOT}/plugins/"*/bin'
+ [phpenv:57] bin_path=/Users/user/.phpenv/libexec:/Users/user/.phpenv/plugins/php-build/bin:/Users/user/.phpenv/plugins/phpenv-aliases/bin
+ [phpenv:56] for plugin_bin in '"${PHPENV_ROOT}/plugins/"*/bin'
+ [phpenv:57] bin_path=/Users/user/.phpenv/libexec:/Users/user/.phpenv/plugins/php-build/bin:/Users/user/.phpenv/plugins/phpenv-aliases/bin:/Users/user/.phpenv/plugins/phpenv-update/bin
+ [phpenv:59] export PATH=/Users/user/.phpenv/libexec:/Users/user/.phpenv/plugins/php-build/bin:/Users/user/.phpenv/plugins/phpenv-aliases/bin:/Users/user/.phpenv/plugins/phpenv-update/bin:/Users/user/.phpenv/shims:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/user/.phpenv/bin:/usr/local/sbin
+ [phpenv:59] PATH=/Users/user/.phpenv/libexec:/Users/user/.phpenv/plugins/php-build/bin:/Users/user/.phpenv/plugins/phpenv-aliases/bin:/Users/user/.phpenv/plugins/phpenv-update/bin:/Users/user/.phpenv/shims:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/user/.phpenv/bin:/usr/local/sbin
+ [phpenv:61] hook_path=:/Users/user/.phpenv/phpenv.d:/usr/local/etc/phpenv.d:/etc/phpenv.d:/usr/lib/phpenv/hooks
+ [phpenv:62] for plugin_hook in '"${PHPENV_ROOT}/plugins/"*/etc/phpenv.d'
+ [phpenv:63] hook_path=:/Users/user/.phpenv/phpenv.d:/usr/local/etc/phpenv.d:/etc/phpenv.d:/usr/lib/phpenv/hooks:/Users/user/.phpenv/plugins/phpenv-aliases/etc/phpenv.d
+ [phpenv:62] for plugin_hook in '"${PHPENV_ROOT}/plugins/"*/etc/phpenv.d'
+ [phpenv:63] hook_path=:/Users/user/.phpenv/phpenv.d:/usr/local/etc/phpenv.d:/etc/phpenv.d:/usr/lib/phpenv/hooks:/Users/user/.phpenv/plugins/phpenv-aliases/etc/phpenv.d:/Users/user/.phpenv/plugins/phpenv-composer/etc/phpenv.d
+ [phpenv:65] export PHPENV_HOOK_PATH=:/Users/user/.phpenv/phpenv.d:/usr/local/etc/phpenv.d:/etc/phpenv.d:/usr/lib/phpenv/hooks:/Users/user/.phpenv/plugins/phpenv-aliases/etc/phpenv.d:/Users/user/.phpenv/plugins/phpenv-composer/etc/phpenv.d
+ [phpenv:65] PHPENV_HOOK_PATH=:/Users/user/.phpenv/phpenv.d:/usr/local/etc/phpenv.d:/etc/phpenv.d:/usr/lib/phpenv/hooks:/Users/user/.phpenv/plugins/phpenv-aliases/etc/phpenv.d:/Users/user/.phpenv/plugins/phpenv-composer/etc/phpenv.d
+ [phpenv:67] shopt -u nullglob
+ [phpenv:69] command=update
+ [phpenv:70] [[ '' = \-\-\h\e\l\p ]]
+ [phpenv:70] [[ '' = \-\h ]]
+ [phpenv:75] case "$command" in
++ [phpenv:83] command -v phpenv-update
+ [phpenv:83] command_path=/Users/user/.phpenv/plugins/php-build/bin/phpenv-update
+ [phpenv:84] '[' -z /Users/user/.phpenv/plugins/php-build/bin/phpenv-update ']'
+ [phpenv:89] shift 1
+ [phpenv:90] exec /Users/user/.phpenv/plugins/php-build/bin/phpenv-update
+ [phpenv-update:5] '[' -z /Users/user/.phpenv ']'
+++ [phpenv-update:9] dirname /Users/user/.phpenv/plugins/php-build/bin/phpenv-update
++ [phpenv-update:9] cd /Users/user/.phpenv/plugins/php-build/bin
++ [phpenv-update:9] pwd
+ [phpenv-update:9] script_dir=/Users/user/.phpenv/plugins/php-build/bin
+ [phpenv-update:10] cd /Users/user/.phpenv/plugins/php-build/bin/..
+ [phpenv-update:11] git pull
Already up to date.

回避方法がわからないので、作成したプラグインの名前をphpenv-update-allに変更して対応しました。

mkdir -p "$(phpenv root)/plugins"
git clone https://github.com/matayoshi/phpenv-update-all.git "$(phpenv root)/plugins/phpenv-update-all"

プラグインフォルダに git clone してインストールすると phpenv update-all コマンドが利用できるようになります。

$ phpenv update-all
Updating phpenv
Updating php-build
Updating phpenv-aliases
Updating phpenv-composer
Updating phpenv-update-all

自分用に作ったプラグインなので動作保証はしませんが、良ければどうぞ。

github.com