第3章 Node.js ベースのアプリケーションのデバッグ
このセクションでは、Node.js ベースのアプリケーションのデバッグと、ローカルデプロイメントとリモートデプロイメントの両方でデバッグロギングを使用する方法を説明します。
3.1. リモートのデバッグ
アプリケーションをリモートでデバッグするには、デバッグモードで起動し、デバッガーを割り当てる必要があります。
3.1.1. アプリケーションのローカルでの起動およびネイティブデバッガーの割り当て
ネイティブデバッガーを使用すると、ビルトインデバッグクライアントを使用して Node.js ベースのアプリケーションをデバッグできます。
前提条件
- デバッグするアプリケーション。
手順
デバッガーを有効にしてアプリケーションを起動します。
ネイティブデバッガーは自動的に割り当てられ、デバッグプロンプトを提供します。
デバッガーが有効になっているサンプルアプリケーション
node inspect app.js
$ node inspect app.js < Debugger listening on ws://127.0.0.1:9229/12345678-aaaa-bbbb-cccc-0123456789ab < For help see https://nodejs.org/en/docs/inspector < Debugger attached. ... debug>
Copy to Clipboard Copied! アプリケーションに別のエントリーポイントがある場合は、コマンドを変更してそのエントリーポイントを指定する必要があります。
node inspect path/to/entrypoint
$ node inspect path/to/entrypoint
Copy to Clipboard Copied! たとえば、express generator を使用してアプリケーションを作成する場合、エントリーポイントはデフォルトで
./bin/www
に設定されます。- デバッガープロンプトを使用して デバッグコマンド を実行します。
3.1.2. アプリケーションをローカルに起動して V8 インスペクターをアタッチする
V8 インスペクターを使用すると、Chrome Debugging Protocol を使用する Chrome DevTools などの他のツールを使用して Node.js ベースのアプリケーションをデバッグできます。
前提条件
- デバッグするアプリケーション。
- Google Chrome ブラウザーで 提供されるような V8 インスペクターがインストールされている。
手順
V8 インスペクターの統合を有効にして アプリケーションを起動します。
node --inspect app.js
$ node --inspect app.js
Copy to Clipboard Copied! アプリケーションに別のエントリーポイントがある場合は、コマンドを変更してそのエントリーポイントを指定する必要があります。
node --inspect path/to/entrypoint
$ node --inspect path/to/entrypoint
Copy to Clipboard Copied! たとえば、express generator を使用してアプリケーションを作成する場合、エントリーポイントはデフォルトで
./bin/www
に設定されます。V8 インスペクターをアタッチし、デバッグコマンドを実行します。
たとえば、Google Chrome を使用している場合は、以下のようになります。
-
chrome://inspect
に移動します。 - 以下の リモートターゲット からアプリケーションを選択します。
- これで、アプリケーションのソースを確認し、デバッグアクションを実行できるようになりました。
-
3.1.3. デバッグモードでの OpenShift でのアプリケーションの起動
OpenShift で Node.js ベースのアプリケーションをリモートでデバッグするには、コンテナー内で NODE_ENV
環境変数を development
に設定し、リモートデバッガーからアプリケーションに接続できるようにポート転送を設定する必要があります。
前提条件
- アプリケーションが OpenShift で実行している。
-
oc
バイナリーがインストールされている。 -
ターゲット OpenShift 環境で
oc port-forward
コマンドを実行できる。
手順
oc
コマンドを使用して、利用可能なデプロイメント設定を一覧表示します。oc get dc
$ oc get dc
Copy to Clipboard Copied! アプリケーションのデプロイメント設定の
NODE_ENV
環境変数をdevelopment
に設定して、デバッグを有効にします。以下に例を示します。oc set env dc/MY_APP_NAME NODE_ENV=development
$ oc set env dc/MY_APP_NAME NODE_ENV=development
Copy to Clipboard Copied! 設定変更時に自動的に再デプロイするように設定されていない場合は、アプリケーションを再デプロイします。以下に例を示します。
oc rollout latest dc/MY_APP_NAME
$ oc rollout latest dc/MY_APP_NAME
Copy to Clipboard Copied! ローカルマシンからアプリケーション Pod へのポート転送を設定します。
現在実行中の Pod を一覧表示し、アプリケーションが含まれる Pod を検索します。
oc get pod
$ oc get pod NAME READY STATUS RESTARTS AGE MY_APP_NAME-3-1xrsp 0/1 Running 0 6s ...
Copy to Clipboard Copied! ポート転送を設定します。
oc port-forward MY_APP_NAME-3-1xrsp $LOCAL_PORT_NUMBER:5858
$ oc port-forward MY_APP_NAME-3-1xrsp $LOCAL_PORT_NUMBER:5858
Copy to Clipboard Copied! ここで、
$LOCAL_PORT_NUMBER
はローカルマシンで選択した未使用のポート番号になります。リモートデバッガー設定のこの番号を覚えておいてください。
V8 インスペクターをアタッチし、デバッグコマンドを実行します。
たとえば、Google Chrome を使用している場合は、以下のようになります。
-
chrome://inspect
に移動します。 - Configure をクリックします。
-
127.0.0.1:$LOCAL_PORT_NUMBER
を追加します。 - Done をクリックします。
- 以下の リモートターゲット からアプリケーションを選択します。
- これで、アプリケーションのソースを確認し、デバッグアクションを実行できるようになりました。
-
デバッグが完了したら、アプリケーション Pod の
NODE_ENV
環境変数の設定を解除します。以下に例を示します。oc set env dc/MY_APP_NAME NODE_ENV-
$ oc set env dc/MY_APP_NAME NODE_ENV-
Copy to Clipboard Copied!