Discourse ワークフロー

Discourse Workflows 独自の JavaScript 式システムであり、Liquid や Handlebars のような別のテンプレート言語ではなく、サーバーサイドでサンドボックス内で評価されるものと思われます。

例えば、以下のように記述できます:

={{ $json.topic.title.toLowerCase() }}

{{ ... }} の中身は JavaScript として評価されるため、toLowerCase() は通常の JavaScript 文字列メソッドとして機能します。

実装は plugins/discourse-workflows/lib/discourse_workflows/expression_resolver.rb にあります。$json$input$itemIndex$trigger$execution$() といったワークフロー固有のグローバル変数を公開しています。

構文や概念は n8n にかなり似ています。実際、Workflows のソースコードの別の場所には n8n への明示的な参照があります:

以下のコミットはマージノードの結合動作を追加したもので、テストの説明には以下のように記載されています:

defaults clash handling to add_suffix (matches n8n position combine)

つまり、Workflows の一部が意図的に n8n の動作に合わせているという証拠はありますが、式言語自体が n8n からコピーされたものや n8n に基づいていることを明示的に述べているものを見つけることはできませんでした。したがって、これを Discourse Workflows が提供するサンドボックス化された JavaScript 式、かつ n8n 風の慣習をいくつか含んだもの、と説明するのが適切だと思います。

「いいね!」 3