AMPHPの使用方法メモ (1/2)

PHPのパッケージマネージャ(Composer)でインストールできるパッケージに、「AMPHP」というものがあります。前々回も少しご紹介しましたが、このパッケージを使用するとPHPで非同期処理が行える様になります。非同期処理を使用すると、見かけ上複数の処理を同時に実行できる様になり、処理にかかる時間を短縮できます。JavaScriptやC#などではAsync/Awaitというキーワードで実装されていますが、PHPでもAMPHPというパッケージ(ミドルウェア)を使用すると、async/awaitという関数で同様な機能が使える様になります。(機能自体はPHPのファイバー(Fiber)という仕組みを利用しています。そのため使用するには PHP8.1 以上が必要です。)
AMPHPを使用するととても簡単に非同期処理を書けそうなのですが、現在のバージョン(amphp/amp ver3.0.2)あたりのサンプルがあまり見つからないので、試行錯誤しながらメモとして残します。記事が長くなりましたので、今回は以下の様な流れで環境設定を行います。次回の記事でWindows上のVSCodeでAMPHPの動作検証を行っていきます。(今回の一連の記事では使用しませんが、これらの設定を行うとWindows版のMAMPでもComposerが使用できる様になります。)
- Windows版 PHPをインストール
- Windows版 Composerをインストール
- Windows版 PHPにXdebugをインストール (ブラウザなしでPHPのデバッグができます。)
Windows版 PHPをインストールします
※(2025/02/02 追記) MAMPを使用している場合は、新たにPHPをインストールしないで、MAMPで使用しているPHPのパス(C:\MAMP\bin\php\php8.2.14等)を環境変数に設定してください。すでに新しいPHPのパスを設定してしまっている場合は、パスをMAMPのPHPのパスに変更してから、Composerをアンインストールして再度インストールを実行してください。新しいPHPを追加でインストールするとMAMPで使用しているWEBサーバー(Apach)が起動しない様です。
※(2025/02/19 追記) MAMPに含まれているPHPを使用する場合でも、PHPだけ(ブラウザを使用しない)でデバッグを行いたい場合は以下のWindows版のPHPもインストールして下さい。環境変数の設定はMAMPのPHPのままにしておきます。MAMPのPHPではブラウザを使用しないデバッグの場合はブレークポイントで停止しない様です。MAMPのPHPを使用している場合のVSCodeの設定はこちらをご覧ください。
こちらのリンクからWindows用のダウンロードページを選択します。

表示されたダウンロードページから、「Thread Safe」型のZipファイルをダウンロードします。WindowsのWEBサーバーにIISを使用している場合は、「Non Thread Safe」型を選択する様です。今回はWEBサーバー自体を使用しないので、とりあえず「Thread Safe」を選択しました。

ダウンロードしたZipファイル(現在の最新版は php-8.4.3-Win32-vs17-x64.zip)を展開して、フォルダ名を「php-8.4.3」等に変更してCドライブの下に移動します。次にこちらのサイト様等を参考にしてPHPの実行ファイルがある場所(C:\php-8.4.3等)にパスを通しておきます。環境変数の設定画面は、VSCodeでCtrl + @キーと押して表示されるターミナル画面やWindowsのターミナル画面で以下の様に入力すると「システムのプロパティ」画面が表示される様なので、この画面の「環境変数(N)」ボタンから移動できます。
control sysdm.cpl

パスが追加出来たら、新しく起動したWindowsのターミナル画面等で「php -v」と入力して実行できるか確認しておきます。VSCodeのターミナル画面で確認する場合も、一旦VSCodeを再起動しないとパス設定が反映されない様です。
PS C:\MAMPhtdocs> php -v
PHP 8.4.3 (cli) (built: Jan 15 2025 11:04:37) (ZTS Visual C++ 2022 x64)
Copyright (c) The PHP Group
Zend Engine v4.4.3, Copyright (c) Zend Technologies
PS C:\MAMPhtdocs>
Windows版 Composerをインストールします
こちらのリンクからWindows用のインストーラーをダウンロードします。

ダウンロードしたインストーラを起動します。デフォルトではすべてのユーザーにインストールするオプションが選択されていますが、とりあえず自分のみにインストールするオプションを選択しました。

すべてデフォルト設定でインストールします。もし先にXdebugをインストールしている場合は、以下の様なエラーが表示されてインストールが停止します。

この様なエラーが出た場合は、こちらの記事等を参考にしてVSCodeでPHPのデバッガを起動しておきます。そのままの状態で1つ前の画面に「Back」ボタンで戻り、インストールを再開すると正常に終了します。

再起動した、Windowsのターミナル画面やVSCodeのターミナル画面に、「composer diagnose」と入力して動作チェックをしておきます。特にエラーが出ていなければ終了です。

これでMAMPでもComposerを使用できる様になりました。
Windows版 PHPにXdebugをインストールします
PHPコードをブラウザを使用しないで直接デバッグできる様に、こちらのサイト様を参考に最初のセクションでインストールしたPHPにXdebugを設定して行きます。まずWindowsやVSCodeのターミナル画面に以下の様に入力して、PHP情報をクリップボードにコピーします。
php -i | clip
次にこちらのサイト様を開いて、コピーした内容を貼り付けて画面の下側にある「Analyze my phpinfo() output」ボタンを押します。

画面に表示されたXdebug用のDLLファイルをダウンロードします。

ダウンロードしたファイルを、PHPのインストールフォルダ内にある「ext」フォルダ内にコピーして、「php_xdebug.dll」というファイル名に変更します。次にインストールフォルダ内にある「php.ini-production」ファイルを複製して、ファイル名を「php.ini」に変更します。作成した「php.ini」ファイルを開いて、一番最後に以下の内容を追加して保存します。
[XDebug]
xdebug.mode = debug,develop,trace
xdebug.start_with_request = yes
zend_extension = "C:\php-8.4.3extphp_xdebug.dll"
xdebug.log_level = 0
Windowsのターミナル画面に「php -i | find "xdebug"」(VSCodeの場合は「php -i | findstr xdebug」)と入力して、何か文字列が表示されれば正常にインストールされています。
PS C:\MAMPhtdocs> php -i | findstr xdebug
xdebug
Support Xdebug on Patreon, GitHub, or as a business: https://xdebug.org/support
Enabled Features (through 'xdebug.mode' setting)
'xdebug://gateway' pseudo-host support => no
.
.
.
xdebug.var_display_max_data => 512 => 512
xdebug.var_display_max_depth => 3 => 3
PS C:\MAMPhtdocs>
一応VSCodeでブレークポイントが使用できるか確認します。こちらの記事等を参考にしてVSCodeとプラグインを設定しておきます。何かPHPのファイルを作成して、適当な位置にブレークポイントを設定します。その後エディタ画面の右上ある実行ボタンの横にあるドロップダウンから「Debug PHP file」メニューを選択してPHPファイルを実行します。

ブレークポイントで停止することを確認します。

MAMPのPHPを使用している場合は、VSCodeにWindows用PHPの実行パスを設定しないとブレークポイントで停止しない様です。
左下の「設定」ボタンを押して表示されたメニューから「設定」を選択します。

表示された設定画面の上側にある検索欄に「PHP」と入力してenterキーを押します。中央に表示されているカテゴリーの「PHP Debug」をクリックします。(カテゴリー欄が表示されない場合は、画面を少し広げると表示される様です。) 表示された「PHP > Debug: Executable Path」設定項目の「settings.json で編集」リンクをクリックします。

表示された「php.debug.executablePath」設定項目に、「Windows用のPHP」のパスを設定します。

以上で環境設定は終了です。次回からAMPHPの検証を行いたいと思います。