🙌
【FrankenPHP・ZTS】スレッド安全を考慮して、PHP拡張機能を追加する
概要
こんにちは、Booostのバックエンドエンジニアのma_meです。
今回はFrankenPHPの環境構築時に意識すべき、PHPのスレッド安全性について紹介します。
PHPにはスレッド安全かどうかを切り分けた2つのビルドがあります。
- NTS(Non Thread Safe):スレッド安全でないビルド
- ZTS(Zend Thread Safe):スレッド安全なビルド
FrankenPHPはZTSで構築されているため、
拡張機能のインストール時にはこのビルドモデルの意識が大切になってきます。
Xdebugの一般的なインストール方法と問題点
Xdebugを例にあげて説明します。
良くある方法として、Xdebugをapt
から導入しました。
RUN apt install php-xdebug
ただこれではFrankenPHP(ZTS)の環境では動作しません。
apt
ではNTS・ZTSの違いを考慮せず、NTSバージョンをインストールしてしまうからです。
同様のことがpecl
を利用したインストール時にも発生します。
対処方(install-php-extensionsを利用する)
install-php-extensions
を使ってインストールしましょう。
RUN install-php-extensions xdebug
このユーティリティは現在のPHP環境(ZTS/NTS、バージョン、各種設定)に合わせてソースから拡張をコンパイルします。
そのため、環境固有の不整合を回避しつつ、確実にZTS対応版を導入できます。
まとめ
FrankenPHPはZTSビルドのPHPランタイムであるため、拡張機能のインストールにはビルドモデルを意識する必要がありますが、
install-php-extensions
を活用することで、環境に合わせたソースコンパイルが行われ、確実にZTS対応版を導入できます。
Dockerイメージの品質と安定性を高めるために、積極的に利用していきましょう。
Discussion