Application Integrationでワークフローをノーコードでサクッと作成
先日、人事部を訪ねると人事部員が3人並んで AppSheet(Google製ノーコードアプリ開発ツール)でアプリ開発をしてる光景に出会しました。手前味噌ではありますが、控え目に言ってすごくないですか?自走DXする現場。そんなノーコード推しの私が今回紹介するはGoogle CloudのApplication Integration。2023年7月にリリースされたiPaaSと呼ばれるクラウドサービス上でのデータ連携プラットフォームです。
Application Integrationとは
Application Integration は Google Cloud の Integration Platform as a Service(iPaaS)ソリューションです。多様な業務を支えるために必要な数多くのアプリケーション(Google Cloud サービスややサードパーティ製 SaaS)とデータを連携させ、管理する中核的なインテグレーション ツールを幅広く備えています。
AWSで言うと AppSync が近いサービスになると思います。Application Integrationsは、メッセージング、API管理、データ統合、ワークフロー自動化などの機能を提供している一方、AppSyncは、GraphQL APIの作成、管理、およびデプロイに特化した機能を提供しています。という違いがあるとBardは言っています。サービス紹介を見ると各種SaaSとのコネクタがたくさん載っているので Zapier?とも思いましたが、「Application Integrationsは、クラウドベースのアプリケーション統合を実現したい企業に適したサービスです。Zapierは、簡単なアプリケーション統合を実現したい企業に適したサービスです」とこれまたBardが言っています。
Application Integrationを始める
様々なサードパーティのビジネスアプリケーションとのコネクタが用意されており、Application Integrationから簡単に接続することができるようになっています。
公式チュートリアルでも「Salesforce の商談から BigQuery への注文を自動化する」といったものが提供されており、各種アプリとGoogle Cloudのサービスの連携が強調されています。一方、タスクにはスプレッドシートへの書き込みやメール送信、承認プロセスといったデイリーの部内業務でのGoogle Workspaceの機能拡張的な使い方もできそうなものも多く用意されています。
MBSでは各種社内申請をペーパーレス化しており、かつては決裁印が必要だったような申請には、Googleフォームからの申請にGoogle Apps Scriptでメールによる承認フローの仕組みを取り入れています。今回はこの承認プロセスをノーコードでサクッと置き換えられるか試してみます。
簡単のために、このようなストーリーにします。
「パソコンを購入希望する部署はフォームより、希望するOS、台数、部署名を申請。機材管理部は申請内容を確認して承認あるいは却下する。承認されると資材部に購入依頼メールが送信される。」
では早速作っていきましょう。
Googleフォームの作成
- 購入を希望するPCのOS
- 台数
- 部署名
を入力するだけの簡単なフォームを作成しておきます。
インテグレーションの作成
Google Cloudのコンソールを日本語表記にしているとApplication Integrationは「アプリケーションの統合」と表示されるのでちょっとわかりにくいです。まだ大阪リージョンでは利用できないようです。今回はus-central1を選択しています。
「+CREATE INTEGRATION」よりインテグレーションを作成します。
名称と説明を入力、リージョンを選択して「CREATE」を押すとインテグレーションデザイナーが開きます。
トリガーの設定
デザイナーのTRIGGERSより「API」をドラッグ&ドロップ。これでインテグレーションを起動するAPIエンドポイントが作成されました。デフォルトでは「api_trigger/applicationForm_API_1」のようなIDが付与されます。
APIはこのように任意のアプリケーションから呼び出すことが可能です。
curl -X POST \ -H "authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" \ -d '{"trigger_id":"api_trigger/test_API_1"}' \ "https://us-east1-integrations.googleapis.com/v1/projects/demo-project/locations/-/integrations/-:execute"
変数の設定
APIで受け取るパラメーターを入力変数として設定します。
左側の変数ペイン「+CREATE」で変数を新規作成します。今回はフォームから
{ "os": "Mac", "machineNum":3, "dept": "DX" } のようなJSON形式で入力情報を受け取るものとします。
作成した変数はメールの本文などでも $formInput.os$ のように書くことで文字列として利用できます。
購入希望台数は整数で表示したいので、Integer に変換したとき用の変数も用意しておきます。
machineNumInteger (Data Type : Integer)
変数の型変換
TASKS から「Data Mapping」をドラッグ&ドロップして API Trigger と接続します。
Data Mapping をクリックし、DATA MAPPIMNG EDITOR を開きます。
Input に formatInput.machineNum をドラッグ&ドロップ、「+」より ROUND() 関数をアタッチします。 Output には machineNumInteger をドラッグ&ドロップします。
タスクの設定(承認プロセス)
TASKS から「Approval」をドラッグ&ドロップして Data Mapping と接続します。
Recipients に承認者のメールアドレスを入れます。
Custom notification mesage は以下のような文言にしました。
$formInput.dept$がPC購入申請を提出しました。$formInput.os$を $machineNumInteger$台 購入希望しています。
タスクの設定(メール送信)
TASKS から「Send Email」をドラッグ&ドロップして Approval と接続します。
接続の矢印をクリックして、Condition を以下のように設定し、承認されたときのみ Send Emailに移行するようにします。
$`Task_2_isApproved`$ = True
PC購入申請を受理しました。
Body :
$formInput.dept$のPC購入申請を承認しました。$formInput.os$を $machineNumInteger$台 購入します。
テスト
これで Application Integration の設定は完了です。
画面右上の ▶︎TEST をクリックします。入力をもとめられるので、JSONのスキーマ作成時に利用したサンプルデータをダイアログで入力します。
正しく設定されていると、承認者にメールが送信されます。
届いたメールに書かれたリンクをクリックすると、承認画面が開きます。
承認タスクで設定した通り、申請内容が表示されます。(実際にはメールにも同じ文言が書かれています。)「Approve」をクリックすると承認完了です。
承認が完了すると、Send Mail で設定した購入担当者のメールアドレスにメールが送信されます。
最後にGoogleフォームからの申請でトリガーしてみましょう。
Googleフォームからのトリガー設定
最初に作ったフォームにスクリプトを書いて、フォーム申請をトリガーに起動するようにします。
function triggerAPI(e) { FormApp.getActiveForm(); var formResponse = e.response; var itemResponses = formResponse.getItemResponses(); var token = PropertiesService.getScriptProperties().getProperty('TOKEN'); var os = itemResponses[0].getResponse() var machineNum = +itemResponses[1].getResponse() var dept = itemResponses[2].getResponse() var payload = { 'trigger_id': 'api_trigger/applicationForm_API_1', 'inputParameters': { 'formInput': { 'jsonValue': `{ 'os': ${os}, 'machineNum': ${machineNum}, 'dept': ${dept} }` } } } var header = { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' } var options = { 'method': 'post', 'payload': JSON.stringify(payload), 'headers': header } var requestUrl = 'https://integrations.googleapis.com/v1/projects/プロジェクト名/locations/us-central1/integrations/applicationForm:execute' var response = UrlFetchApp.fetch(requestUrl, options); }
フォームから申請すると承認フローが走るようになりましたね。
でも使い方としてはやっぱりちょっと違うかな。