【EC-CUBE on Docker】「[必須]intl拡張モジュールが有効になっていません」の原因と解決方法

プログラミング

Docker上でEC-CUBE最新版(ver4.0.2)を起動するためのイメージファイルを作成し、起動までは問題なく進められたのですが、起動後の画面で「[必須]intl拡張モジュールが有効になっていません」というメッセージが表示されており、少しだけ試行錯誤したので、その対応方法を備忘として残しておきます。

EC-CUBE上で Dockerを起動する方法については、下記の記事を全面的に参考にさせて頂きました。

Docker for Macで最新版EC-CUBE ローカル環境構築 - Qiita
はじめになかなかなかったのでEC-CUBEをDocker for Macを使ってローカル環境を試しに構築してみました。環境#ステップフローEC-CUBE最新版をローカルにダウンロードDoc…

この記事の解決方法も、上記の手順を前提としています。

スポンサーリンク
スポンサーリンク

対応方法

php:7.1-apacheのイメージを作成する際のDockerfileの最後の行に、下記を追加すればOKです。

RUN apt-get install libicu-dev -y
RUN docker-php-ext-install intl

原因と解説

EC-CUBE 4系では、動作するためにintlモジュールが必須になっています。

しかし、デフォルトのphp:7.1-apacheイメージには、intlモジュールが含まれていません。

そのため、2行目の下記 コマンドを書くことで、PHPイメージを作成するタイミングで、intlモジュールを入れています。

RUN docker-php-ext-install intl

しかし、実際にはこれだけを書いて実行すると、下記のエラーメッセージが出てイメージ作成に失敗してしまいます。

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

どうやら、ユニコード用の国際化コンポーネントと呼ばれる、多言語化対応するためのライブラリのようなものをintlモジュールより先にインストールしなければならないようです。

dockerの場合は「libicu-dev」を入れれば良さそうだったので、1行目の下記コマンドで先に書くことで解決。

RUN apt-get install libicu-dev -y

「-y」を最後に書いている理由についてですが、「libicu-dev」のインストール時に下記のような対話が発生します。

After this operation, xx MB of additional disk space will be used.
Do you want to continue? [Y/n]

これはざっくり翻訳すると「このモジュールはxxMBぐらい容量食うけどインストール続行していいか?」という意味なのですが、Dockerイメージ作成時はターミナルからの入力を受け付けることができないようで、モジュールのインストールが勝手に中断されてしまいます。

そのため、「-y」をコマンドの最後に書いて、全ての対話に対して「y」と答えるようにすることで、モジュールのインストールを中断することなく進めることができます。

解決にあたり参考にしたサイト(個人的な備忘)

Unicode 用の国際化コンポーネント – Oracle® Solaris 11.2 国際化対応言語環境の利用ガイド
alpineでPHP-intlインストール時にエラーが起きる原因 | ハックノート

まとめ

上記のエラー以外は特に問題なく進められました。

EC-CUBEについてちょっと検証したいぐらいの用途なら、Docker上で起動してみるのもおすすめです。

簡単にサクッと作れますよ。

コメント

タイトルとURLをコピーしました