nmtysh.log

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

そろそろ開発環境を見直す時期なのかも

Apple Silicon環境も出回ってきていて、開発者やそれ以外のメンバーのローカルの開発環境を見直す時期なのかもしれない。
Vagrant + VirtualBoxApple Siliconでは使えないし……

Vagrant環境でhostsファイルの更新用に利用していたプラグインを調べてみたら、サポートが終わっている or 長期間更新されていない状態だった。
環境の見直しが必要そう。

マルチリポジトリ構成だったり、同時に複数の案件環境を起動させていたりするから、その辺がDockerだと辛いんだよなぁ……
どうやって構成しようかな……

macOSにphpenvでPHP 8.1をインストールする

複数バージョンのPHPをインストールしてみたかったので、phpenvを使ってPHPをインストールしました。
依存パッケージのインストールが必要だったので備忘録としてまとめます。

環境

  • macOS Monterey 12.1
  • zsh(Z shell)
  • Homebrew
続きを読む

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