phpのモジュールのインストール
composerを実行したときに、socketsがないとのエラーが発生しました。
エラー解決の道のりで学んだことを共有します。
筆者の使用している環境
・docker
・php:7.3-fpm-alpine
error内容
composer require linecorp/line-bot-sdk
のコマンド実行時にエラーが発生しました。
/work # composer require linecorp/line-bot-sdk
1/3: https://packagist.jp/p/provider-2020-04$0debce5054869c0cc3060fd8316edffa3035f0642bf192c9e9cf9724d7429a24.json
2/3: https://packagist.jp/p/provider-latest$a6fa0af3f924c039609f8f1f06ac662b10318aa68e1148be6b1bdb31361c8133.json
3/3: https://packagist.jp/p/provider-2020-01$6b3554006599af21a07eabf22d05e92f989cac78cda0223195aeebb83d53c317.json
Finished: success: 3, skipped: 0, failure: 0, total: 3
Using version ^4.3 for linecorp/line-bot-sdk
./composer.json has been updated
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 linecorp/line-bot-sdk ^4.3 -> satisfiable by linecorp/line-bot-sdk[4.3.0].
- linecorp/line-bot-sdk 4.3.0 requires ext-sockets * -> the requested PHP extension sockets is missing from your system.
To enable extensions, verify that they are enabled in your .ini files:
- /usr/local/etc/php/php.ini
- /usr/local/etc/php/conf.d/docker-php-ext-bcmath.ini
- /usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini
- /usr/local/etc/php/conf.d/docker-php-ext-sodium.ini
You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.
結果的にはこのエラー文が原因でした↓
- linecorp/line-bot-sdk 4.3.0 requires ext-sockets * -> the requested PHP extension sockets is missing from your system.
socketsがないですよ。という意味らしいです。
解決方法1
https://qiita.com/hamatti/items/d164bd4a88fc51f2a99d
上記の記事のように、多くの記事でphp.iniでのコメントを外せばよいとの意見が多かったです。
ですが、これでは解決しませんでした。
上記のようにコメントを外して解決する場合は、あらかじめsocketsのモジュールがインストールされている場合なのだと思う。
私が使っている環境はalpineの環境なので、あらかじめインストールされていなかったのです。
php -m
上記のコマンドをターミナル上で打つことで、インストールされているモジュールを確認することができます。
解決方法2
apk add php7-sockets
このコマンドでsocketsをインストールして解決かと思ったが変化なしでした。この辺はよくわかっていません。
githubのdocker-libraryからダウンロードすることで、解決できました。
dockerfileにて、
RUN docker-php-ext-install sockets
で無事socketsをインストールでき、解決しました。
phpのモジュールについて
エラー解決で調べていく中で、socketsはphpのモジュールだということを知りました。
モジュールってなんだ?と思い調べました。
モジュールはphpの拡張機能のことです。
dockerの場合、上記のようにdockerfile内でRUN docker-php-ext-install (インストールしたいモジュール) というコマンドを記述することでインストールすることができます。
モジュールについて、下記に公式のドキュメントを張っておきます。
https://www.php.net/manual/ja/install.pecl.php