EC出品システム(WebShopCreator)のDocker化が完了しました。

EC出品システム(WebShopCreator)のDocker化が完了しました。

EC出品システム(WebShopCreator)のDocker化が完了!

いやぁ~長い闘いでした。
詰まったところは主に下記2点

  1. php-mecabがインストールできない
  2. php-mecabをインストールしたがPHPで認識されていない (\MeCab\Taggerが動かない)

ポイントは【php-devel(又はphp-dev)のインストール】と【Additional .ini / php.ini への登録】でした。

OSによるphp-develのインストール方法の違い

php-devel(php-dev)とは

phpの開発者パッケージの事です。

このパッケージがインストールされていると【phpize】というコマンドが利用できます。
そして、phpizeでインストールするとOS所定の位置に *.so ファイルを作成してくれます。
※所定の場所に *.so ファイルがあるとPHP側でモジュールとして認識され、PHP側からコマンドで呼び出せるようになります。

autoconfを利用しても同じ結果を獲る事が出来ますが、こちらは自由度が高すぎて初級向きではありません。

CentOSの場合

CentOS用の開発パッケージは【php-devel】になります。
ネット上に参考記事が一番多くあるので設定自体は特に苦労しないと思います。

リポジトリをとってyum でインストール可能。悩まず行けます。

Debianの場合

最初使っていたイメージが『php:7.0-apache』だったため、特に意識もせずDebianでの構築を行っていました。

まぁこれがハマる切っ掛けだったのですが…。

Debianではphp-devが開発パッケージになります。
参考サイトにある様にこんな事をしました。

すると、こんな事を言われました。

ちなみに、利用イメージが php:7.0-apache から php:7.4-apache になったのはphp-devが見つからないと言われ調べた結果、php7.4-dev は存在する事が分かったからです。

しかし、apt-get でインストールしようとすると失敗を繰り返すと…。

この原因については今に至っても解決できていません。

Ubuntuの場合

システムのDocker化は最終的にUbuntuで実装しました。

GUIで有名なUbuntuですが Dockerイメージとしても人気あるみたいで、参考記事はCentOSに次いで多くとても助かりました。また、Debianと兄弟のようなOSであるため、悩み続けたDebianのDockerfileをそのまま利用できる事も大きな利点でした。

Ubuntuでも開発パッケージはphp-devとなります。

Debianで泣かされたphp-devが見つからないコールは全く発生せず、すんなりとインストール完了。

もっと早くUbuntuで実装すればよかったと後悔です。

Alpineの場合

軽量OSと言う事で、最近の記事が沢山あります。

その為、Ubuntu実装の前にAlpineをためしていました。

これも開発者パッケージはphp-dev で、インストールはとても簡単です。

特にphp-devを登録しなくても使えてしまうという…。

ただし、私は Additional.ini / php.ini に登録してもPHP側でMeCabをモジュールとして認識してくれないという事態に遭遇し、Alpineでの構築は断念しました。

OSによるファイル の場所の違い

Additional.ini /php.ini の設置場所

この2つのファイルはOSだけではなく環境によっても変わるのだと思います。

この2つの場所の確認はとても簡単です。phpファイル(又はhtmlファイル)に<?php phpinfo();?> を記載しロードするだけです。
表示されるphpの構成ファイルの最初の方に Additional.ini /php.ini の設置場所が書いてあります。

後はその場所をめがけて『copy でファイルそのものを置き換える』か『echo で要素を上書きする』かを選択して実行するだけです。

悩んだ辞書ファイル(mecab-ipadic-neologd)の置き場所

私はAdditional.ini を次のように構成しました。

ファイル名:mecab.ini

そうしたところ、Laravelから「そんな場所にファイルはねぇ」と怒られてしまいました。

/usr/local/lib/mecab/dic/mecab-ipadic-neologd

これはCentOS7での標準な置き場所なんです。
Ubuntu では次の場所でした。

/usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd/

全然違う…。

mecab-ipadic-neologd 標準インストール時の辞書ファイル置き場

コマンド一発で探せます。

このコマンドが無かったら、まだしばらく彷徨っていた事でしょう。

まとめ

色々やってみて実感した事。

Dockerを使ってLaravelでMeCabを動かすならOSはUbuntuが楽。