Laravel/uiをrequireしようとしたら、下のようなメッセージが出てきて怒られてしまいました。
$ composer require laravel/ui
PHP Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in phar:///usr/local/bin/composer/src/Composer/DependencyResolver/RuleWatchGraph.php on line 52
この記事のコンテンツ
原因と対応
原因は書いてある通り、許容されたメモリじゃ足りなくて処理できませんでしたよってことなんですが。
php.iniに設定されているメモリ制限を変えてやるか、その処理だけメモリ制限を無視してやるかで対応できます。
恒久的な対応としてはphp.iniを編集してメモリ制限を引き上げてやることなんですが、できるだけ初期値はいじりたくない場合もありますよね。
そんな時はコマンド実行時にだけ制限値をパスするようにしましょう。
一時的にメモリ上限を無視する
お手軽に済ませたい場合はこちら。
実行したいコマンドの前に以下のおまじないを付け加えます。
$ COMPOSER_MEMORY_LIMIT=-1
memory limitを-1(無制限)にするという、見たままのおまじないですね。
今回の場合だとこう。
$ COMPOSER_MEMORY_LIMIT=-1 composer require laravel/ui
これで実行できるはずです。
毎回コマンドを打つのめんどくさいとか、設定値を変えたいんだって時はphp.iniを編集しましょう。
php.iniを編集
php.iniの場所は以下のコマンドで確認できます。
$ php --ini | grep php.ini
これを実行すると、こんな感じでパスがわかりますね。
Configuration File (php.ini) Path: /etc/php/7.4/cli
Loaded Configuration File: /etc/php/7.4/cli/php.ini
パスが確認できたので、編集してやりましょう。
$ vi /etc/php/7.4/cli/php.ini
エディタが開いたら、検索モードでメモリ制限の項目(memory_limit)を探し、書いてある数字をINSERTモードで書き換えましょう。
memory_limit = 【お好みの容量】
上書き保存してエディタを抜けたら再びコマンドを実行してみます。
$ composer require laravel/ui
今度はちゃんと実行できました。
さいごに
php.iniのメモリ制限は今回の件に限らずよく引っかかるので、解決方法として覚えておくといいかもしれませんね。