Workatoでコネクタ開発に挑戦！ExcelVBA上がりがRubyに苦労した話

## はじめに

Workatoでは、標準で多くのコネクタが用意されています。コネクタはSaaS製品の認証やトリガー/アクションを含んでいるため、Workatoレシピ開発者はコードを書く必要がほとんどありません。

しかし、SaaS製品によってはコネクタが存在しないことがあります。その場合、Workato内でコネクタを開発する必要があります。
ExcelVBA上がりの私は、コネクタをゼロから開発することに挑戦してみました。

## Workatoのカスタム コネクタ概要
コネクタ開発を始める前に、Workato公式では以下のように紹介されています。
>始める前に...
Workato には他にも多数の機能があり、ユニバーサル HTTP コネクタやカスタムアクションなど、統合のニーズがそれほど複雑でない場合は、お客様が望むものを実現するのに役立つ可能性があります。
>カスタム コネクタが必要であると判断した場合は、開発者ポータル(新しいウィンドウを開く)をクリックして、探しているアプリケーションにカスタム コネクタを提供した人がいるかどうかを確認します。

参照元：[Workatoドキュメント](https://docs.workato.com/developing-connectors/sdk.html#what-is-a-custom-connector)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570089/46c1f1af-d396-ea67-75e0-bf6c543b7aad.png)

**● HTTPアクションが存在する**
WorkatoのレシピにはHTTPアクションもあるので、簡単なAPIだったら、わざわざカスタム コネクタを作らずにHTTPアクションに必要な値を設定するだけで連携は可能です。

**● Workatoのライブラリに公開されている**
Workato社が作成したコネクタ以外にも、パートナーが作成したカスタム コネクタも公開されています。自分で作る前に既に公開していれば、ゼロから開発する必要はありません。

## カスタム コネクタ開発

Workatoのカスタム コネクタは、新たに環境を設けなくてもWorkato内で開発することが出来ます。(より正確な開発をしたい方は、「SDK Gem」のインストールが必要）

カスタム コネクタ(コネクタSDK)開発画面は以下になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570089/28cf6849-4d3d-7971-465d-632cbdcb5350.png)

左側がコードを書くところで、右側がビューとなっています。
コードの記載方法が間違っていると右側のビューはエラーで表示されないこともあります。
Workatoのカスタム コネクタはRubyで開発を行います。全てのRubyメソッドを利用できるわけではなく、使用できるのは限られています。
>コードエディターでは使用できるrubyメソッドがあります。つまり、許可リストにない ruby メソッドは、コネクタ内のコードによって呼び出されると、強調表示されたエラーになります。

参照元：[Workato Code エディターの使用](https://docs.workato.com/developing-connectors/sdk/quickstart.html#using-the-workato-code-editor)
使用可能が限られているとしても、ExcelVBA上がりの私にとっては、今のところテクニカルなこともやらないので、不便さを感じていません。(そもそもRubyメソッドとか知りませんでした。)

## ExcelVBA上がりが苦労した話
ExcelVBA上がりの私にとってRubyを理解するのに苦しみました。
以下のコードはWorkatoが用意しているテンプレートのコードです。
```ruby
actions: {
    get_event_types: {
    
    ##########省略##########
    
        execute: lambda do |_connection, _input, _input_schema, _output_schema|
          get("/api/v1/users/me/event_types?include=owner")
        end,     
              
        output_fields: lambda do |object_definitions|
          object_definitions["event_types"]
        end,
```
 get_event_typesのアクションが実行されると**execute**が実行されます。
 **output_fields**が当該アクションのデータピル(変数のようなやつ)になります。つまり**execute**の出力が**output_fields**を通してWorkatoレシピの後続処理に使えるということです。

 コードを見るとlambda doとかは関数の宣言とかなんだろうなーとわかりましたが、 ExcelVBA上がりの私は悩みました。
「・・・・**execute**の出力を**output_fields**にどうやって値渡してるの？」「**object_definitions**。これは何？」

 私の頭の中は以下のコードしかイメージがつきませんでした。
```vb
Get_Response = execute(get)'execute:lambda do...の部分
Result_json = output_fields(Get_Response)'output_fields:lambda do...の部分
```
executeから出力された値をGet_Responseに格納して、output_fieldsにGet_Responseを渡すことによって処理されるのではないの・・・？
なんで引数とか不要なの・・・？

色々悩んだ私は、Workatoのコネクタ開発うんぬんより、まずRubyについて理解しようとChatGPTに聞いてみました。 
>Rubyとは完全なオブジェクト指向プログラミング言語で、すべてがオブジェクトとして扱われます。Rubyではオブジェクト同士が連携し、相互に情報をやり取りすることが一般的です。

ずっと避けてきたオブジェクト指向とまた再会しました。オブジェクト指向についての深い理解は今回も避けたいと思います。Rubyはクラスやらオブジェクトやらで良い感じになるんだろうなーと考えました

今回のカスタム コネクタではget_event_typesというアクション内にexecuteとoutput_fieldsが存在しています。なので、executeの出力を明示的にしなくても、executeとoutput_fieldsは連携しているんだと解釈することにしました。レスポンスデータを加工や出力を定義する場合は、execute内か、output_fields内で処理することにしました。


## おわりに
現在は、AI-OCRのDX Suite コネクタ開発を行っています。DX Suite のカスタム コネクタを利用して、APIで簡単にOCR機能を迅速に使うことが出来れば、業務フローを自体を見直すこともできます。業務フローの例は以下の記事で紹介しています。
[Workato×DX Suite の便利な活用方法について](https://qiita.com/shimamura_bvt/items/96a33b12a86e648924df)

次回は、「DX Suite のカスタム コネクタを紹介」という記事を書きたいと考えているので、頑張ります。

[弊社の概要と記事一覧はこちらからどうぞ](https://qiita.com/organizations/bstylevt/profile)

※「DX Suite」はAI inside 株式会社の登録商標です。