Workato：2025年3月のConnector SDKのアップデート（Rubyのメソッド制限撤廃、ほか）

# はじめに

Workatoでは、2025年3月にConnector SDK（カスタムコネクタ）上でのRubyメソッド制限が撤廃されました。また、これにあわせて利用可能なライブラリの追加も行われました。

なお、Workatoのドキュメント上ではConnector SDKを対象とし、Rubyコネクタを対象としない旨の記載はありますが、Rubyコネクタもホワイトリストは撤廃されているようで、確認したところホワイトリスト外のメソッドを呼び出して利用することもできましたので、（今後変更される可能性は無いとは言い切れませんが）、Rubyコネクタを活用している場合においても有用なアップデートになるものと思います。　

## Rubyメソッド制限の撤廃

Connector SDKで利用可能なRubyメソッドは、これまでホワイトリストで示された範囲に制限されていましたが、これが撤廃され、Ruby 2.7が提供する全てのメソッドを利用することができるようになりました。

https://docs.workato.com/developing-connectors/sdk/sdk-reference/ruby_methods.html

https://docs.workato.com/developing-connectors/sdk/sdk-reference/whitelist-removal.html

> WHITELIST REMOVAL
> 
> Workato has removed whitelisting for its SDK framework, starting March 2025. This means that developers can now access the full functionality of Ruby 2.7, including built-in libraries, and any available Ruby gems in the SDK container. This change significantly expands the range of capabilities SDK developers can leverage within the platform.
> 
> Learn more(opens new window) about the capabilities available with the removal of ruby whitelisting.
> 
> This enhancement doesn't apply to the Ruby code connector


## プリインストールされたRuby Gem（ライブラリ）

以下に示すRuby gem（ライブラリ）もプリインストールされており、これらを活用したカスタムコネクタの開発も行えるようになりました。

- activesupport
- aws-sigv4
- charlock_holmes
- concurrent-ruby
- gyoku
- i18n
- jwt
- loofah
- mime-types
- nokogiri
- rails-html-sanitizer
- rest-client
- ruby_rncryptor

なお、上記を含めて利用可能なライブラリは、以下のようなコードをConnector SDK上に作成し、アクションをテスト実行することで確認することが出来ます。

```ruby
{
  title: "Application name",

  connection: {
  },
  
  test: lambda do |_connection|
  end,

  actions: {
    testdrive: {
      title: 'debug',
      input_fields: lambda do |object_definitions|
      end,
      execute: lambda do |connect, input|
        cmd = 'gem list'
        {
          libs_path: $:,
          gems: `#{cmd}`
        }
      end,
      output_fields: lambda do |object_definitions|
        [
          {title: 'libs_path'},
          {title: 'gems'},
        ]
      end
    }
  },
}

```

アクションをテスト実行すると、次のような結果が出力されます。
```json
{
	"libs_path": [
		"/main/bundle/bundler/../ruby/2.7.0/gems/workato-connector-sdk-1.3.11/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/webrick-1.8.1/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/tzinfo-data-1.2024.1/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/thor-1.3.0/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/sorbet-runtime-0.5.11336/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/rubyzip-2.3.2/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/ruby_rncryptor-3.0.2/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/ruby-progressbar-1.13.0/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/rest-client-2.1.0/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/rails-html-sanitizer-1.4.4/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/rack-2.2.8/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/netrc-0.11.0/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/net-http-digest_auth-1.4/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/msgpack-1.7.2/lib",
		"/main/bundle/bundler/../ruby/2.7.0/extensions/x86_64-linux/2.7.0/msgpack-1.7.2",
		"/main/bundle/bundler/../ruby/2.7.0/gems/mime-types-3.5.2/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/mime-types-data-3.2024.0206/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/loofah-2.21.3/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/nokogiri-1.15.6-x86_64-linux/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/racc-1.7.3/lib",
		"/main/bundle/bundler/../ruby/2.7.0/extensions/x86_64-linux/2.7.0/racc-1.7.3",
		"/main/bundle/bundler/../ruby/2.7.0/gems/mini_portile2-2.8.5/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/launchy-2.5.2/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/jwt-2.1.0/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/http-cookie-1.0.5/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/http-accept-1.7.0/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/gyoku-1.3.1/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/em-http-request-1.1.7/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/http_parser.rb-0.8.0/lib",
		"/main/bundle/bundler/../ruby/2.7.0/extensions/x86_64-linux/2.7.0/http_parser.rb-0.8.0",
		"/main/bundle/bundler/../ruby/2.7.0/gems/em-socksify-0.3.2/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/eventmachine-1.2.7/lib",
		"/main/bundle/bundler/../ruby/2.7.0/extensions/x86_64-linux/2.7.0/eventmachine-1.2.7",
		"/main/bundle/bundler/../ruby/2.7.0/gems/domain_name-0.6.20240107/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/crass-1.0.6/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/cookiejar-0.3.4/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/charlock_holmes-0.7.7/lib",
		"/main/bundle/bundler/../ruby/2.7.0/extensions/x86_64-linux/2.7.0/charlock_holmes-0.7.7",
		"/main/bundle/bundler/",
		"/main/bundle/bundler/../ruby/2.7.0/gems/builder-3.2.4/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/aws-sigv4-1.2.4/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/aws-eventstream-1.3.0/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/addressable-2.8.6/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/public_suffix-5.0.4/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/activesupport-5.2.8.1/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/tzinfo-1.2.11/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/thread_safe-0.3.6/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/minitest-5.22.2/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/i18n-0.9.5/lib",
		"/main/bundle/bundler/../ruby/2.7.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby",
		"/usr/local/lib/ruby/site_ruby/2.7.0",
		"/usr/local/lib/ruby/site_ruby/2.7.0/x86_64-linux",
		"/usr/local/lib/ruby/site_ruby",
		"/usr/local/lib/ruby/vendor_ruby/2.7.0",
		"/usr/local/lib/ruby/vendor_ruby/2.7.0/x86_64-linux",
		"/usr/local/lib/ruby/vendor_ruby",
		"/usr/local/lib/ruby/2.7.0",
		"/usr/local/lib/ruby/2.7.0/x86_64-linux"
	],
	"gems": "
benchmark (default: 0.1.0)
bigdecimal (default: 2.0.0)
bundler (default: 2.1.4)
cgi (default: 0.1.0.2)
csv (default: 3.1.2)
date (default: 3.0.3)
dbm (default: 1.1.0)
delegate (default: 0.1.0)
did_you_mean (default: 1.4.0)
etc (default: 1.1.0)
fcntl (default: 1.0.0)
fiddle (default: 1.0.0)
fileutils (default: 1.4.1)
forwardable (default: 1.3.1)
gdbm (default: 2.1.0)
getoptlong (default: 0.1.0)
io-console (default: 0.5.6)
ipaddr (default: 1.2.2)
irb (default: 1.2.6)
json (default: 2.3.0)
logger (default: 1.4.2)
matrix (default: 0.2.0)
minitest (5.13.0)
mutex_m (default: 0.1.0)
net-pop (default: 0.1.0)
net-smtp (default: 0.1.0)
net-telnet (0.2.0)
observer (default: 0.1.0)
open3 (default: 0.1.0)
openssl (default: 2.1.4)
ostruct (default: 0.2.0)
power_assert (1.1.7)
prime (default: 0.1.1)
pstore (default: 0.1.0)
psych (default: 3.1.0)
racc (default: 1.4.16)
rake (13.0.1)
rdoc (default: 6.2.1.1)
readline (default: 0.0.2)
readline-ext (default: 0.1.0)
reline (default: 0.1.5)
rexml (default: 3.2.3.1)
rss (default: 0.2.8)
sdbm (default: 1.0.0)
singleton (default: 0.1.0)
stringio (default: 0.1.0)
strscan (default: 1.0.3)
test-unit (3.3.4)
timeout (default: 0.1.0)
tracer (default: 0.1.0)
uri (default: 0.10.0.2)
webrick (default: 1.6.1)
xmlrpc (0.3.0)
yaml (default: 0.1.0)
zlib (default: 1.1.0)
"
}
```

## ユースケース

以下のページにも例示されていますが、一例として、次のようなユースケースへの適用が可能です。

https://docs.workato.com/developing-connectors/sdk/sdk-reference/whitelist-removal.html#example-connector-ideas

- Webスクレイピングによるデータ収集
- XMLおよびHTMLのデータ解析
- 並列処理によるパフォーマンス向上
- JWS認証
- Amazon S3との連携