背景
php artisan list
など php のコマンドが実行できなくなった。
php -v
すら動作しない。
$ php -v
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.66.dylib
Reason: image not found
調査
かるく調べてみたところ、 brew yarn install
(あまり自信がないがたぶんこれが原因)により、 icu4c
がバージョンアップされてしまい、依存関係が崩れてしまったためのようだ。
$ brew info icu4c
icu4c: stable 67.1 (bottled) [keg-only]
どうやら、エラーから察するにこれをv66系にダウングレードする必要がありそう。
ちなみに、phpは phpenv
でコントロールしていて、 php7.2.24
で稼働しているのだが、 新しめのバージョン(php7.3.11)
の場合は依存関係がクリアであるため問題なく動作する。
$ php -v
PHP 7.3.11 (cli) (built: Feb 29 2020 02:50:36) ( NTS )
(今回はphpとの依存関係で発生しているが、他のものとの依存関係は発生すると思うので、どちらかをアップグレード、またはダウングレードして合わせる必要がある。今回はダウングレードを選択した。)
解決策
で、過去のバージョンに切り替えるのだが、過去のバージョンがCellerに残っているとき以下に各バージョンが出てくる。
$ brew info icu4c
icu4c: stable 67.1 (bottled) [keg-only]
C/C++ and Java libraries for Unicode and globalization
http://site.icu-project.org/home
/usr/local/Cellar/icu4c/67.1 (258 files, 71.2MB)
Poured from bottle on 2020-07-08 at 12:10:46
(ここにずらっとバージョンがならぶ)
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/icu4c.rb
その場合、 brew switch icu4c 66.1
みたいな感じで切り替えが可能だが今回はないので、過去コミットから取得してくる必要がある
// Formula へ移動
cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
// コミットを確認ん
$ git log --oneline icu4c.rb
88b9cc7898 icu4c: update 67.1 bottle.
e7d9d76421 icu4c 67.1
22fb699a41 icu4c: update 66.1 bottle. <-ここに戻したい
c78114de12 icu4c 66.1
a806a621ed icu4c: update homepage and url (#44812)
896d1018c7 icu4c: update 64.2 bottle.
// 戻したいバージョンにアップデート
// これで古いバージョンをインストールする状態になった
$ git checkout 22fb699a41 icu4c.rb
Updated 1 path from f3a60216be
// reinstall
$ brew reinstall icu4c
// バージョンの再確認
$ brew info icu4c
icu4c: stable 66.1 (bottled) [keg-only]
ダウングレードができたので、もう一度 php -v
を試してみます。
$ php -v (git)-[feature/add_official_account_report]
PHP 7.2.24 (cli) (built: May 3 2020 10:40:39) ( NTS )
無事動きましたとさ
参考文献
- brewの用語やコマンドはこちら Homebrew使い方まとめ
- brewのダウングレードはこちら Homebrewで過去バージョンにダウングレードする2つの方法