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);
}フォームから申請すると承認フローが走るようになりましたね。
でも使い方としてはやっぱりちょっと違うかな。
%E3%81%AE%E3%82%B3%E3%83%92%E3%82%9A%E3%83%BC%20(8).png)














