【PHP・Laravel】peclとは何か?pecl install と docker-php-ext-installの違い。docker-php-ext-enableなどの使い方を実例で解説(pearとの違い)

php-prograshi(プロぐらし)-kv PHP
記事内に広告が含まれていることがあります。

PHPやPHPを使ったLaravelなどのフレームワークを使っていると、pecl install zippecl install redisといった、「pecl install」というコマンドがでてくることがあります。

また、Dockerを使っている場合docker-php-ext-enable zipdocker-php-ext-enable redisといったように「docker-php-ext-enable」という記述や「docker-php-ext-install」もでてきます。

ここでは、この「pecl」とは何か?「docker-php-ext-enable」や「docker-php-ext-install」とは何かについてまとめています。

また、「pecl」と似た用途で使われる「pear」との違いもまとめています。


peclやdocker-php-ext-enableの例

DockerにNginxとphp-fpmを使ってLaravel環境を構築する際に、php-fpm対して実行する処理の中に「pecl」や「docker-php-ext-enable」「docker-php-ext-install」が使われています。

php-fpmビルド用のDockerfileの例

RUN pecl install zip \
    && docker-php-ext-enable zip

RUN pecl install redis \
    && docker-php-ext-enable redis

RUN docker-php-ext-install pdo_mysql


peclとは何か?

「pecl」とはPHPの拡張パッケージ(拡張モジュール)を提供しているサービスです。

PHP Extension Community Libraryの略でピクルと読みます。

「pecl」を使ってパッケージのインストールした後は有効化する必要があります。

なお、php.iniで有効化した場合はサービスの再起動が必要です。


peclの使い方

peclを使うためには、次の2つのステップが必要です。

peclの使い方
  1. 拡張機能(パッケージ)のインストール
  2. 拡張機能(パッケージ)の有効化


拡張機能(パッケージ)のインストール

peclはPHPにバンドルされているので、そのままコマンドとして使うことができます。

次のコマンドでパッケージをインストールできます。

$ pecl install 拡張パッケージ名[-バージョン]

バージョンの指定がなければ安定版をインストールします。

実例

$ pecl install extname-0.1


拡張機能(パッケージ)の有効化

peclでインストールしたのみではパッケージは有効になりません。

このため、別途、有効化する必要があります。


Dockerの場合

Dockerのdocker-compose.ymlなどでpeclを使っている場合は、peclでパッケージをインストールした後に、以下も記述しておく必要があります。

docker-php-ext-enable 拡張パッケージ名

このため、「pecl install」と「docker-php-ext-enable」は基本的にセットで記述されています。

実例

RUN pecl install zip \
    && docker-php-ext-enable zip

RUN pecl install redis \
    && docker-php-ext-enable redis


ローカル環境(MacやWindowsの場合)

MacやWindowsなどのローカル環境の場合は、以下の2つの方法があります。

ローカル環境で拡張パッケージを有効化する方法
  1. php.iniを編集する。
  2. dl関数を使う。


php.iniを編集する

php.iniを開いて編集することで、拡張パッケージを有効化することもできます。


php.iniのファイルパスやファイルの存在確認

まずはphp.inファイルのパスを確認します。

#php.iniの場所を確認
$ php -i | grep php.ini

Configuration File (php.ini) Path => /etc

php.iniが置かれるディレクトリは「/etc」であることがわかります。


次に、ファイルの存在確認をします。

#ファイルの存在確認
$ ls /etc | grep php.ini
php.ini.default

上記の場合、「php.ini.default」はありますが、「php.ini」が存在していないことがわかります。

新たにphp.iniを作成する場合は以下のように「php.ini.default」をコピーして作成します。

#ファイルの作成
$ cp /etc/php.ini.default /etc/php.ini
php.ini.defaultとphp.iniの違いとは何か?

「php.ini」はデフォルトでは存在しません。このため、デフォルトの設定が記述されている「php.ini.default」をコピーして、「php.ini」を作成します。

なお、phpをインストールした際に(OSによってはデフォルトで)php.ini.defaultは生成されます。


▼grepコマンドとは何か?
grepコマンドは前の処理結果の中で、指定した値を含む処理結果のみを表示する絞り込みコマンドです。

$ 処理 | grep 値


php.iniを編集する

「php.ini」ファイルを編集して、拡張パッケージを有効化します。

Dynamic Extensionsと書かれているところの下に;extension=拡張パッケージ名があるので、冒頭の;を外します。

拡張パッケージ名がない場合は、extension=拡張パッケージ名を追記します。

以上でphp.iniの編集は完了です。


実例
;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;

省略

;extension=bz2
;extension=curl
;extension=fileinfo

↓ 拡張パッケージ「curl」を有効化

;extension=bz2
extension=curl
;extension=fileinfo


サービスの再起動

最後に、本番反映のため、php.iniで有効化した場合はサービスの再起動をします。


dl関数を使う

拡張パッケージを有効化する2つ目の方法は「dl関数を使う」です。

$ dl ( 拡張機能の名前 ) : true

「:」の後ろを、falseにすれば有効化を解除できます。


実例

拡張機能「curl」を有効化する場合は以下のようになります。

$ dl (curl): true

(参考)PHP公式 dl関数


pecl installとdocker-php-ext-installの違い

pecl installとdocker-php-ext-installの2つがある場合

Dockerfileによっては、pecl installdocker-php-ext-installの2つが使われている場合があります。

例えば以下のような場合です。

RUN pecl install redis \
    && docker-php-ext-enable redis

RUN docker-php-ext-install pdo_mysql

なぜPHP拡張パッケージをインストールにするのにコマンドがいくつもあるのか?と疑問に思われる方も少なくありません。

pecl installとdocker-php-ext-installの違い

pecl installとdocker-php-ext-installの違いは以下の通りです。

docker-php-ext-install

docker-php-ext-installはPHPに標準で備わっている拡張パッケージのインストール&有効化ができます。

pecl install

pecl installはPHPに標準で備わっていないパッケージをインストールできます。


PHPに標準で備わっている拡張パッケージ一覧

PHPに標準で備わっている拡張パッケージには次のようなものがあります。

▼一例

Zip, Zlib, memcache, podなどが用意されています。

PHP: 拡張モジュールの一覧/分類 - Manual


peclでinstallできる拡張パッケージ一覧

PHP標準ではなく、peclでinstallできる拡張パッケージはPECLの公式ページで検索することができます。

redis, xdebug, memcachedなどが用意されています。


peclとpearの違い

「pecl」と似たコマンドに「pear(ピア)」があります。

「pecl」も「pear」もPHPの拡張パッケージをインストールできるコマンドです。pearで用意されている拡張ライブラリはpeclでも使えます。

peclとpearの主な違いは記述されている言語と処理速度です。

pearはPHP言語で書かれているのに対して、peclはC言語で書かれています。処理速度はpeclの方が高速です。

なお、アイコンは名前にちなんで、pearは洋梨、peclはピクルスとなっています。


peclとapt-getの違い

Dockerfileによっては、apt-get installも同時に使われている場合があります。

RUN apt-get install -y zlib1g-dev libzip-dev unzip \
    && pecl install zip \
    && docker-php-ext-enable zip

aptはDebian系Linux(DebianやUbuntuなど)のパッケージ管理ツールです。このため、apt-getでインストールするのはOS用のパッケージです。

peclでインストールするのはPHP用のパッケージになります。


参考リンク

PHP公式 pecl入門
PHP公式 pecl installの使い方
PHP公式 php.iniディレクティブ
pecl公式 peckとは?
docker hub公式 php-fpm

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