PhpStormとXdebugでAWS EC2上のPHPをリモートデバッグする
PhpStormとXdebugを使ってEC2上のPHPアプリケーションをリモートデバッグする方法。サーバー側のini設定からIDEのパスマッピングまでを解説。
PhpStormとXdebugによるリモートデバッグは、EC2のステージング環境など、リモート環境でしか再現しない問題を調査する際に特に役立ちます。
パフォーマンスやセキュリティ上の問題を避けるため、本番環境で直接デバッグすることは避けてください。
サーバー側の設定
php.iniファイルに以下のXdebug設定を追加します。拡張機能のパスはRemiリポジトリ経由のPHP 7.1向けの例なので、対象環境に合わせて読み替えてください。
[xdebug]zend_extension="/opt/remi/php71/root/usr/lib64/php/modules/xdebug.so"xdebug.remote_enable = 1xdebug.remote_connect_back = 1xdebug.remote_host = "127.0.0.1"xdebug.idekey = "IDE_KEY"xdebug.remote_autostart=true変更を反映するためApacheを再起動します。
sudo service httpd restartPhpStormの設定
PhpStormでRun > Edit Configurations...を開き、PHP Remote Debugを選択します。

Serversをクリックし、以下の設定で対象サーバーを追加します。
- Name: リモートホストのプライベートIP
- Host: リモートホストのパブリックIP
- Debugger: Xdebug
- Use path mappings: ON
- Absolute path:
/var/www/html/<YOUR_WEB_APP_ROOT>
パスマッピングはリモート側のパスと正確に一致させる必要があります。ここが一致していないと、接続自体は成功するのにPhpStormがブレークポイントで停止しないという状態になります。

php.iniのxdebug.idekeyフィールドで定義したIDEキーを設定します。

ポートフォワーディング
ネットワークルーターを使用している場合は、ポート9000への着信接続を許可し、それをlocalhostへ転送するようポートマッピングを設定してください。
デバッグの実行
- PHPコードの任意の位置にブレークポイントを設置する。
- PhpStormでListen for PHP Debug Connectionsモードを有効にする。
- リモートサーバーにアクセスする。
ブレークポイントがトリガーされると、PhpStormが実行を一時停止し、コードの検査とデバッグが行えるようになります。

まとめ
EC2インスタンス側にXdebugをセットアップし、PhpStormのRemote Debug設定をそこに向けることで、リモートのステージングサーバー上で動くPHPコードに対しても、まるでローカルであるかのようにブレークポイントを設置してステップ実行できるようになりました。ここで重要なのは2点あります。xdebug.idekeyの値がPhpStormのサーバー設定で構成したIDEキーと一致していること、そして絶対パスマッピングがEC2インスタンス上の正確なWebルートを指していることです。xdebug.remote_connect_back = 1を設定しておけばローカルIPをハードコードしなくてもXdebugがIDEへの経路を見つけてくれるので、ネットワークを移動することが多いマシンでは特に助かります。ブレークポイントが何も反応せずに素通りしてしまう場合はまずパスマッピングを疑うべきですし、デバッグセッションが終わったらxdebug.remote_autostartを無効に戻しておくのも忘れずに。
Related posts
Session Manager で EC2 に接続する(SSH 不要)
Systems Manager の Session Manager を使い、SSH キーも踏み台サーバーもポート 22 の開放も不要な状態で EC2 インスタンスにシェルアクセスする方法。
SSHポートフォワーディングでEC2 Windowsインスタンスに安全にアクセスする
プライベートサブネット内のEC2 WindowsインスタンスにSSH踏み台ホスト経由でアクセスし、RDPを一切パブリックインターネットに晒さない方法。
EC2上でProxy.pyを軽量HTTPプロキシとして動かす
Proxy.pyにはそれ自体の認証機構がないため、EC2インスタンス上で動かしつつSSHトンネル経由で安全にアクセスする方法です。
Cognito User PoolsとOIDCでSlackサインインを実装する
Cognito user poolをOIDC経由でSlackと連携させ、"Sign in with Slack"をAmplifyでNext.jsアプリに組み込みます。
Lambda Web AdapterでFastAPIをAWS Lambdaにデプロイする
Lambda Web Adapterを使うと、FastAPIで書いたAPIバックエンドをコンテナのまま単一のLambda関数にデプロイできます。
