validating-flow について
実行やコミットの前に、Robomotion の TypeScript フローをパッケージスキーマに照らして検査するスキルです。構造化されたエラーを報告し、Designer で読み取れる形式かも確認しますが、配線やビジネスロジックは手動確認が必要です。
主な機能
- 01ノード ID、型、プロパティの検査
- 02ポートとパッケージ依存関係の検証
- 03Flow Designer の読み取り可能性確認
- 04ノード単位の構造化エラー報告
- 05修正と再検証の反復
活用シーン
- 01編集後のフロー検査
- 02実行前のスキーマエラー確認
- 03コミット前のフロー検証
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ robomotionio/ agent-skills --skill validating-flowインストール後、Claude Code で/validating-flowを入力して読み込まれたか確認します。
同梱ファイルconfig.json
詳細
Robomotion フローの検証
pspec スキーマに照らしてフローをビルドして検証します。すべてのサブフローも対象です。
使用するタイミング
- TypeScript SDK でフローを作成または編集した後
- フローを実行またはコミットする前
- 反復作業中に検証と修正を繰り返す場合
使い方
robomotion validate <flow-dir> # e.g. robomotion validate write-to-clipboard
robomotion validate # defaults to main.ts in cwd
robomotion validate path/to/main.ts # also accepts a file
成功すると、終了コード 0 で、stderr に ✔ <folder> validated が出力されます。<folder> はフロー名ではなく、main.ts を格納しているフォルダーの名前です。stdout には何も出力されません。以下のように組み合わせて使用できます。
robomotion validate write-to-clipboard/ && robomotion run write-to-clipboard/
失敗すると、終了コード 1 で、ノードごとの構造化されたエラーが stderr に出力されます。検証時には Designer のサイドファイル(*.designer.ts)は書き込まれません。JSON 出力や Designer の更新が必要な場合は、robomotion build を使用してください。(build と同様に、SubFlow ノードから参照されていない subflows/<id>.ts は削除され、その旨が表示されます。)
検証内容
- ノード ID が小文字の 16 進数 6 文字で、一意であること
- ノードの種類が、それぞれのパッケージの pspec に存在すること
- ノードのプロパティ名が pspec スキーマに一致すること(誤字、大文字・小文字の誤り、未定義のプロパティを検出します)
- ポート番号が正しいこと(入力ポートのないノードへの接続や、ノードに存在しないポートからの接続がないこと)
f.addDependency()の名前空間とバージョンがパッケージインデックスに一致すること- Designer がファイルを読み取れること —
@robomotion/sdkのインポートが 1 つであること、ノードがcreateコールバック内に記述されていること、スプレッド構文やヘルパー関数を使用していないこと。「Flow Designer cannot read it」を検出します - 関数のコードが人間に読みやすく記述されていること — 「複数の文が 1 行に書かれている」「ブロック全体が 1 行に書かれている」「同じブロックが複数の Function に貼り付けられている」を検出します
検証しない内容
- トリガーから
Core.Flow.Stopまでの経路があること。 robomotion 26.9.8 以降、Stop が 1 つもないフローでは、Chat In フローまたは App Action フローを除き、validate はwarning: no Core.Flow.Stop nodeと警告しますが、検証には合格します。どこからも接続されていない Stop は検出されません。到達可能な Stop のないフローはロボット上で実行され続けます(次の実行はビジー状態として拒否されます)。接続は自分で確認してください。チェックリストを参照してください。 Stopへの経路と並行して分岐する末端ノード(Debug、Log) — 検証には合格しますが、末端ノードが実行される前に Stop がフローを終了する場合があります- ループの接続パターン(Goto→Label)— 手動で確認してください
- 必須プロパティの不足 — 手動で確認してください
- 変数参照(
Message('varName')が上流での書き込みと一致するか)— 手動で確認してください - ビジネスロジックの正しさ
検証と修正のループ
robomotion validate write-to-clipboard/ # exit 1, error report on stderr
# read the error, edit main.ts to fix, then:
robomotion validate write-to-clipboard/ # exit 0
よくあるエラーと修正方法
| エラーの一部 | 修正方法 |
|---|---|
Unknown property 'inCode' | robomotion describe node <type> を使って、正しいプロパティの一覧を確認してください。 |
Node type X not found in pspec | robomotion get nodes <keyword> を使って、正しい名前を検索してください。 |
Invalid output port N | robomotion describe node <type> でノードの出力数を確認してください。 |
Could not load pspec for Package | 名前空間のスペルを確認し、robomotion get packages <keyword> を使ってください。 |
the Flow Designer cannot read it | ファイルは宣言形式で記述してください。@robomotion/sdk のインポートは 1 つにし、すべてのノードを create コールバック内に記述し、スプレッド構文を使用しないでください。creating-flow の docs/reference/project-format.md を参照してください。 |
several statements on one line / a whole block on one line | Function の func 内の文を、それぞれ別の行に記述してください。creating-flow の docs/reference/function-nodes.md を参照してください。 |
実行前チェックリスト
-
robomotion validateが終了コード 0 で終了する — これは Designer がファイルを読み取れることと、すべての Function の書式が正しいことも意味します - トリガーから
Core.Flow.Stopまでの経路がある(Stop が 1 つもない場合、validate は警告するだけです。接続は自分で確認してください):トリガーからワイヤーをたどり、すべての経路が Stop で終わることを確認してください。Debug/Logの末端ノードは最後のステップの 1 つ前のノードから分岐させ、Stop と並行して分岐させないでください。Stop を一切置かないのが正しいのは、次の 2 種類のフローに限られます。アプリのバックエンド(Robomotion.Apps.Action。すべての経路がApp Respondで終わる)とチャットフロー(Robomotion.ChatAssistant.ChatIn。すべてのターンがChat Outで終わる) - ループに Goto→Label の接続がある(手動で確認)
- 必須プロパティが設定されている(手動で確認)
- 複数の出力を持つノードで、ポート番号が正しい
関連スキル
creating-flow— フローを生成しますrunning-flow— 検証後に実行しますsearching-packages— 適切なノードタイプ/パッケージを見つけます
コメント
Markdown 対応