ポートフォワードでリモートデバッグ!

How to debug on a remote server by port forwarding

リモートサーバ上のPHPのソースコードを、ローカルのエディタ(Visual Studio Code)上でデバッグ実行する方法です。リモートとローカル間はSSHの22番ポートしか空いていないので、ポートフォワードを利用して実現する方法を紹介します。

ポートフォワードを利用しない場合

ちょうどよい記事があったので、こちらを御覧ください。

ポイントは、

  • リモートサーバ側にXdebugを導入する。
  • php.iniにて、Xdebugの設定を有効にする。
    - xdebug.remote_enable = On
    - xdebug.remote_autostart = On
    ※WEBサーバ上で動かしている場合、設定変更後に再起動しましょう
  • VSCodeにPHP Debugの拡張機能をインストールする。
  • ディレクトリを考慮して、デバッグ構成を設定する(launch.json)。
    ※ローカルにもソースコードが必要です(面倒な場合はこちら

といったところでしょうか。

ポートフォワード!!

さて、ここからが本題です。上の設定では、リモートサーバでPHPが実行されたという情報が、リモートサーバの9000番ポートに投げられます。このリクエストをローカルのVSCodeでキャッチしたいので、ここでポートフォワードを利用します。

今回、ポートフォワードに利用するのはPuTTYです。

カテゴリから、接続-SSH-トンネルを選んで、「受け側ポート」と「送り先」を上記のように入力し、追加ボタンをクリック!このトンネル設定が追加された状態でリモートサーバに接続することで、リモートの9000番ポートへのリクエストが、ローカルの9000番ポートに転送されます。

おまけ:サーバ側で Virtual Hostを利用している場合

サーバ側で ApacheのVirtual Hostを利用し、複数のアプリケーションを動かしている場合、php.iniで設定してしまうと全てのアプリケーションに適用されてしまいます。そんな場合は、httpd.confにてVirtual Host毎に設定してあげましょう。

<VirtualHost *:80>
ServerName ...
...
<Directory "...">
...
php_flag xdebug.remote_enable On
php_flag xdebug.remote_autostart On
</Directory>
...
</VirtualHost>

デバッグコードを仕込んでログファイルに書き出すのもいいですが、そもそもどの順番でコードが実行されているのかを確認したい時など、デバッグ実行ができると開発効率は格段に向上します。ぜひ環境を整えて、快適なプログラミングライフを手に入れて下さい!