常田です

スクリーンショットを見るとGUIエディタがそのうちに出てくるのでしょうか?楽しみです。

2回目はもう少し「Action」について見てみたいと思います。
こちらの図を見ると仕組みがもう少し読み解ける気がします。

NewImage

是回作成したのはここでの「Action」です。これ以外に起動を行うための「Trigger」その後実行するための条件としての「Rule」があります。「Action」と「Action」を結びつけるのが「Chain」ということになります。

  • trigger: a class of events that can happen
  • action: an event handler — some code that runs in response to an event
  • rule: an association between a trigger and an action

Package について

またこれ以外に「Package」と呼ばれているものがあります。自分で作ることも出来るようですが既存でも幾つかのものが用意されているようです。

vagrant@vagrant-ubuntu-trusty:~/work/open$ wsk package list /whisk.system
packages
/whisk.system/slack                                               shared
/whisk.system/util                                                shared
/whisk.system/samples                                             shared
/whisk.system/system                                              shared
/whisk.system/weather                                             shared
/whisk.system/github                                              shared
/whisk.system/watson                                              shared
/whisk.system/cloudant                                            shared
/whisk.system/alarms                                              shared
vagrant@vagrant-ubuntu-trusty:~/work/open$

ユーティリティにはこのようなものが含まれています。

vagrant@vagrant-ubuntu-trusty:~/work/open$ wsk package get --summary /whisk.system/util
package /whisk.system/util
 action /whisk.system/util/date: Get current date and time
 action /whisk.system/util/sort: Sort array
 action /whisk.system/util/cat: Concatenate array of strings
 action /whisk.system/util/head: Filter first K array elements and discard rest

みんな大好きSlackなんかもありますね。メッセージが送信できそうです。

vagrant@vagrant-ubuntu-trusty:~/work/open$ wsk package get --summary /whisk.system/slack
package /whisk.system/slack: Package which contains actions to interact with the Slack messaging service
 action /whisk.system/slack/post: Posts a message to Slack

更に中身を見てみます。いきなりURLに向かって投げつけていますね、動くのかな。

vagrant@vagrant-ubuntu-trusty:~/work/open$ wsk action get --summary /whisk.system/slack/post
action /whisk.system/slack/post: Posts a message to Slack
   (params: username text url channel)

こういった型式で自身で作ったAcationもこのようなPackageも同じように実行することが出来ます。

wsk action invoke --blocking --result /whisk.system/slack/post --param username "tokihdei@gmail.com" --param text "test" --param url "https://hooks.slack.com/services/xxxxx" --param channel ""

NewImage

無事に動いていますね。

Chain

またサンプルに戻り進めたいと思います。先程まで登場していた複数の「Action」をつなぎ合わせて1つのアクションを作ることが出来ます。非常に便利になります。NodeREDなどで言う所Nodeが「Action」であると思っておけばよいでしょうか。

wsk action create myAction --sequence /whisk.system/util/cat,/whisk.system/util/sort

サンプル+日本語を入れてみます

Over-ripe sushi,
The Master
Is full of regret.
ええええ
あああ

このアクションを実行してみます。表示上の問題なのかソートされているのかはちょっと不明ですが???になってしまいました。英語はソートされていますね。util/cat をした後に util.sort が実行された事になります。

$wsk action invoke --blocking --result myAction --param payload "$(cat haiku.txt)"

{
    "length": 5,
    "lines": [
        "???",
        "????",
        "Is full of regret.",
        "Over-ripe sushi,",
        "The Master"
    ]
}

こんなかたちで複数の処理を繋げることが出来るようです。この場合パイプで繋いだように標準入力の値を拾って動いているのでしょうか? payloadとありますね。

繰り返しになりますが以下の内容で len.js を作成してみます。

function main(params) {
    return {payload:  'length, ' + params.length + '!' };
}

次に myAction2 として更につなげてみます。

$ wsk action create myAction2 --sequence /whisk.system/util/cat,/whisk.system/util/sort,/bluemixiphone-contest_dev/len
ok: created action myAction2

実行してみましょう

$ wsk action invoke --blocking --result myAction2 --param payload "$(cat sample.txt)"
{
    "payload": "length, 5!"
}

さて最後に先ほどのSlackと組み合わせてみたいと思います。slackparam.jsという名前で作ります。

function main(params) {
    return { "name": "bot" , "url":"https://hooks.slack.com/services/xxxxxx" , "text": params.text ,"channel":"" };
}

新しくActionを作ってチェインを作って実行してみます。

wsk action create myslackparam slackparam.js
wsk action create myAction3 --sequence myslackparam,/whisk.system/slack/post
wsk action invoke --blocking --result myAction3 --param text "これはテストです.this is test"

そのままでは日本語は通りませんね、でも引数を渡して動きました。

NewImage

なんとなく、Actionの作り方はわかってきた気がしますね。次回はTriggerとRuleについてサンプルを見て行きたいと思います。