調査の背景
現在、Laravelで開発を行なっており、マイグレーションを実行した際に
Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.3.29-to-be-removed-in-future-macOS.
上記エラーが発生し、PHPのバージョンを7.3.29→8.1.11にアップデートしました。
brew install php@8.1 && brew link --force php@8.1
アップデートが完了すると、
php -v
WARNING: PHP is not recommended
PHP is included in macOS for compatibility with legacy software.
Future versions of macOS will not include PHP.
PHP 7.3.29-to-be-removed-in-future-macOS (cli) (built: Sep 6 2021 05:14:39) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.29, Copyright (c) 1998-2018 Zend Technologies
バージョンが元の”7.3.29”のままになっており、バージョンアップされていない。
調査結果、PATHを通していないことが原因と判明
「PATHを通すとはなんぞや?」という疑問から、本記事を執筆するに至りました。
参考記事↓
【完全解説】Macで「PATHを通す」をちゃんと理解する【初学者必読】
「PATH」は環境変数のこと
環境変数はOS上で動くプロセスを指す。
→これだけだと意味不明なので、参考記事の例を引用します。
例えば「AGE」という変数(箱)に「20」という値を入れた「AGE=20」の環境変数を作ってみます.
Terminalを開いて(本ブログではiTerm2を推奨),以下のコマンドを実行してみてください.
**$ export AGE=20**
これで $AGE という環境変数を作れました.(環境変数において, $ は変数を表す記号
確認してみるには $echo コマンドを使います.
**12echo $AGE20**
ちゃんと「20」が出力されているのがわかります。
上記のわかりやすい説明を踏まえて、さらに深ぼっていきます。
環境変数を永続化?
先程の変数「AGE」の例の場合、新たにシェルを開いて「AGE」を実行すると表示されません。
じゃあどうするのかというと、
結論:「シェルの起動時に読み込まれる設定ファイルで環境変数を定義する」
これにより、定義した環境変数が永続化しているように「見える」ような設定ができます。
わざわざ「見える」という言い回しをしたのは、環境変数はプロセスの終了と共に破棄される性質があるためです。そのため、純粋に永続化するのではなく、シェルを起動するたびに自動で環境変数を定義するというイメージです。
具体的な設定方法がいくつかあるようです。
Bashというシェルなら
- ~/ .bash_profile
- ~/ .bashrc
zshというシェルなら
- ~/ .zshrc
ここで環境変数を定義することにより、環境変数の永続化が可能になります。
※ターミナルの上部中央を見れば、自分のシェルがbashかzshかがわかるようになっています。macの場合、基本はzsh。
bashとzshの違いについての参考記事↓
シェルってなに?bashとzsh、自分のMacはどっちを使ってるの?
PATH変数の意義
環境変数をターミナルで実行したら、コンピュータはそのコマンドのプログラムを探します。
ここで、1から100まで検索を行なっていたら、コンピュータへの負荷が半端なくなりますよね。
そこで$PATHの登場。
$PATH変数はPATH変数に登録しているパスだけ探すので、効率的です。
今回もこの$PATHを用いてパスを通します。
本題
インストールしたPHP8.1バージョンにパスを通すために.zshrcを開きます。
$ open ~/ .zshrc
開いたら、パスを追記します。
$ export PATH="/usr/local/opt/php@8.1/bin:$PATH"
$ export PATH="/usr/local/opt/php@8.1/sbin:$PATH"
保存し、パスを反映
$ source ~/.zshrc
PHPのバージョンを確認
PHP 8.1.11 (cli) (built: Sep 29 2022 20:04:17) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.11, Copyright (c) Zend Technologies
with Zend OPcache v8.1.11, Copyright (c), by Zend Technologies
無事にバージョンアップ完了!
まとめ
- 「PATHを通す」とは、$PATH変数にパスを追加すること(今回で言うと、PHPのver8.1を追加した行為)
- 環境変数は非永続性を持つOS上のプロセス
- 永続性をもつように「見える」ファイル(今回で言うと~/.zshrc)に環境変数を定義することで、環境変数の再定義が不要となり、プログラムの実行時に素早くパスを見つけられる
- “PATH”は環境変数のことで$PATHに環境変数を定義することで、その中でプログラムを探す
今回のエラーによって、「PATHを通す」とは何か、理解できました。
ここから、Laravel開発してくぞー!
間違っている場合は、ご指摘いただけると幸いです!