はじめに
WEBエンジニア2年目の初心者です。
仕事でlaravel内でPhpSpreadsheetを使うためにインストールしようとしたらエラーが出てインストールできない・・・
Dockerも使った経験が浅いので、いろいろ調べたため、自分用のメモ兼困っている人の手助けになれば幸いです。
1.Phpspreadsheetのインストールを試みる
以下のコマンドを打ってみると見事にエラーが出てさっそく困った
composer require phpoffice/phpspreadsheet
↓エラー内容
Package phpoffice/phpspreadsheet has requirements incompatible with your PHP version, PHP extensions and Composer version:
- phpoffice/phpspreadsheet 2.0.0 requires ext-gd * but it is not present.
- phpoffice/phpspreadsheet 2.0.0 requires ext-mbstring * but it is not present.
- phpoffice/phpspreadsheet 2.0.0 requires ext-zip * but it is not present.
どうやらphp のext-gd ext-mbstring ext-zipの3つが足りないからインストールできないって言われている模様・・・
docker環境で入れる方法をGoogle先生に聞いてみると、以下の記載をdockerファイルに書き込むと動くらしい
参考記事
2.Dockerファイルを修正
とりあえず、Dockerファイルに書き込んでみる
以下PHPのDockerファイル
FROM php:8.1-fpm-alpine
# install composer
RUN curl -sS https://getcomposer.org/installer | php
RUN mv composer.phar /usr/local/bin/composer
# install packages
RUN apk update
RUN apk add git nodejs npm
# install php extensions
RUN docker-php-ext-install pdo pdo_mysql
RUN apt-get update -y && apt-get install -y libpng-dev
よし、docker-compose up -d --build
でビルドしてみるか!
・
・
・
はい、エラーが出ました。
/bin/sh: apt-get: not found
apt-getなんてコマンドは存在しないらしいです。
stackoverflowに同じ問題抱えた人が質問してました。
どうやら、alpineベースのイメージだからubuntuのapt-getコマンドは使えないと
apt-get -> apk add
に変えると動くよとのこと
ついでに調べていくと、dockerファイルって1つのRUNで実行したい場合は\&&
でつなげられるようです。
最終的に変更したdockerファイルはこれ!
FROM php:8.1-fpm-alpine
# install composer
RUN curl -sS https://getcomposer.org/installer | php
RUN mv composer.phar /usr/local/bin/composer
# install packages
RUN apk update \
&& apk add git nodejs npm\
#libpng-devとlibzip-devをイメージファイルに追加
libpng-dev\
libzip-dev \
&& docker-php-ext-install pdo pdo_mysql\
#gdとzipのライブラリをphpに追加
gd \
zip
これでビルドすれば無事にPhpSpreadsheetをインストールしてLaravelで使えるようになりましたとさ
alpineベース・wsl2・ubuntuのあたりは今度調べることとしよう・・・