常田です。

OpenWhiskを開発していくうえではDebugも必要になってくるかなと思います。OpenWhisk-Debuggerというプロジェクトでデバック機能を提供しています。Node.jsもPythonでも利用することが出来ます。Node.jsの場合にはNode Inspectorを利用してChromeブラウザでデバック出来ます。先日には npm のレポジトリにも入ったので多分 npm install -g openwhisk-debugger で導入が出来ます。ここではGitからCloneして利用してみたいと思います。

環境

私はMacを利用しており、Node.jsについては nodebrew を使って管理をしています。利用しているバージョンは以下のとおりです。

$ node -v
v6.5.0
$ npm -v
3.10.3

導入

導入自体は難しくなく以下のコマンドを実行すれば使えます。

$ git clone https://github.com/openwhisk/openwhisk-debugger.git
$ cd openwhisk-debugger/client
$ ./wskdb

wskdbを最初に起動すると自動的に導入が始まります。次回以降は普通に起動してきます。

2__hideaki_princess____desktop_working_openwhisk-debugger_client__bash_

使い方

  • https://github.com/openwhisk/openwhisk-debugger/tree/master/client

早速使ってみたいと思います。結構普通に操作が便利なので普段の利用としてもよいかと思います。

Inspect

InspectではActionを表示することが出来ます。シーケンスの場合にも見ることが出来るので便利ですね。

(wskdb) inspect s1
Attached = no
This is an action sequence
    a1 => a2
ok
(wskdb) inspect a1
Attached = no
This is a nodejs:6 action
    function main(params) {
        return { "message": "a1(" + params.message +")" };
    }

ok
(wskdb) inspect a2
Attached = no
This is a nodejs:6 action
    function main(params) {
        return { "message": "a2(" + params.message +")" };
    }
ok

list

listコマンドではActionを一覧で見ることが出来ます。AttachしてるActionがあればその部分も分かるようになります。

(wskdb) list
Available actions:
     s1
     a2
     a1

Atattch

デバックする上では atattch をしておく必要があります。

(wskdb) attach a1
Attaching to a1
   Creating action trampoline
ok

Invoke

実際に実行します。

(wskdb) invoke a1
Debug session requested
stderr: Debugger listening on [::]:5858

実行するとそのままChromeが起動してきます。node inspectorを利用したnode_inspector_-_file____private_var_folders_0x_4ck1b1gd1js5m8pfq50pzmr80000gn_t_wskdb-10213jagwclcsfpy7_a1_js-debug

画面の右側のペインの矢印をクリックすると進みます。必要があればブレイクポイントを利用して動作を確認します。

node_inspector_-_file____private_var_folders_0x_4ck1b1gd1js5m8pfq50pzmr80000gn_t_wskdb-10213jagwclcsfpy7_a1_js-debug

次にはパラメータを付けて実行してみます。

(wskdb) invoke a1 -p message "good"
Debug session requested
stderr: Debugger listening on [::]:5858

node_inspector_-_file____private_var_folders_0x_4ck1b1gd1js5m8pfq50pzmr80000gn_t_wskdb-102137cdfdduca3ea_a1_js-debug

スクリーンショットが取れませんでしたが、マウスポインタを合わせればその変数が何が入っているかを知ることが出来ます。

実行前にプログラムの修正も可能です。ブラウザ上で変更を行い「保存」してから実行します。

(wskdb) invoke a2 -p message bood
Debug session requested
stderr: Debugger listening on [::]:5858

node_inspector_-_file____private_var_folders_0x_4ck1b1gd1js5m8pfq50pzmr80000gn_t_wskdb-11379wuryhab70xgm_a2_js-debug

実行結果は

{
    "debug": "a2(bood)"
}
Debug session complete
ok

のように書き換えたものになります。
この内容で良い場合には内容を確認し(diff)その結果を反映(publish)することが出来ます。

(wskdb) diff a2
Index: wskdb
===================================================================
--- wskdb
+++ wskdb
@@ -1,3 +1,3 @@
 function main(params) {
-   return { "message": "a2(" + params.message +")" };
+   return { "debug": "a2(" + params.message +")" };
 }
\ No newline at end of file

ok
(wskdb) publish a2
Your changes are now live
ok
(wskdb) inspect a2
Attached = yes
This is a nodejs:6 action
    function main(params) {
        return { "debug": "a2(" + params.message +")" };
    }
ok

まとめ

先日から試していてようやく起動できたのでもしかするとライブラリなどの条件が色々問題があったのかもしれませんが npm に登録された際に package.json がアップデートされたこともあり動くようになりました。リモートサーバ上でプログラムが実行されることもありどの様に動きを見ていけばよいかわからないと困りますので今回の方法が参考になればと思います。