Windows版PHPのビルド手順とPHP 8.4における変更点

この記事は、CYBOZU SUMMER BLOG FES '25の記事です。

cybozu.github.io

こんにちは、Garoon開発チームの松尾です。中堅・大規模組織向けのグループウェアであるGaroonは、バックエンドにPHPを使って開発されていて、Windows Server向けのパッケージ版も提供しています。本記事では、今年3月に登壇したPHPerKaigi 2025におけるセッション内容をベースに、製品の開発を通じて得られた知見や情報を付け加えながら、Windows版PHPのビルド手順および最新情報を紹介します。

speakerdeck.com

Windows環境でも動作するPHP

PHPはさまざまなプラットフォームで動作しますが、各種GNU/LinuxディストリビューションやmacOSだけでなく、Microsoft Windowsでも動作します。企業内の業務システムでは、Windows Server上でPHPを運用しているケースも少なくありません。

Windows版のPHPを入手する方法の1つとして、PHPの公式サイトからWindows版のバイナリアーカイブをダウンロードする方法があります。実運用環境でも使えるバイナリアーカイブを使う場合にはソースコードからビルドする必要はありませんが、本記事では公式サイトからソースコードをダウンロードしてビルドを行う手順について解説します。

Windows版PHP 8.4における変更点

2025年9月22日現在、PHPの最新安定バージョンはPHP 8.4.12です。2024年11月にリリースされたPHP 8.4では、Windows関連の変更点もいくつか存在します。マニュアルに記載されている主な変更点としては、Windows版のビルドに必要なVisual Studio 2022の使用が推奨されるようになったことと、SIMD命令関係(AVX/AVX2/AVX-512)のサポートが強化されたことが挙げられます。

マニュアルには、Visual Studioを使ったビルドにはVisual Studio 2019以降が必要になったこと、およびVisual Studio 2022の使用が推奨される旨が記載されています。しかしながら、私が確認した範囲ではVisual Studio 2022を使わないとスムーズにビルドできなかったことから、事実上Visual Studio 2022がほぼ必須になっているようです。

その他の変更点としては、PHP SDKが参照するWindows版依存ライブラリの配置先URLが変わったこと、およびlibXpmがgd拡張モジュールの依存ライブラリとして必須ではなくなった点があります。これらは、Garoonの開発に関連する調査を通じて判明した情報であり、マニュアルには明記されていない変更点でした。

PHP 8.4ではPHP SDKが参照するWindows版依存ライブラリの配置先URLが変更

Windows版PHP 8.4ではlibXpmがgd拡張モジュールの依存ライブラリとして必須ではなくなっている

Windows版PHP 8.4のビルドに必要なもの

Windows版PHP 8.4をソースコードからビルドする際に必要になるものは下記の通りです。

  • Visual Studio 2022
  • Microsoft Windows
  • Git
  • PHP SDK : https://github.com/php/php-sdk-binary-tools
  • PHPのソースコード : PHP公式リポジトリのPHP-8.4ブランチ
  • PHPの依存ライブラリ : PHP SDKを使って必要なものを取得できる

PHPの公式サイトからダウンロードしたWindows版のバイナリアーカイブを使う場合にはソースコードからビルドする必要はありません。しかしながら、PHPを改造するパッチをあてる必要がある場合や、公式で修正済みバージョンが公開されていない状況で製品やサービスに影響する不具合や脆弱性を改修したい場合、社内の開発・運用ポリシーでビルドが推奨されている場合などではソースコードからビルドすることが必要なケースもあります。

Windows版のPHP 8.4をビルドする場合には、Visual Studio 2022(Visual C++ 17.0)が必要です。Visual Studioをインストールする際には、「C++によるデスクトップ開発」にチェックをつけるようにしてください。

Visual Studio 2022をインストールする際には、「C++によるデスクトップ開発」にチェックをつける

Windows版PHP 8.4のビルド手順

Windows版PHP 8.4をビルドする具体的な手順を説明します。CLI(コマンドラインインターフェース)でPHPをビルドしますが、64ビット版をビルドする場合には「x64 Native Tools Command Prompt for VS 2022」をまず起動します。

PHP SDKによる事前準備

起動後、Windows版PHPのビルドに役立つツールキットであるPHP SDKのリポジトリを「git clone」コマンドを使って取得します。ここでは「c:\php-sdk」に配置します。

git clone https://github.com/php/php-sdk-binary-tools.git c:\php-sdk

次に、PHP SDKをセットアップします。手順は下記の通りです。記事執筆時点では、PHP SDKの最新バージョンは2.4.0であることから、そのバージョンに対応するタグである「php-sdk-2.4.0」にチェックアウトしています。

cd c:\php-sdk
git checkout php-sdk-2.4.0
.\phpsdk-vs17-x64.bat
phpsdk_buildtree php84

チェックアウトした後、Visual Studio 2022を使って64ビット版をビルドする場合には「phpsdk-vs17-x64.bat」を実行します。また、「phpsdk_buildtree」の引数として「php84」というディレクトリ名を指定していますが、このディレクトリ名は任意であり、実際は別の名称でも構いません。「phpsdk_buildtree」を実行すると、PHP SDKが使うディレクトリが作成され、カレントディレクトリが自動的に変更されます。

PHPのソースコードを取得

カレントディレクトリが変更された後、PHPのソースコードを取得します。手順は下記の通りです。記事執筆時点の最新安定バージョンであるPHP 8.4.12をここでは使います。

git clone https://github.com/php/php-src.git php-8.4.12-src
cd php-8.4.12-src
git checkout PHP-8.4.12
PHPの依存ライブラリを取得

PHPの依存ライブラリを取得します。手順は下記の通りです。これにより https://downloads.php.net/~windows/php-sdk/deps/vs17/x64/ に配置されている各種ライブラリファイルを取得します。

phpsdk_deps --update --branch 8.4
ビルドの実行と確認

PHPのビルドおよび実行確認手順は下記の通りです。Visual Studioに付属するmake相当のコマンドであるnmakeを使ってビルドします。「php.exe -v」を実行して、PHPのバージョン情報が表示されればビルドは成功です。

buildconf
configure --enable-cli
nmake
.\x64\Release_TS\php.exe -v

Windows版PHPの依存ライブラリはどのように作成されているのか

現在では、Windows版PHPが依存するライブラリの作成は、GitHub Actionsを使って半自動化されています。例えば、Windows版PHP用のOpenSSLについては、 https://github.com/winlibs/openssl でソースコードが管理されています。

https://github.com/winlibs/winlib-builder のリポジトリにあるワークフローを手動で実行することで依存ライブラリをビルドしてファイルを作成し、生成された圧縮ファイルは手動で https://downloads.php.net/~windows/php-sdk/deps/vs17/x64/ にアップロードされています。

https://github.com/winlibs/winlib-builder のリポジトリにあるワークフローを手動で実行することで依存ライブラリをビルドしている

依存ライブラリ作成の流れは上述のようになっていますが課題もあります。現状、下記のような問題点がある状況です。

  • ライブラリをアップロードできる人が限られている
  • プロセスに透明性がない
  • 履歴が残っていない
  • 手動更新なので間違いが発生しやすい

結果として、依存ライブラリが最新バージョンに更新されず、セキュリティ修正が反映されないリスクが生じる可能性もあります。

少ない人数の有志に開発を依存しているWindows版PHP

PHP 7.4まではMicrosoft社が正式にWindows版PHPをサポートしていましたが、PHP 8.0以降でMicrosoft社による正式ビルドが提供されなくなっていました。PHP開発チームの有志によるWindows版PHPの開発・提供は現在も継続していますが、PHP 8.3のリリース時には未更新のWindows用依存ライブラリ(PHP本体のビルドに必要なOSSライブラリ)が多数存在していました。

Windows版はPHP本体だけでなく各依存ライブラリも有志によりビルドされており、PHP 8.4のリリース時にはほとんどの依存ライブラリが更新され状況は改善されました。Windows版のPHPは現在も積極的に開発・提供されているものの、少ない人数の有志に開発を依存している状況には変わりありません。Windows版PHPおよびその依存ライブラリの開発や改善に貢献する開発者が求められている状況と言えるでしょう。

まとめ

さまざまなプラットフォームで動作するPHPはWindows環境でも動作します。Windows版PHPの開発は現在も積極的に行われているものの、少ない人数の有志に開発を依存している状況です。開発に貢献できる箇所はまだまだたくさんありますので、興味を持った方はぜひコントリビュートしてみてはいかがでしょうか。