プロジェクトの環境構築にあたりphp7.1が必要ということで、
Homebrewにてphp7.3と共存環境構築した際のメモ。
いや本当に、ダウングレードって骨が折れる、と思い知ったので
(なるべくならアップデートだけをしていけると平和ですよね)、
同じことで心と時間を消耗する方が1人でも減るように記録を残します。
エラー内容が
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylib
の方向けの記事になります!
環境
- macOS Catalina
- php 7.3(デフォルト)
- zsh
php@7.1を入れる
Homebrewインストール
Homebrewをインストールします。
(Homebrewインストールについてはたくさん記事あるので割愛します)
インストールができたら、念の為ドクターコマンドをかけると安心感あります。
ピカピカのmacであれば問題ないでしょう。
不要ファイルや問題がある場合は解決策を示してくれます。
% brew doctor
phpのパッケージを探す
% brew search php@7
==> Formulae
php@7.2 php@7.3 php@7.4
はい、出てきません。
サポート終わるので、生きてるリポジトリから消されております。
いなくなった@7.1を探しにいきます。
墓場(安眠)と接続する
deprecatedされたphp7.1はこちらにいます。
「Installation」に記載の通り、下記を実行します。
brew tap exolnet/homebrew-deprecated
すると、/usr/local/Homebrew/Library/Taps
以下に、exolnet
というディレクトリができます。
※brew tap
で、deprecatedリポジトリをクローンしてきているだけですので、もし「古いのはいらないぜ!」ってなった場合は、このフォルダをまるっと削除すれば墓場との接続は解除されます。
ではもう一度試してみましょう。
% brew search php@7
==> Formulae
brew-php-switcher php@7.2
exolnet/deprecated/php@5.6 php@7.3
exolnet/deprecated/php@7.0 phplint
exolnet/deprecated/php@7.1 phpmd
出ました。インストールします。
% brew install exolnet/deprecated/php@7.1
インストールが終わると、ご丁寧にパスを通してね、との旨のアナウンスが出るので、従います。
If you need to have php@7.1 first in your PATH run:
echo 'export PATH="/usr/local/opt/php@7.1/bin:$PATH"' >> ~/.zshrc
echo 'export PATH="/usr/local/opt/php@7.1/sbin:$PATH"' >> ~/.zshrc
こちらを実行すると、/Users/{ユーザー名}/.zshrc
に
export PATH="/usr/local/opt/php@7.1/bin:$PATH"
export PATH="/usr/local/opt/php@7.1/sbin:$PATH"
と出力されて、 php
コマンドをたたいたときに、Homebrewのphp@7.1をむいてくれるようになります。
php7.1を動かす(せない)
さあ、では別のターミナルを開いて、いざ実行!
% php -v
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylib
Referenced from: /usr/local/opt/php@7.1/bin/php
Reason: image not found
zsh: abort php -v
ん。
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylib
こちらでググったところ、「icu4c(というライブラリ)のv64がないよ」と言われて起動しません。
確認します。
% brew list --versions icu4c
icu4c 67.1
たしかにないです。はいっているのは67.1です。
先程のphp@7.1インストール時、このicu4cが必要なのでDLがはしってるんですが、
ログをよく見ると、同様のワーニングが出てこけいます。
そう、これまた最新のicu4cでは配布版が67になっちゃっているので、動きません・・!(涙)
[余談]下記、ダメだったやつ
パッケージアップデート説
「brew reinstall [パッケージ名]
でいけたよ!」
「brew upgrade
でいけたよ!」
⇒色々あるんですが、Homebrewはいれたてピカピカでしたのでボツ。
オプションつける説
「brew reinstall --build-from-source php@7.1
でいけたよ!」
⇒icu4c 64エラーで怒られた。ボツ。
https://github.com/eXolnet/homebrew-deprecated/issues/27#issuecomment-696179914
ロウ(生)データアクセス説
「brew reinstall https://raw.githubusercontent.com/Homebrew/homebrew-core/a806a621ed3722fb580a58000fb274a2f2d86a6d/Formula/icu4c.rb
で64.2おとせるよ!」
⇒生データは落とさないでと怒られた。ボツ。
Error: Calling Installation of XXX from a GitHub commit URL is disabled! Use 'brew extract XXX' to stable tap on GitHub instead.
php7.1を動かす(くようにする)
おそらく私と同様の手順は試し尽くして、世界で同様に悩んでいる女性が見つけた答えが。
(Your 2days saves me 💐 と言いたい)
なに、git使ってゴニョゴニョする・・だと・・?
さらに調べてみると、より詳しく手順を載せてくれている方が。
https://gist.github.com/sawant/6ea10e45de7d09e966a1dc6afea3bffb
時を戻そう。 ←
手順詳細
① ターミナルを新規で開く。
② Homebrewのgitディレクトリに移動する。
% cd $(brew --prefix)/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
③ git log
で、icu4c.rb関連のログを確認。わさわさと出てくるので、自分が戻りたいバージョンのコミットidを確認。
% git log --follow icu4c.rb
commit c179a064276d698d66953898ff9e02d6e0664b2a
Author: BrewTestBot <brew-test-bot@googlegroups.com>
Date: Wed Aug 15 21:51:09 2018 +0000
icu4c: update 62.1 bottle.
commit 2235a91cedb2038a7c721796b48e63836c792607
Author: ilovezfs <ilovezfs@icloud.com>
Date: Tue Jul 24 09:44:31 2018 +0200
icu4c: remove head spec (#30427)
④該当のコミットid時点のブランチから、新規チェックアウトして、ブランチを移動。
git checkout -b [お好きなブランチ名] [該当のコミットid]
% git checkout -b icu4c-64.2 6d9815xxxxxxxxxxxxxx
Switched to a new branch 'icu4c-64.2'
git branch
で今いるブランチ確認できます。
% git branch
* icu4c-64.2
master
⑤icu4c.rbを再インストール
% brew reinstall ./icu4c.rb
インストールが開始されます。問題なくいけたら、
⑥もともと開いていたターミナルの画面(あるいは新規ターミナル開く)で、icu4cのバージョンを確認
brew list --versions icu4c
icu4c 64.2
下がった🙌
ということで、新規ターミナルを開いて、php -v
実行すると。
% php -v
PHP 7.1.33 (cli) (built: Dec 19 2019 11:01:14) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
動いた!🎉
※動かない方は、Homebrewのphpが動作してない可能性があるので、
brew services start php@7.1
など実行してみてください。
使うのを止めたいときは、brew services stop php@7.1
で止められます。
https://ocws.jp/blog/i-raised-my-macs-php-version-to-7-3/
最新の状態に戻る
もし一時的に下げたいということでしたら、7.1で行いたい作業が完了したら、7.3に戻したいですよね。
そのときの手順も念の為書いておきます。
①新規ターミナルを開く
②Homebrewのgitディレクトリへ移動、ブランチ確認
% cd $(brew --prefix)/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
% git branch
* icu4c-64.2
master
チェックアウトしたブランチ(過去)にいるはずなので、
③マスターに戻る、(そしてブランチ再確認)
% git checkout master
% git branch
icu4c-64.2
* master
ブランチ確認すると、masterブランチに戻っています。
この状態で逆にicu4cが古くてphp7.3が動かないよ!とかなった場合は、
新規ターミナル開いて、
% brew reinstall ./icu4c.rb
ってしてあげれば最新のicu4cがインストールされます。
% brew list --versions icu4c
icu4c 67.1
おわりに
- 私はめぐりめぐってHomebrewのインストールからやり直した民なので、どなたかの救いになればこれ幸い
- ターミナルはバンバン新規で開くのがよろし
- ありがとう世界の開発者たち(の知見)
以上です!