[Tip] ロボットの開発/デバック効率を上げる分岐の無効化

## はじめに

ベーシックエンジンロボット（BER）で以下のようなブランチに分岐した処理がある場合、下のブランチへ移動するためには上から順番に処理を実行し、選択した手前のブランチまでの処理が完了されている必要があります。

![fullModeDS_normal.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090491/779e1e71-aa42-f8d1-7f25-928df2c36d1a.gif)

これはロボットの処理一貫性（同期）の観点から必要なことですが、手前の処理が大きい場合には、非常にストレスを感じます。

通常は
1. ロボット、BERはシンプルに小さく作る。
1. デバッグはロボット、BER別々に実施し、最後に結合する。[^1]

ことである程度回避が可能ですが、ロボット結合後のデバッグでは避けられません。

[^1]: 小分けに作って繋げる手法。ロボットは `アプリケーションごと` ではなく`画面ごと`に（小さく）作成することで、デバッグ時にアプリ等を開きなおす必要なく開発がスムーズになります。

ということで今回は意外と知られていない「分岐の無効化」について紹介したいと思います。[^2]

[^2]: ちなみに公式のオンラインドキュメントでは `ロボット実行モード` のページに以下のような淡白な説明があります。
    > スマート再実行では、ウェブサイト、データベース、またはウェブ サービスによる外部とのやりとりがキャッシュされます。実行結果を格納するための前提条件 (ロードする URL を決定する変数など) が変更されるまで、キャッシングによってステップの再実行が回避されます。スマート再実行モードには、最小実行モードよりも高いメモリ フットプリントがあります。
    >
    > 外部と重要なやりとりを行う大型ロボットや長時間稼働するロボットには、スマート再実行モードはお勧めしません。こうしたロボットでは、実行時間が長くなり、メモリの使用量が高くなり過ぎてしまいます。
    >
    > ロボットのデザイン時の実行時間を短縮するために、Design Studio で分岐を右クリックしてロボットを無効にすることもできます。デバッグ モードでも同様の設定を適用することができます。さらに、選択したイテレーションで指定された条件に基づいて、分岐を無効にすることもできます。

## 分岐の無効化とは？

BERにおいては `ステップ` と `ステップ` を繋ぐ `線` を無効化することにより、それ以降のステップ一式をコメントアウト（無効化）できます。

指定の場所から後方を一式コメントアウトすることにより、いちいち「ロボットの構造を変えてデバッグしては、終了後元に戻す。」煩雑な手間をかける必要がなくなり、ロボット開発のストレスと戻し忘れによるバグの混入を防ぐことができます。

## 分岐の無効化手順
:::note warn
分岐の無効化はステップの無効化と異なりファイルには記録されません。
条件の設定がされている場合を除き無効化の手動設定はファイルに保存されないため、Design Studio を起動するたびに無効化する必要があります。
:::
### Case＃1. プロパティーから設定

無効化したいステップの直前にある線を左クリック

![flowBetweenSteps.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090491/4896ddc2-6825-a6e9-5aee-3ba64f5dcfb1.png)

すると画面右上アクションペインの表示が切り替わり、`線` のプロパティが表示されます。

![property_before.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090491/2145f9f2-f159-e23c-ae33-81390b448270.png)

プロパティ中段の `デザイン時に分岐を有効化` 直下にある `有効` チェックボックスをOFFにすると、選択している `線` 以降のブランチ全体が無効化されます。

![property_after.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090491/f84fbd64-c0ba-3356-bd35-2946ffcf9c94.png)

再度、この状態で下側ブランチのステップをクリックしてみましょう。
先ほどとは違い、無効化されたブランチの処理は実行されず、直接下のブランチに制御が移ります。

![fullModeDS_disabled.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090491/61919be8-f2ac-4a1e-c4f3-ff092b80ecd3.gif)

:::note
`有効` チェックボックス下の `条件` にエクスプレッションを追加することにより、分岐の有効/無効をロジック化することもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090491/9610a252-d6e1-efb4-8079-303f047fb18f.png)
`a` の値が "1"`の場合：分岐が有効（後続のステップが実行される）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090491/7941bfd0-87cc-76c2-68af-abf8973c9d0f.png)

`a` の値が "2"`の場合：分岐が無効（後続のステップが実行されない）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090491/9f2df2e6-6f3d-c18e-2a5f-972a36acc4b8.png)
:::

### Case＃2. コンテキストメニューから設定

無効化したいステップの直前にある線を右クリックすると、以下のようなコンテキストメニューが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090491/3706f665-45c6-73a2-9c0b-85b922e53d1e.png)

赤枠内のいずれかの項目を選択します。
- 選択した `線` を無効化したい場合には「`Design Studio で無効にする(S)`」を選択します。
- 選択した `線` が複数あるブランチの1つであり、選択した `線` 以外の全て（ブランチが5つに分かれている場合には残りの4つ）を無効化したい場合には「`Design Studio でこの分岐のみ有効にする(O)`」を選択します。

## まとめ

ロボット作成に必須の機能ではないため積極的にトレーニンで説明されることはないと思いますが、知っていると便利な機能です。

こういう機能は実際にロボットを作っていく中で何気なく発見し、口伝で伝えられていったり、後追いでドキュメントで見つけたりすることが多いですね。

使っている本人にとっては当たり前すぎて埋もれてしまうこのようなTipsも順次紹介していきたいと思います。