背景
株式会社出前館 二宮と申します。
出前館では、Workatoを使った業務自動化を推進しています。
具体的にどう使っているかシリーズのおかわりをお届けします。
Workatoのプロパティ
Workatoには以下2種類のプロパティがあります。
- Environment Properties
https://docs.workato.com/en/features/account-properties.html - Project Properties
https://docs.workato.com/en/features/project-properties.html
それぞれに何を設定するかは、Projectをどういう単位で作るのかにも関わってきます。
弊社の場合はこちらに書いてあるとおりです。
https://qiita.com/demae-ninomiya/items/b06897b76278db8ea49b
プロパティ設定内容
開発をしながら必要なプロパティを洗い出していくやり方もあるかと思いますが、今回は最初にある程度出しておくことにしました。
まずプロパティに持たせる値を洗い出し、それをEnvironment/Projectのどちらに入れるか決める流れです。
どちらに入れるかは、各プロパティのスコープを元に決めます。
プロパティ値の洗い出し
プロパティを使うメリットは次のようなものがあります。このメリットを活かせる場面で使うことになります。
- 開発後に値を変更することが容易になる(複数箇所で使っていても、一箇所直せばよい)
- マジックナンバーが排除できる(たとえば、数字
3をretry_limitなどのプロパティに置き換えることで、数字の意図を明確にできる)
プロパティの使い分け
それぞれのスコープは以下のとおりです。
| プロパティの種類 | スコープ | 何に使うか |
|---|---|---|
| Environment Properties | Workspace全体 | 環境ごとに変えたい固有の値 |
| Project Properties | プロジェクト内 | 環境ごと・プロジェクトごとに変えたい固有の値 |
設定した値
洗い出しの結果、以下のようなものを設定しました。
環境名(Environment Properties)
各環境の名前(DEV環境は"dev"、TEST環境には"test"など)です。
処理完了通知やエラー通知を出す際、メッセージの先頭へ出力しています。
特にテスト中は多くの通知を受け取ることになるため、見逃してはいけない本番のエラーを見分けることに役立っています。
SaaSのベースURL(Environment Properties / Project Properties)
Projectをまたいで使われるようなSaaSのうち、環境ごとにURLが異なり、通知にURLを出力したい場合に使います。
たとえばkickflowなどです。
逆に、ひとつのProject内に閉じる局所的な利用のSaaSの場合、Project Propertiesに持たせました。
SaaSのメールアドレスドメイン(Environment Properties)
SaaSで使うメールアドレスのドメインが環境ごとに異なる場合のプロパティです。
弊社の場合、GWSの検証用テナントと本番テナントでユーザーのメールアドレスのドメインが異なるため、プロパティに設定しました。
Slack通知先チャンネルID(Environment Properties / Project Properties)
処理完了通知やエラー通知の通知先チャンネルです。
基本的に全てのレシピが同じチャンネルへ通知するような設計にしたため、Environment Propertiesに持たせています。
例外的に別のチャンネルへ通知したいケースではProject Propertiesを使います。
通知先SlackグループID(Environment Properties / Project Properties)
チャンネルIDと同じく、メンション用のグループIDもプロパティにしました。
その他
一般的なプログラミングで定数にするような値をProject Propertiesとしました。
TIPS:リテラルをどこまでプロパティ化するか問題
人によって感覚が違いそうです。
個人的には、「同じリテラルが3回出てきたら必ずプロパティにする。2回以下ならそのときによる」を目安にしています。
TIPS:プロパティ名をどうつけるか問題
プロジェクト内に複数のレシピがあり、それぞれのレシピのインプット用フォルダIDをProject Propertiesに持たせるとします。
レシピ名はそれぞれ、recipe_hoge、recipe_fuga、recipe_piyoであるとします。
どういうプロパティ名にするといいでしょうか?
recipe_hoge_folder_id などとするより、
folder_id_recipe_hoge という語順にしたほうが便利だと考えています。
プロパティを名前でソートしたときに同じ用途のものが並ぶようになるからです。
まとめ
プロパティを場当たり的に増やすと負債化しそうだと感じ、レシピを量産する前に整理しました。
あらかじめ Environment Properties を用意しておくことで、開発者がスムーズに開発できる状態になりました。
出前館ではコーポレートエンジニアを募集中です。
お客様の中にマジックナンバー警察の方はいらっしゃいませんか?
「2回までは残すなんて許せない!」と思われたら カジュアル面談 で熱く語ってください。