2017年10月17日 初版
シナリオテンプレートから作ったシナリオを動作させることが目的であれば、この記事は読み飛ばしていただいてかまいません。シナリオを改造したり、いちから作ってみようと思われたとき、じっくり取り組んでみてください。
ステートの集まり=イベントウォーク
ステートとは、ある時点のプログラムの状態を意味します。どのようなプログラムも、ステートの集まりと、各ステートでどのような事象(イベント)が起こった時にどのステートに遷移するか、という決まりごとを記述するものと言えますが、Connectの場合、特にステート・イベント・遷移を強く意識したものになっているため、あえてプログラムとは呼ばず、イベントウォークと言う造語で呼ぶことにしました。事象(イベント)を契機としてステート間を渡り歩くイメージです。
ステート、コネクター、イベント
ステートでは通常複数のコネクターを起動します。コネクターにはGmail、Googleカレンダー、Facebook、スマートフォンのボタンなど、多くの種類が準備されています。コネクターは、ステートの指示により起動され、担当する外部サービス(Gmailなど)をアクセスし、指定された条件が満たされた時、イベントウォークにイベントを送ります。イベントウォークは、そのイベントを契機としてステート遷移を開始します。
イベントウォークの起動
イベントウォークは、シナリオで定義された開始条件(曜日、時刻、次回起動までの待ち時間など)にしたがって起動されます。
この記事で例として使ったシナリオとイベントウォークはシナリオテンプレート「0008:スマートフォンのボタンでメール(Gmail版)」として公開されています。
シナリオ設定画面の右ペインにある「イベントウォーク編集」を押すと、イベントウォークの編集画面が現れます。
イベントウォーク全体像
どのイベントウォークも、最初はmainという名前のステートから実行を開始します。mainは何もせず次のステートに遷移する特別なステートです。下図の例では、main -> state2 -> state5 -> main_exitのに遷移し、ここでイベントウォークが終了します。これは全てが正常に進んだ場合の経路であり「main系列」と呼びます。
abortから始まる経路はmain系列でエラーやタイムアウトが起こった時に使われる経路「abort系列」です。下図の例では、abort -> abort_exitとなっており、ここでイベントウォークが終了します。
ステートの設定項目
以降、例を使いながらステートの設定項目を説明します。
なお、この記事では標準エディットモードのみを扱います。さらに自由度の高いフリーエディットモードも使えるようになっていますが、それについてはイベントウォーク作成(フリーエディットモード)を参照してください。
下の図は左ペインでstate2をクリックした状態です。右ペインにstate2の設定項目が現れます。
ステート名
ステートの名前です。2017年10月のアップデートから、ステート名が編集可能になりました。ピリオド(.)、アポストロフィ(‘)、ダブルクォート(“)、空白以外の文字が使えます。日本語も使えます。イベントウォーク内ですでに使われているステート名・ラベル名、予約語と重なる名前は指定できません。
コメント
自由なコメントです。このステートの目的などを書き込んでおくと、イベントウォークが読みやすくなります。文字種の制限はありません。ここで書き込んだコメントは、左ペインのステート上にマウスポインターを移動したときにポップアップ表示されます。
ステート遷移
このステートからステート遷移するときの条件と遷移先ステートを指定します。
いずれかのコネクターからイベントを受け取った時、一つのステートに遷移(or)
いわゆるOR条件です。
このステートで起動した(一般に複数の)コネクターのいずれかから一つでもイベントを受け取った時点でステート遷移が開始されます。ステート遷移の過程で、採用されたイベントを発したコネクターを含めこのステートで起動した全てのコネクターが停止されます。
標準エディットモードでは、遷移先ステートはシステムにより決定され、変更することはできません。上の図ではstate2からの遷移先はstate5です。
すべてのコネクターからイベントを受け取った時、一つのステートに遷移(AND)
いわゆるAND条件です。
このステートで起動した(一般に複数の)コネクターの全てからイベントを受け取った時点でステート遷移が開始されます。ステート遷移の過程で、このステートで起動した全てのコネクターが停止されます。
標準エディットモードでは、遷移先ステートはシステムにより決定され、変更することはできません。上の図ではstate2からの遷移先はstate5です。
上記の定義から導かれることですが、コネクターを一つしか起動しないステートの場合、ORとANDはどちらを選択しても同じ結果となります。
タイムアウト
このステートで起動したコネクターが長時間イベントを送ってこない場合に、永久にこのステートに留まってしまうのを避けるために使う時限装置です。
インターバルに1(分)以上の値を指定すると、タイムアウトが有効になります。遷移先ステートは自動的に設定され、標準エディットモードではこれを変更する方法はありません。
遷移先ステートは、編集対象のステートがmain系列にある場合はabortに、abort系列にある場合はabort_exitに設定されます。
メソッドバスケットコネクターのTRIGGER: at timeoutメソッドとの使い分け
ステートに設定するタイムアウトが起こると、ステート遷移条件が何に設定されているかにかかわらず、即座に指定されたステートに遷移します。一方、メソッドバスケットコネクターのTRIGGER: at timeoutメソッドからのタイムアウトイベントは、コネクターからのイベントの1つに過ぎませんので、ステート遷移条件に従います。例えば、バスケットコネクターのTRIGGER: at timeoutメソッドを使って、次のようなことができます。
(例) コネクターAのイベント コネクターBのイベント バスケットコネクターのタイムアウトイベント(例:5分後) の3つのイベントを待つステートで、ステート遷移条件をANDに設定することで、コネクターA、Bからイベントを(5分より前に)受け取ったとしても、最低5分経過するまでは次のステートに遷移しない。
コネクター
ここでは、このステートで起動する(一般に複数の)コネクターメソッドと、それぞれの動作パラメーターを指定します。
ラベル名
このコネクターにつけるラベルの名前です。同じコネクターであっても「ステートにコネクターを追加」を行うたびに新しいラベルがつけられます。2017年10月のアップデートから、ラベル名が編集可能になりました。ピリオド(.)、アポストロフィ(‘)、ダブルクォート(“)、空白以外の文字が使えます。イベントウォーク内ですでに使われているステート名・ラベル名、予約語と重なる名前は指定できません。
実行結果のログ表示有無
Connect GUIのログタブに、該当コネクターの実行結果を表示するか否かを指定します。メソッドごとにデフォルト値が決まっており、通常変更する必要はありません。
メソッド
コネクターのメソッドを指定します。例えば、次のようなものです。
GmailコネクターのACTION: send メソッドバスケットコネクターのTRIGGER: at timeout
入力パラメーター
コネクターメソッドごとに必要な入力パラメーターが異なります。入力パラメーターにはあらかじめ決められている必須パラメーターと、利用者が作成できるオプショナルパラメーターがあります。出力パラメーターは利用者が指定できるものではなく、コネクターメソッドごとに決まっています。入出力パラメーターについて詳しくはConnect GUIにログイン後、右上アカウントメニュー→リファレンスの画面で、左ペインのコネクタークラスを選択してください。
例のstate2では、青ボタンコネクターが次のパラメーターで起動されます。
ラベル名: label_4 実行結果のログ表示: 非表示 メソッド: 青ボタン:TRIGGER when pushed 入力パラメーター text: "定型メール送信"
同じようにstate5を見ると、次のようになっています。
ラベル名 label_8 実行結果のログ表示: 表示 メソッド: Gmail ACTION: send 入力パラメーター to: "{{consolidated.sendTo}}" subject: "{{consolidated.subject}}" text: {{consolidated.text}} (*){{consolidated.xxx}}は、このイベントウォークに与えられたパラメーターを参照する書式で、この場合シナリオパラメーター(図「シナリオ設定」参照)で指定された値を参照しています。
このイベントウォーク全体は次のように表現できます。
「起動されると、スマートフォン上Codyl Connectアプリ内の青ボタンに「定型メール送信」というタイトルをつけ、ボタンを活性化。ボタンが押されると、シナリオパラメーターに定義された宛先、サブジェクトと本文でメールを送信する。」