こんにちは!ドイです。
今回は、homebrewをアップデートしたところ、PHPが実行できなくなったので、解決していきます。
現象
PhpStormで、PHP_CodeSnifferが実行できなくなりました。
上部メニューから、PhpStorm > settings > PHP > 品質ツール > PHP_CodeSnifferまで進み「…」をクリックします。
モーダルが表示されるので、「検証」ボタンをクリックすると「Can not run PHP Code CodeSniffer」とエラーが表示されました。
確かに、PHP_CodeSnifferが動いていないようです。
再度上部メニューから、PhpStorm > settings > PHP > Composerまで進み、「エディターで開く」をクリックします。
composer.jsonが開かれるので、右上にある「更新」ボタンをクリックしたところ、下記のエラーが表示されました。
エラー内容
phpcs: dyld[1987]: Library not loaded: /usr/local/opt/icu4c/lib/ Referenced from: <7B63F142-9B23-30AF-A072-888CEB24F99E> /usr/local/Cellar/php@7.4/7.4.33/bin/php Reason: tried: '/usr/local/opt/icu4c/lib/libicuio.71.dylib' (no such file)
ターミナルを開いて、cdコマンドで /usr/local/opt/icu4c/lib/に移動します。
lsコマンドで、「no such file」と言われているファイルが存在しないか確認します。
libicuio.71.dylibは存在しておらず、代わりにlibicuio.74dylibがありました。
他のファイルも同様でした。homebrewをアップデートしたことで、icu4cが74.2に上がってしまったようです。
依存しているライブラリがないことにはどうにもならないので、
brewでicu4cの71を入れ直して、シンボリックリンクを貼っていきたいと思います。
icu4cの71をインストールしたいのですが、brewは最新版しか保持できません。 tapコマンドで、最新版でない(今回の場合icu4c 71)バージョンを落としてきて、tapからインストールしていきます。
手順①:tap用のリポジトリを作成する
brew tap-new {icu47}/taps
{icu47}となっている箇所は、任意の名前でOKです。
下記の手順で{icu47}と書いている箇所は、同様に任意の名前なので、ここで指定した名前を当てはめてください。
手順②: tapにインストールしたいバージョンを展開する
brew extract icu4c {icu47}/taps --version 71
手順③: tapからインストールする
brew install {icu47}/taps/icu4c@71
ターミナルを開いて、cdコマンドで/usr/local/opt/icu4cに移動すると、同階層にicu4c@71があるかと思います。
これでicu4cの71がインストールできました。
手順④: シンボリックリンクを貼る
ライブラリが依存しているバージョンをインストールできたので、シンボリックリンクを貼ります。
今回は/usr/local/opt/icu4c/lib/にlibicuio.71.dylibがないと怒られているので、
/usr/local/opt/icu4c/lib/の下に、libicuio.71.dylibを作成して、実際にlibicuio.71.dylibがあるパスを指定します。
ターミナルで、cdコマンドで/usr/local/opt/icu4c/libに移動します。
シンボリックリンクを貼るには、ln -s [見にいきたいファイルのパス] [リンク元のパス]なので
ln -s /usr/local/opt/icu4c@71/lib/libicuio.71.dylib libicuio.71.dylib ln -s /usr/local/opt/icu4c@71/lib/libicui18n.71.dylib libicui18n.71.dylib ln -s /usr/local/opt/icu4c@71/lib/libicuuc.71.dylib libicuuc.71.dylib ln -s /usr/local/opt/icu4c@71/lib/libicudata.71.dylib libicudata.71.dylib
シンボリックリンクが貼られたか確認するには、ls -lを叩きます。
このようになっているかと思います。
libicuio.71.dylib -> /usr/local/opt/icu4c@71/lib/libicuio.71.dylib
PHP_CodeSnifferが実行されるか確認するために、上部メニューから、PhpStorm > settings > PHP > 品質ツール > PHP_CodeSnifferまで進み「…」をクリックします。
「検証」ボタンをクリックすると「OK, PHP_CodeSniffer version 3.5.8」と表示されました。
PHP_CodeSnifferが動くことを確認できました!
まとめ
解決方法は
手順①:tap用のリポジトリを作成する
手順②: tapにインストールしたいバージョンを展開する
手順③: tapからインストールする
手順④: シンボリックリンクを貼る
のように単純なのですが、合間合間に関係のないエラーが何回かあったので、スムーズにいきませんでした。
おそらくこの記事に辿り着いた方も同様にスムーズにいかないかもしれませんが、エラーメッセージを読めば何をすればいいのか書いてあるので、根気よくいきましょう。