はじめに
少し前に、1クリックでSlackの投稿を日本語訳してくれるボットを作りました。
- 前編 Slackにインスタントな翻訳機能を提供する-概要編-
- 中編 Slackにインスタントな翻訳機能を提供する-カスタムワークボット設定編-
- 後編 Slackにインスタントな翻訳機能を提供する-レシピ構築編-
今回は、上記で作成したレシピを拡張します。
多言語に翻訳したい
ユーザーに「日本語だけじゃなくて、他の言語にも翻訳できたら嬉しいな!5か国語くらい。それで今後も増やしていきたいかも。できる?」と言われた場合を想像してください。
分岐が大変なことになるのでは? 対応言語を増やすたびにレシピを改修しなきゃいけないの?と身構えてしまいませんか。
安心してください。
If文を乱用せず、今後はレシピメンテ不要でオンタイムに対応言語を増やしていけるようなレシピに仕上げていきましょう。
レシピのビフォーアフター
アクションは増えていませんが、トリガーが少しだけ複雑になっているように見えます。
種明かしをすると、LookupTableを導入して、Workatoの関数(Formulaモード)を使って参照し動的に値を求めることで、レシピの構造を変えずに1ロジックで実現しています。
ここからは細かい改修手順のお話をします。
手順1) LookupTableを用意
絵文字リアクション名と、それに対応するDeepLの言語コードをマッピングします。
・「Slack_reaction」カラム
各国旗の絵文字リアクション名です。
reaction_added
イベントを受信した際に取得される値をセットします。
・「DeepL_languageCode」カラム
DeepLの対象言語コード の値をセットします。
・「memo」カラム
任意(処理では使用せず、備忘用です)
テーブルの用途
このLookupTableには、次の用途を期待します。
-
辞書的に使う
アクションでは、絵文字リクション名からDeepLの言語コードに変換して翻訳する -
ホワイトリスト的に使う
トリガーでは、テーブルに登録されている絵文字のどれかと一致するリアクションだけに反応する
手順2) トリガーの条件を編集
レシピを開いて、トリガーの条件を編集します。
以前は、付けられた絵文字リアクションがjp
(日本)なら、ジョブが実行されました。
今後は、付けられた絵文字リアクションが「用意したテーブルに登録されている国の絵文字」のいずれかと一致すれば、ジョブが実行されるようにします。
Lookup
Formulaを使うと、任意のLookupTableに対して任意の値で絞り込みをかけ、データを抽出できます。
抽出されたデータが「存在するか」を評価するには、is present
を使います。
Lookup
Formulaのテーブル指定は、名称かIDのどちらにも対応しています。
ただし名称を使っている場合、LookupTable名を変更してレシピ側を変更しないとエラーが発生します。テーブル名が変更される可能性がある場合は、IDを使用する方が安全です。
手順3) アクションを編集
Step3のDeepL翻訳処理に移り、フィールドTarget lanuage
を変更します。
入力モードでつらつらと書いてある内容について補足します。
Lookup
Formulaは先ほどトリガーのフィルター編集で出てきました。
今度はその後に ["(カラム名っぽい何か)"] が続いていますね。
Lookup
Formulaで抽出したデータにはすべてのカラムが含まれていますが、DeepLが翻訳するのに必要なのはDeepLの言語コードです。
このため、["カラム名"]でお目当ての要素を取得しています。
(クォーテーションはシングルでもダブルでも構いません)
これで修正は完了しました。
実行結果
多言語に翻訳できました。
さいごに
Workatoは実装が簡単なので、最初はとりあえず動くものを作ってみて、ユーザーの反応を見ながら改良していくことがよくあります。
レシピ作成に関する記事は多く見つかりますが、レシピの修正に関する情報はあまり見かけないため、この記事がメンテナンスに携わる皆さんのお役に立てれば幸いです。