Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
7
Help us understand the problem. What is going on with this article?
@matamatanot

composer install で the requested PHP extension intl is missing from your system と言われる解決方法 in Docker image

More than 1 year has passed since last update.

はじめに

自分が悩んだ順に書いていきます。無駄に長いです。
Dockerfileを扱ったのは今回が初めてです。初心者でも読みやすいと思います。
もっといい方法あるよというコメントお待ちしております。

エラー発生

nojimage/twitter-text-php
Twitterが公式で出しているライブラリがPHPに対応していなかったために導入
ローカル環境で下記コマンドを打つ
composer require nojimage/twitter-text-php

しかし下記のようにエラーが

shell
nojimage/twitter-text-php v3.0.1 requires ext-intl * -> the requested PHP extension intl is missing from your system.

PHPの拡張モジュールであるintlというものが無いらしい
PHP: intl - Manual
調べると国際化関数のあれこれが入ってるそう。
日本語含め多言語テキストをパースするために必要ってことだろうか。

intlの追加

docker-php-ext-installでPHP extensionは追加していけるそうだ。

Dockerfile
FROM php:7.?.?-fpm 
RUN apt-get update \
  && docker-php-ext-install pdo_mysql (省略) intl #intl追加

これでいけると思いdocker-compose up --buildでコンテナを立ち上げるとエラーが。

shell
configure: error: Unable to detect ICU prefix or no failed. Please verify ICU install prefix and make sure icu-config works.

どうやらICUというものが必要らしい。

ICUとはInternational Components for Unicodeのことで、
Unicodeに対する便利ライブラリ的なやつ。確かに国際化関数には必要そうだ。

ちなみに
International Christian University(国際基督教大学)でも、
Intensive Care Unit(集中治療室)でもない。
「ICU library」 で調べたら「図書館|国際基督教大学(ICU)」が出てきた

ICUの追加

今度はdocker-php-ext-installでは入らない
apt-get installでとってくる必要がある
詳細は割愛するが私は一度ここでaptではなくapkコマンド叩いてエラーになった。

Dockerfile
FROM php:7.?.?-fpm
RUN apt-get update \
    && apt-get install -y libicu-dev \ #一行追加
  && docker-php-ext-install pdo_mysql (省略) intl 

これでいけると思いコンテナを起動する。起動には成功。
docker exec -it hogehoge bashでコンテナに入り、
composer require nojimage/twitter-text-phpを再度実行するが、

shell
[RuntimeException]                                                                                                            
  Failed to clone https://github.com/nojimage/twitter-text-php.git, git was not found, check that it is installed and in your   
  PATH env.                                                                                                                     

  sh: 1: git: not found 

今度はgitが無いと怒られた。Docker内でcomposerを使うには必要らしい。

gitの追加

Dockerfile
FROM php:7.?.?-fpm
RUN apt-get update \
    && apt-get install -y libicu-dev git  \ #git追加
  && docker-php-ext-install pdo_mysql (省略) intl 

起動、入る、composerでまたしてもエラー

shell
Failed to download nojimage/twitter-text-php from dist: The zip extension and unzip command are both missing, skipping.
Your command-line PHP is using multiple ini files. Run `php --ini` to show them.

zipとunzipが無いようだ

zipとunzipの追加

The zip extension and unzip commandと表記がある通り、
zipはextensionでとれるがunzipはapt-getで入れる必要がある。

Dockerfile
FROM php:7.?.?-fpm
RUN apt-get update \
    && apt-get install -y libicu-dev git unzip  \ #unzip追加
  && docker-php-ext-install pdo_mysql (省略) intl zip #zip追加

今度は起動時にエラー

shell
configure: error: zip support requires ZLIB. Use --with-zlib-dir=<DIR> to specify prefix where ZLIB include and library are located

ZLIBが無いよとエラー。圧縮アルゴリズムのライブラリのようだ。

ZLIBの追加

Dockerfile
FROM php:7.?.?-fpm
RUN apt-get update \
    && apt-get install -y libicu-dev git unzip zlib1g-dev \ #zlib追加
  && docker-php-ext-install pdo_mysql (省略) intl zip 

この変更を最後に
docker-compose up --build
docker exec -it hogehoge bash
composer require nojimage/twitter-text-phpが通りました

最後に

Dockerfileも肥大化してしまったのであまりスマートなやり方ではない気が。
インフラ基礎知識が曖昧なままコンテナ技術を使っていたので並行して知識をつけていきたい。

下記の記事を参考にタイトルをつけました
composer install で the requested PHP extension intl is missing from your system と言われる解決方法

7
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
matamatanot
リモート社会人してる

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
7
Help us understand the problem. What is going on with this article?