自宅の開発マシンであるiMac君にLaravelの環境を作ろうとしてターミナルで「composer global require laravel/installer」コマンドを叩いたところ、
Laravelインストール時に以下のエラーが出てインストールが失敗してしまいました。
$ composer global require laravel/installer
Changed current directory to /Users/seiya/.composer
Using version ^3.1 for laravel/installer
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Installation request for laravel/installer ^3.1 -> satisfiable by laravel/installer[v3.1.0].
- laravel/installer v3.1.0 requires ext-zip * -> the requested PHP extension zip is missing from your system.
Installation failed, deleting ./composer.json.
エラー箇所を和訳してみると、
「laravel/installer v3.1.0にはext-zipが必要です。リクエストされたPHP拡張zipがシステムにありません」
とのこと。
結論を言うと、Macに最初から入っているPHPにはzipのサポート機能がないためエラーになっています。これは改めてPHPを入れ直すことで解決できます。
zipぐらいサポートしてくれやってところですが、ないものは仕方ないので使えるようにしていきます。
以下で問題解決からLaravelのインストールまでの手順について解説します。
Laravel環境構築に失敗、Macに最初から入っているPHPは足りない機能がある
冒頭で説明したとおり、composerでLaravelの環境構築をしようとしたらインストール時にPHPにzip関係の機能が不足しているようで失敗してしまいました。
MacにはPHPがプリインストールされています。
もしかしたらPHPのバージョンが古いのか?って思って確認してみました。
ターミナルを開いてphp -vを実行するとこんな感じでインストールされたPHPのバージョンを確認できます。
$ php -v
PHP 7.3.11 (cli) (built: Feb 29 2020 02:50:36) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.11, Copyright (c) 1998-2018 Zend Technologies
しかしPHPはかなり新しめ。
PHPも古いわけじゃないしなんでエラーになるんだってばよ・・・
Macに最初から入っているPHPはzipをサポートしていない
ext-zipに関してグーグル先生に聞いたら、stack overflowに同様の質問がありました。
どうやらmacOS Catalina(10.15)以降のPHPにはzipのサポートが含まれていないようです。
Macに元から入っているPHPに拡張機能を追加するのは難しい手順を踏まなければならないためやりたくありません。
よってzipサポートを含むPHPを改めて入れ直す方向で対応しました。
Laravel構築のエラー対処法:PHPを入れ直す
MacでPHPを入れ直し、Laravel構築時のエラーを解消するために以下の手順を踏む必要があります。
- Homebrewをインストールする
- PHPをインストールする
- Laravelをインストールする
STEP1:Homebrewをインストールする
MacにPHPをインストールするには「Homebrew」を使います。
Homebrewは最初からMacに入っているわけではないため、なかったら追加する必要があります。
ターミナルを開き、whichコマンドでbrewを検索して何も出てこなかったら入っていません。
$ which brew
HomebrewをインストールするためにはXcodeのCommand Line Toolsが必要です。
次のコマンドでインストールできます。
$ xcode-select --install
xcode-select: note: install requested for command line developer tools
念のためバージョンを確認したら2373というバージョンがインストールされたみたいです。
$ xcode-select -v
xcode-select version 2373.
Homebrewの公式サイトを参考に、次のコマンドでHomebrewをインストールします。
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
次のコマンドでHomebrewのバージョンを確認し、バージョンが出力されればOK。
$ brew -v
Homebrew 2.2.17
Homebrew/homebrew-core (git revision 1b070; last commit 2020-05-25)
STEP2:PHPをインストールする
PHPを入れ直していきます。
まず、念のため次のコマンドでHomebrewを更新しておきます。
$ brew update
Updated 1 tap (homebrew/core).
==> New Formulae
flamegraph
次に「brew install php」のコマンドでPHPをインストールします。
結構時間がかかるのでしばらく放置です。今回はPHPの7.4がインストールされました。
$ brew install php
(中略)
Finally, check DirectoryIndex includes index.php
DirectoryIndex index.php index.html
The php.ini and php-fpm.ini file can be found in:
/usr/local/etc/php/7.4/
To have launchd start php now and restart at login:
brew services start php
Or, if you don't want/need a background service you can just run:
php-fpm
インストールできたら、「php –ri zip」コマンドでzipがサポートされているか確認。こんな感じの出力になっていればOKです。
$ php --ri zip
zip
Zip => enabled
Zip version => 1.15.6
Libzip headers version => 1.6.1
Libzip library version => 1.6.1
これで、zipがサポートされたPHPをインストールすることができました!
STEP3:Laravel環境構築
満を辞してLaravelの環境構築をしていきます。
失敗してしまっていた「composer global require laravel/installer」コマンドをもう一度実行してみます。
$ composer global require laravel/installer
Changed current directory to /Users/seiya/.composer
Using version ^3.1 for laravel/installer
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 16 installs, 0 updates, 0 removals
- Installing symfony/process (v5.0.8): Downloading (100%)
- Installing symfony/polyfill-ctype (v1.17.0): Downloading (100%)
- Installing symfony/filesystem (v5.0.8): Downloading (100%)
- Installing psr/container (1.0.0): Downloading (100%)
- Installing symfony/service-contracts (v2.0.1): Downloading (100%)
- Installing symfony/polyfill-php73 (v1.17.0): Downloading (100%)
- Installing symfony/polyfill-mbstring (v1.17.0): Downloading (100%)
- Installing symfony/console (v5.0.8): Downloading (100%)
- Installing ralouphie/getallheaders (3.0.3): Downloading (100%)
- Installing psr/http-message (1.0.1): Downloading (100%)
- Installing guzzlehttp/psr7 (1.6.1): Downloading (100%)
- Installing guzzlehttp/promises (v1.3.1): Downloading (100%)
- Installing symfony/polyfill-php72 (v1.17.0): Downloading (100%)
- Installing symfony/polyfill-intl-idn (v1.17.0): Downloading (100%)
- Installing guzzlehttp/guzzle (6.5.3): Downloading (100%)
- Installing laravel/installer (v3.1.0): Downloading (100%)
symfony/service-contracts suggests installing symfony/service-implementation
symfony/console suggests installing symfony/event-dispatcher
symfony/console suggests installing symfony/lock
symfony/console suggests installing psr/log (For using the console logger)
guzzlehttp/psr7 suggests installing zendframework/zend-httphandlerrunner (Emit PSR-7 responses)
guzzlehttp/guzzle suggests installing psr/log (Required for using the Log middleware)
Writing lock file
Generating autoload files
8 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
PHPを入れ直したことにより、エラーが解消されLaravelがインストールできました!
Laravelのコマンドを使えるようにする
インストールしただけだと、laravelのコマンドがまだ使えないためパスを通す必要があります。
以下のように入力してlaravelのコマンドが使えるようにします。
$ echo "export PATH=~/.composer/vendor/bin:$PATH" >> ~/.bash_profile
$ source ~/.bash_profile
念のためバージョンチェック。laravelコマンドが使えて、バージョンが表示されればOK。
$ laravel -V
Laravel Installer 3.1.0
おつかれさまでした!!
まとめ:Macに最初から入っているPHPには気を付けよう
今回は、MacでLaravel環境を構築しようとしたときに「ext-zipのエラー」が出てしまったので対処法について説明しました。
Macに最初から入っているPHPにはzipサポートがないのでそれをなんとかする必要があります。
既存のPHPをカスタマイズするか、PHPを改めて入れ直すかの対応となりますが、
既存のPHPを弄るのは難易度が高いためPHPを改めて入れ直すのが無難です。
もう一度手順をおさらいしておきます。
- Homebrewをインストールする
- PHPをインストールする
- Laravelをインストールする
なんでプリインストールのPHPでzipぐらいサポートしてくれないのか・・・。とも思いますが、最初から入っているPHPは機能も結構限定的なようなので、改めて入れ直したのは良い機会でした。
それでは、最後までお読みいただきありがとうございました。
少しでもお役に立てたら嬉しいです。