常田です
スクリーンショットを見るとGUIエディタがそのうちに出てくるのでしょうか?楽しみです。
2回目はもう少し「Action」について見てみたいと思います。
こちらの図を見ると仕組みがもう少し読み解ける気がします。
是回作成したのはここでの「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 ""
無事に動いていますね。
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"
そのままでは日本語は通りませんね、でも引数を渡して動きました。
なんとなく、Actionの作り方はわかってきた気がしますね。次回はTriggerとRuleについてサンプルを見て行きたいと思います。