# トリガー

> トリガーの編集画面。識別と置き場所、種類、周期、アクションを持つ周期の設定のカード、実行状況の帯、固定の間隔と飛ばした回数を持つ 100 ms のスケジューラー、コマンド、そしてトリガーにできないこと。

トリガーは、きっかけを 1 つの[アクション](logic-actions)に結び付けます。今あるきっかけの種類は**周期**だけです。スケジューラーが、決まった間隔で結び付いたアクションを発火させます。Logic の欄の Triggers の節でトリガーを選ぶか、そのフォルダーまたは節の最上位の表でその行の**開く**を押すと、その編集画面が開きます（新規… > 新しいトリガーで作ったトリガーは開かれず、その表で強調表示されます。[作成と複製](logic#creating-and-copying)を参照）。読むには **Logic の表示**、編集するには **Logic の構成**が必要です。トリガーに操作の動詞はありません。自分で発火するものですし、手で走らせるのはアクション自身の実行です。

見出しは、トリガーの印、名前、「1 つのアクションを、決めた周期で自動的に実行する仕組みです。」の行、そしてそれが切られている間は**無効**のピルを見せます。入力の欄には識別と周期の設定が、右側の帯には実行状況が入ります。

## 識別 {#identity}

| 項目 | 意味 | 受け付ける値と既定 | 効果 |
| --- | --- | --- | --- |
| 名前 | 表示の名前です。そのトリガーが発火させた実行は、この名前で記録されます。 | 自由記述。新しいトリガーは `TriggerN` です。空の名前は `Trigger` として保存されます。 | キーを押すたびに自動で保存されます。トリガーは識別で参照されるので、名前を変えてもほかには何も効きません。 |
| 置き場所の行 | そのトリガーがどこに入っているかです。`Triggers / <folder> / <name>` のようになります。 | 読み取り専用。 | トリガーにアドレスはありません。フォルダーを変えるには、ツリーの**移動先**を使います。 |
| 説明（任意） | 自由記述です。 | 空です。 | ありません。 |

## 周期の設定 {#schedule}

| 項目 | 意味 | 受け付ける値と既定 | 効果 |
| --- | --- | --- | --- |
| 種類 | きっかけです。 | 周期。唯一の種類です。 | 今日のところはありません。 |
| 周期（ms） | 発火の間隔です。 | 100 以上の整数（スケジューラーの走査の分解能です）。既定は 1000 です。 | それより小さい値、負の値、読み取れない入力は、保存されている周期をそのままにし、「周期は 100 ms 以上の整数にしてください（スケジューラーの分解能です）。」と出します。周期を変えると時計が戻ります。次の発火は、次の走査からまるまる 1 つ分の新しい周期のあとになります。 |
| アクション | そのトリガーが発火させるアクションです。 | `（なし）`、またはこのステーションのどれかのアクション。既定は `（なし）` です。 | アクションのないトリガーは何もせず、「アクションを結び付けてください。それまでトリガーは何もしません。」と述べます。アクションが削除されたものは「結び付けたアクションはもうありません。別のものを選んでください。」と述べ、アクションが無効なものは「結び付けたアクション「X」は無効なので、トリガーは何もしません。」と述べます。 |

どの入力欄も自動で保存されます。検証のメッセージは、カードの下で 0.5 秒ごとに評価し直されます。

## 実行状況 {#scheduling}

スケジューラーは 100 ms ごとに走査し、時刻の来たものをアクションのレーンに投げます。これはアクションのスクリプトが順に走る専用のレーンで、式と警報の 100 ms の周期とは別のものです。

- 作られたばかりのトリガー、有効にしたばかりのトリガー、そして周期、種類、アクションを編集したトリガーは、次の走査で時計をまきます。最初の発火は、そこから 1 つ分の周期のあとです。
- 発火のあと、次の発火は**現在**からまるまる 1 つ分の周期のあとです（固定の間隔）。込み合った時間のあとに、まとめて追いつく発火が起きることはありません。
- そのトリガーの前の実行がまだキューにあるか実行中のときに来た発火は、**待たせずに飛ばします**。飛ばした回数が数えられ、次の発火が組み直されます。遅いアクションの後ろに順番待ちがたまることはありません。
- アクションのない、あるいはアクションが無効なトリガーは何もしません。発火せずに組み直されるだけで、何もしないことが飛ばした回数に数えられることはありません。
- 実行はそのトリガーの名前で記録され、その結果はアクションの最後の実行の帯に出ます。無効なトリガーが発火することはありません。

実行状況の帯は、動いている診断を見せます。**最後の発火**、**次の予定**（スケジューラーが時計をまくまでは横線）、**飛ばした回数**（記憶の中の数で、再起動すると 0 に戻ります）、そして「前の実行がまだ終わっていないときに来た周期は、待たせずに飛ばします（たまりません）。イベントのコンソールに届くのは失敗した実行だけで、このトリガーの名前で記録されます。」という覚え書きです。

Triggers の最上位のパネルは、すべてのトリガーを、値の列にその状態とともに並べます。「1000 ms ごと · 最後 `<when>` · 飛ばし N」か、「無効」です。

## コマンド {#commands}

| コマンド | 何をするか | 灰色になるとき | 描かれないとき |
| --- | --- | --- | --- |
| 有効化／無効化 | 有効の印を切り替えます。有効にすると時計をまき直します。 | ステーションがロックされているか読み取り専用のとき。 | ロールが Logic の構成を持たないとき。 |
| 複製 | そのトリガーを（同じアクション、同じ周期のまま）空いている名前で Triggers の最上位に写し、開かずに最上位の表で強調表示します（[作成と複製](logic#creating-and-copying)を参照）。複製は周期が設定されていない状態から始まります。 | ステーションがロックされているか読み取り専用のとき。 | ロールが Logic の構成を持たないとき。 |
| トリガーを削除 | 「「X」を削除しますか？トリガーが取り除かれます。 この操作は元に戻せません。」と尋ねます。 | ステーションがロックされているか読み取り専用のとき。 | ロールが Logic の構成を持たないとき。 |

結び付いたアクションを削除しても、トリガーは一緒に削除されず、結び付きが外れるだけです。

## トリガーがしないこと {#what-triggers-do-not-do}

ほかのきっかけの種類はありません。値の変化でも、条件でも、時刻でも、起動時でも、何も発火しません。トリガーが発火させるアクションは 1 つだけで、複数はありませんし、手で発火させることもできません。そのときはアクション自身を実行してください。スケジューラーはランタイムとともに止まりますし、ステーションが閉じる途中で「ランタイム停止中」として拒否された発火は、黙って落とされます。
