外部システムで管理しているマスタデータを Questetra BPM Suite でも利用したいということが考えられます。今回は kintone アプリで管理しているデータを、Questetra BPM Suite の「検索セレクトボックス」の外部マスタとして使用します。

kintone と Questetra BPM との中継に、 AWS(Amazon Web Service)の API Gateway と Lambda を使用します。AWS のリソースを作成には Terraform を使用します。

kintone には日本版(https://kintone.cybozu.co.jp/)と海外版(https://www.kintone.com/)がありますが、本記事で紹介する方法はいずれの環境でも使用できます(画面キャプチャは海外版のものを掲載しています)。
マスタデータを Questetra 外部で管理するメリット、デメリットについては「Questetra でマスタデータを管理するいくつかの方法」をご参照ください(本記事で紹介する方法は「パターン1」に該当します)。

「検索セレクトボックス」とは?

「検索セレクトボックス」は、データ項目の種類の一つです。検索文字列を入力して検索ボタンを押すとマスタデータから検索文字列を含む選択肢が表示され、そこからデータを選択して入力できます。

利用する AWS のサービス

本記事で紹介する方法では、AWS(Amazon Web Service)の以下のサービスを利用します。カッコ内に用途を示します。

  • Lambda(アプリケーションの作成)
  • API Gateway(API の作成)

仕組み

大枠の仕組みは下図の通りです。

「検索セレクトボックス」が API Gateway に GET リクエストを送信すると、Lambda にイベントが送られます。Lambda はイベントをもとに kintone アプリにデータを問い合わせるリクエストを送信し、結果を返します。 

手順概要

まず、kintone アプリを作成します。kintone アプリの情報を変数に代入し、Terraform を用いて AWS リソース(API Gateway と Lambda 関数)を作成します。API Gateway のエンドポイントを「検索セレクトボックス」の「選択肢データの URL」として設定します。

大まかな流れを示します。

  1. kintone アプリを準備する
  2. Terraform のテンプレートを GitHub から取得する
  3. Terraform 実行のための AWS 認証情報を設定する
  4. Lambda 関数で使用するパッケージをインストールする
  5. テンプレートの変数を設定する
  6. AWS リソースを作成する
  7. Questetra BPM Suite で「検索セレクトボックス」を用いたアプリを作成する

必要環境

本記事の手順を進めるには以下のものが必要です。

手順

1. kintone アプリを準備する

まず、kintone アプリを準備します。まだアプリがない場合は新規作成します。

kintone アプリがすでにある場合は、「1-1. アプリを作成する」をとばして、「1-2. フィールドコードを確認する」に進んでください。

1-1. アプリを作成する

kintone ポータルのアプリブロックの「+」ボタンをクリックします。

どのアプリでも問題ありませんが、本記事では「Customer Database」を使用します。「Customer Service」カテゴリ内のアプリ「Customer Database」を追加します。

アプリが作成されたら、右上の+ボタンからデータをレコードを数件作成しましょう。本記事では「Company Name」フィールドしか使わないため、他のフィールドは空欄でも問題ありません。

1-2. フィールドコードを確認する

表示ラベルとして使用するフィールドと、選択肢 ID として使用するフィールドについて、それぞれフィールドコードを確認します。表示ラベルが検索対象となります。

本記事では、「Company Name」を表示ラベルとして使用することにします。

アプリの歯車ボタンをクリックし、設定画面に進みます。

使用するフィールド(ここでは「Company Name」)の歯車ボタンをクリックし、「設定(Settings)」を開きます。

設定画面に表示されるフィールドコードをメモしておきます(ここでは「company_name」となっています)。

選択肢 ID として使用するフィールドのフィールドコードも、同様に確認しメモします。

本記事では「レコード ID」を選択肢 ID として使用することにします。「レコード ID」はフィールド一覧に表示がなくても、メタ情報として自動的に作成されるフィールドです。フィールドコードは「$id」に設定されています。

1-3. API トークンを作成する

kintone REST API でアプリのデータを取得するための API Token を作成します。アプリの設定画面の「設定(App Settings)」のタブを開き、「API トークン(API Token)」へと進みます。

「生成する(Generate)」をクリックし、下記3つの情報をメモしておきます。

  • API トークン
  • ドメイン(xxxxx.kintone.com または xxxxx.cybozu.com)
  • アプリ ID(数字)

その後、忘れずに「保存」をクリックします。

次の画面で表示される「アプリを更新(Update App)」をクリックするのも忘れないようにしてください(クリックしないと API トークンが保存されません)。

2. Terraform のテンプレートを GitHub から取得する

こちらの GitHub レポジトリから Terraform のテンプレートをダウンロードします。

3. Terraform 実行のための AWS 認証情報を設定する

AWS の IAM コンソールを開き、左メニューの「ユーザー」から Terraform の実行に使用するユーザーを選択します。

ルートユーザー以外の管理者ユーザーの使用が推奨されています。新しい管理者 IAM ユーザーの作成方法はこちら(公式ドキュメント)を参照してください。

「認証情報」タブの「アクセスキーの作成」をクリックし、表示されたアクセスキー ID とシークレットアクセスキーをメモしておきます。

次の aws コマンドを実行します。

aws configure

このコマンドを実行すると、次の4 つの情報の入力が求められます。

  • アクセスキー ID
  • シークレットアクセスキー
  • AWS リージョン
  • 出力形式

アクセスキー ID とシークレットアクセスキーは先ほどメモしたものを、AWS リージョンと出力形式はデフォルトとして使用したいものを入力します(参考)。

たとえば、次のように入力します。

AWS Access Key ID [None]: {アクセスキー ID}
AWS Secret Access Key [None]: {シークレットアクセスキー}
Default region name [None]: us-east-2
Default output format [None]: json

4. Lambda 関数で使用するパッケージをインストールする

手順 1. でダウンロードしたテンプレート内の lambda-src ディレクトリ内で

npm install

を実行し、必要なパッケージをインストールします(node_modules ディレクトリが作成されます)。

5. テンプレートの変数を設定する

手順 1. でダウンロードしたテンプレートの Choices-AWS-Lambda-Kintone ディレクトリ直下に vars.tfvars ファイルを作成し、variables.tf で定義されている変数の値を指定します。(variables.tf 内で default 値が設定されている変数は vars.tfvars 内で値を指定する必要はありません。)

たとえば、vars.tfvars ファイルの内容は次のようになります。

aws_region = "us-east-2"
kintone_domain = "xxxxx.kintone.com"
kintone_api_token = "{API トークン}"
kintone_app_id = 5
kintone_app_value_field = "$id"
kintone_app_display_field = "company_name"

6. AWS リソースを作成する

AWS リソースを作成し、HTTP 経由で kintone アプリのデータを選択肢データとして取得できるようにします。

本記事では API Gateway に対してアクセス制限をかけていないため、エンドポイント URL が外部に漏れると誰でも選択肢データにアクセスできます。エンドポイント URL が外部に漏れないよう管理するか、必要に応じてアクセス制限を設定してください。

ディレクトリ内で

terraform init

を実行してワークスペースとして初期化し、

terraform plan -var-file=vars.tfvars

を実行して変更内容を確認します(このコマンドでは変更は適用されません)。ログや変更内容が表示されたあと、次のように11個のリソースを作成予定というメッセージが出るはずです。

Plan: 11 to add, 0 to change, 0 to destroy.

変更内容に問題がなければ、

terraform apply -var-file=vars.tfvars

で変更を実行します。

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value:

と表示されるので、

yes

と入力して実行を確定します。

次のように表示されると AWS リソースの作成は完了です。

Apply complete! Resources: 11 added, 0 changed, 0 destroyed.

Outputs:

api_url = {API Gateway のエンドポイント}

表示された API Gateway のエンドポイントをメモしておいてください。

AWS リソースが作成できたら、API Gateway のエンドポイントにブラウザでアクセスし、動作確認してみましょう。次のように XML が表示されれば成功です。

7. Questetra BPM Suite で「検索セレクトボックス」を用いたアプリを作成する

Questetra BPM Suite でアプリを作成し、データ項目に「検索セレクトボックス」を追加します(表示名は「検索セレクト」です)。「選択肢種別」で「HTTP 経由で取得した選択肢」を選択し、「選択肢データの URL」に API Gateway のエンドポイントを入力し、「適用して閉じる」をクリックします。

アプリをリリースし、フォームを確認してみましょう。検索文字列を入力して検索ボタンを押すと、条件に合致する選択肢が表示されます。

kintone の仕様により、検索キーワード入力時には注意が必要です。例えば、英数字の場合は単語単位で検索されるため、「ABC Company」を検索するには「ABC」または「Company」と入力します。「AB」「Co」など単語の一部では検索できません。日本語の場合は、2文字以上の単語に対して1文字検索ができません。

検索キーワードについての詳細は、こちらのヘルプページ内の「検索キーワード入力時の注意事項」のセクションを参照してください。

いかがでしたでしょうか。今回は kintone を使用しましたが、同様の方法で他のサービスを外部マスタとして使用することもできます。マスタデータの性質、用途に合わせて外部サービスの利用も検討してみてください。

参考)「依存する親データ項目」を利用するには

今回紹介した方法で kintone アプリを外部マスタとして使用する場合、検索セレクトボックスの「依存する親データ項目」を利用する際には注意が必要です。

通常、親の[選択肢 ID]と先頭部分が一致する[選択肢 ID]を持つ子の選択肢がフィルタされますが(詳細はこちら)、kintone アプリのデータは前方一致検索ができないため、親の[選択肢 ID]を含む[選択肢 ID]を持つ子の選択肢がフィルタされます。

また、[選択肢 ID]を英数字で設定する場合、kintone では単語単位で検索される( _ や # も単語の一部とみなされます)ため、親の[選択肢 ID]が別単語とみなされるように子の[選択肢 ID] を設計する必要があります。

良くない例

次のように設計してしまうと、親選択肢を使って子の選択肢をフィルタすることができません。(子の[選択肢 ID]が1単語とみなされ、親の[選択肢 ID]で検索してもヒットしないため)

親選択肢
選択肢 ID表示ラベル
hホット
cコールド
子選択肢
選択肢 ID表示ラベル
h1コーヒー
h2紅茶
c1アイスコーヒー
c2アイスティー
c3オレンジジュース

良い例

次のように子選択肢の[選択肢 ID]にハイフン( – )を加えると、親選択肢を使って子選択肢をフィルタできるようになります。

親選択肢
選択肢 ID表示ラベル
hホット
cコールド
子選択肢
選択肢 ID表示ラベル
h-1コーヒー
h-2紅茶
c-1アイスコーヒー
c-2アイスティー
c-3オレンジジュース
%d人のブロガーが「いいね」をつけました。