メインコンテンツへスキップ

デバッグ (Debug)

コードの実行をリアルタイムで分析できるようにします。

はじめに​

コーディング中、コードの実行を分析する必要が生じることがよくあります。

Netuno では次のものを使用できます:

  • _out.print - データ出力(output)に情報を表示します。
  • _log.info - Netuno サーバーのターミナルに情報を表示します。

しかし、より複雑なシナリオで、たとえばオブジェクトや変数の複数の値を同時に確認したり、そのコンテキストで特定のコードの実行をテストしたりして、動作をより深く理解したい場合もあります。

このようなより複雑なケースでも、上記の _out.print や _log.info などのメソッドを常に使用できますが、何が起こっているかを十分に理解するまでには、非常に手間がかかり混乱しやすいプロセスに陥る可能性があります。

デバッグ(debug)は、特に複雑な状況で、何が起こっているかを十分に理解するためのものです。

デバッグ(英語: debugging、debug)は、開発において欠陥、障害、誤った動作などを見つけて減らすために使用されるプロセスです。

デバッグは 3 つの重要な仕組みに分けられます:

  • ブレークポイント(Break Point):コードの実行を停止し、コードが停止している場所から調査を開始できます。
  • ウォッチ(Watch):コードが停止している場所で変数の値を観察できます。
  • コード実行(Code Execution):デバッグのために実行が停止している時点で、何らかのテストを行うために任意のコードを一時的に実行できます。

ブレークポイント (Breakpoint)​

ブレークポイント(breakpoint)は、デバッグプロセスを開始するためにコードの実行を一時停止する場所です。

Netuno がサポートする任意の言語、たとえば JavaScript、Python、Ruby、Kotlin、Groovy の任意のコードでデバッグを開始するには、デバッグを開始したい場所に次のコードを記述します:

_exec.debug()

Netuno はポリグロットであるため、JavaScript、Python、Kotlin、Ruby、Groovy など、サポートされている任意の言語で動作します。

あとはデバッグを開始するためにコードを実行すると、実行が停止し、一時停止します。

次に、開発インターフェースのバックオフィスのビルドに移動し、左側のメニューで次のオプションを選択します:

  • デバッグ

そこには緑色の二重矢印があり、クリックすると実行を続行できることを示しています:

デバッグ - 続行

緑色の二重矢印はデバッグの一時停止を解除し、コードの実行を停止した時点から通常どおり続行させます。

ウォッチ (Watch)​

変数の値を確認するには、黄色の虫眼鏡を使用します。

黄色の虫眼鏡をクリックすると、値を観察したい変数の名前を入力できます。

デバッグ - ウォッチ

変数名とその現在の値が一覧に表示されます。複数の変数の値を観察でき、変数が存在しない場合は値が表示されません。

コード実行 (Execute Code)​

ブレークポイントのコンテキスト、つまりデバッグが行われている場所で実行するコードを注入できます。

青いコード記号をクリックすると、実行したいコードを入力できます。

デバッグ - コード実行

実行されたコードは下の一覧に表示され、コードが正常に実行されたことが示されます。エラーがある場合は、コードとともにエラーメッセージが表示されます。

リモートデバッグの設定​

Netuno をローカルで実行する場合、通常は設定は必要ありません。

ローカル開発では WebSocket アドレスの host が自動的に設定されるためです。

ローカルアドレスでは通常、次の値が host として使用されます:

  • localhost
  • 127.0.0.1
  • 192.168.1.* - ローカルネットワーク上の任意の IP の例。
  • my-app.local.netu.no

ローカルアドレスには設定は不要なため、この手順はスキップできます。

本番環境、またはコンテナや VPN などのリモート開発では、WebSocket 接続に使用する外部アドレス(IP またはドメイン)を定義する必要がある場合があります。

この場合、開発中のアプリケーション内で環境設定ファイルまで移動します。この例では、次の場所にある開発環境ファイルを使用します:

  • 📂 config/_development.json

設定がすでに存在しないか確認し、存在しない場合は設定ファイル(JSON 形式)の末尾に、WebSocket 接続で使用する外部アドレスの設定パラメータを追加します。たとえば:

{
...
"dev": {
"ws": {
"host": "dev.netuno.org"
}
},
...
}

ポート情報は WebSocket の host アドレスに追加しないでください。

host アドレスを配列で複数指定することもできます:

{
...
"dev": {
"ws": {
"host": [ "my-container.dev.netuno.org", "my-project.com" ]
}
},
...
}

本番環境でのプロキシ (NGINX)​

本番環境では、NGINX などのリバースプロキシを行う Web サーバーがよく使用されます。

プロキシ経由でデバッグを機能させるには、WebSocket アドレスに関連するトラフィックを転送するための専用設定を追加する必要があります:

server {
listen 443 ssl;
server_name my-project.com;

...

location /dev/ws/ {
proxy_pass http://127.0.0.1:9000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_http_version 1.1;
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
add_header X-Frame-Options "";
}
}

まとめ​

デバッグインターフェースと _exec.debug() コマンドを使用することで、何が起こっているかを深く調査できます。

ほとんどの言語やバックエンド技術、特にスクリプト技術では、デバッグは不可能か複雑であることがよくあります。

Netuno は、JavaScript、Python、Ruby、Kotlin、Groovy など、サポートされているさまざまな言語で動作するポリグロットコードをデバッグする簡単な方法を提供します。

リモート環境や本番環境でのポリグロットデバッグを可能にします。

デバッグを利用すると開発が大幅に効率化され、問題解決の精度が向上するため、必須のツールとなります。ぜひ試してみてください。