Tips

MacのPHPbrewでのXdebugの設定法とVScodeでの使い方

MacでPHPbrewでPHPの環境を構築していますが、Xdebugを導入しVScodeでの開発の効率を上げることにしました。設定方法をご紹介します。いくつかワナがあるのでそれをご紹介できればと思います。

PHPインストール時の+debugでXdebugが使えるわけではない

PHPbrewの導入方法とPHPのインストール方法は以下2記事に記載しています。

M2 MacでWordPressの開発環境構築手順!MAMPは使うな!M2のMacBook AirにてWordPressの開発環境を構築したので手順をご紹介します。MAMPを使わずにHomebrew、PHP...
phpbrewでphp7.3.33のインストール時のエラーと解決策phpbrewで現時点で少し古めのphp7.3.33をインストールした際に、たくさんのエラーが出てそれを乗り越えたのでお伝えします。一つ...

これらの記事にも書きましたが、PHPのインストールのコマンドは、

のようになります。

最初、ここで指定する +debug というオプションさえつけておけば、Xdebugは使えるのかと思っていました。しかし、全くそんなことはないということがわかりました。

これをつけているのに、xdebug.soなどの必要なファイルがどこにも見当たらないんですよね。もはやこのオプションが必要なのかもわかりません。当方の環境ではこのオプションをつけてここからの手順を行っております。もしかしたら、つけなくても良いのかもしれません。時間ができたらそれは検証します。

PHPbrewの作法に則ってインストール

なので、別途Xdebugをインストールします。PHPbrewのページに簡単なやり方は書いています。

Installing Extension - The Most Simple Way

インストールする前に対象のPHPにセットしておく必要があります。(当方はわけあって、最新版のPHPではなく7.3.33を使っています)

というのは、PHPがバージョンごとにインストールされているディレクトリ配下に拡張機能も配置されるので、どのPHPのバージョンに対してインストールするか指定する必要があるためです。

/Users/xxxxx/.phpbrew/build/php-7.3.33/ext/xdebug/

なので、複数のPHPのバージョンがあってそれぞれでXdebugを使いたいなら、それぞれに対してインストールする必要があるということです。

早速インストールしてみます。

すると

と表示され、インストールできませんでした。

ここは直感でXdebugのバージョンが合ってないのかも、と思いました。以下の公式サイトを見てみると、

Historical Releases

PHP7.3系はXdebug 3.1.6までしか対応していないことがわかりました。バージョンを指定しないと最新版をインストールしようとして失敗しているのだと推察しました。

そこで、

とすると無事にインストールできました。

指定しなくても、よしなに対応しているバージョンをインストールしてくれればいいのに、と思いました。

このコマンドによって、

~/.phpbrew/php/php-7.3.33/lib/php/extensions/debug-non-zts-20180731

にxdebug.soが、

~/.phpbrew/php/php-7.3.33/var/db/

~/.phpbrew/php/php-7.3.33/var/db/cli/

xdebug.ini

が作られます。

ただ、xdebug.soの方はここで良いのですが、xdebug.iniはここにできても意味がありません。CLIを使う方以外は。

ちなみに、コマンドラインで

で表示されるiniファイルは、コマンドラインで適用されるiniファイルです。しかし、WordPressなどのデバッグで使いたい方は、Apacheがiniファイルを読み込むディレクトリに配置する必要があるのです。

Apacheに適用するためのiniファイルの配置

ご自身の環境の phpinfo() の出力結果を全部選択してコピーして、以下のXdebugの公式サイトに貼り付けると何をすべきか教えてくれます。

Installation Wizard

そこに、

~/.phpbrew/php/php-7.3.33/var/db/apache2/

にiniファイルを配置してください、みたいな指示があったので、あ、Apacheで使われるiniファイルのディレクトリは違うんだ、ということに気がつきました。ちなみに、 phpinfo() の表示の仕方は以下の記事に記載しています。

M2 MacでWordPressの開発環境構築手順!MAMPは使うな!M2のMacBook AirにてWordPressの開発環境を構築したので手順をご紹介します。MAMPを使わずにHomebrew、PHP...

とはいえ、PHPbrewを使ってXdebugをインストールする方にとっては、このInstallation Wizardはあまり役に立ちません。ソースコードをダウンロードしてコンパイルする手順とかまで書いてあるので。それはPHPbrewがやってくれます。ただ、参考程度に使ってみるのはアリです。

単純にどのディレクトリにiniファイルを置けばいいか知りたいなら、 phpinfo() の出力結果から以下のように「Scan this dir for additional .ini files」の値を見ればわかります。

参考までに、ではこのディレクトリ自体は変更可能なのか調べてみました。大元のphp.iniとかで変えられるのかな、と最初思ったのですが以下によると無理です。このディレクトリはコンパイル時に決まってしまいます。コンパイル時ならオプションで指定することで変えられます。

how to allow custom built "Scan this dir for additional .ini files" php.ini file to read

ということなので、上記のディレクトリにiniファイルを配置します。ファイル名は拡張子が .ini ならなんでもいいようです。ただ、Xdebugのためのファイルとわかるように、 xdebug という文字列は入れた方がいいでしょう。

中身はそのままPHPbrewが生成したものをコピーしてきました。

つまり、

の一行のみでやってみました。

iniファイルに設定する項目が足りない

iniファイルを反映させるためには、Apacheの再起動が必要です。

再起動後に、 phpinfo()をまた見て、下にスクロールしていくとXdebugのセクションが出てきます。おー、ちょっと感動です。

またコピーしてInstallation Wizardに貼り付けて見ると、「You're already running the latest Xdebug version」と表示されます。

よーし、これで完了だと思ってVScodeの方でステップ実行の設定をして動かしてみました。(VScode側の設定方法は後述します)

でも、ブレーキングポイントで止まりません。あれ、なんでだ?

調べた結果、iniファイルに追記する必要がありました。2、3行目を追記しています。

以下の記事を参考にしました。

visual studio code PHP debugging not working

phpinfo()のXdebugのセクションにも、上記の項目が反映されました。

これでちゃんとブレーキングポイントで止まるようになりました。

なお、当記事ではXdebugのバージョンが3.1.6を使っていますが、2系と3系ではオプションが変わってシンプルな記載で済むようになっています。

Xdebug 2 から 3 へのアップグレード

ネット上にはまだ2系のオプションのままの記事が多いので、知らないとハマるかもしれません。

ちなみに、ここで作成したiniファイルは、PHPbrewで別のバージョンのPHPをインストールした場合、そのバージョンでもそのまま使えます。コピーして、対象のバージョンのディレクトリに配置します。それについては以下で説明しています。

PHPbrewでの8.2.8のインストールとバージョン切り替え方法PHPbrewで執筆時点で最新版のPHP8.2.8をインストールしました。以前に7.3.33をインストールしていたので、今回2バージョン...

VScodeでの設定

VScodeでの設定は基本的に以下の記事のやり方で大丈夫です。

【PHP】Xdebug & VS Codeによるステップ実行

launch.jsonを作成する必要がありますが、内容は最初に生成されるままで大丈夫でした。内容を修正する必要はありませんでした。