kintoneとMicrosoft Azureを連携してみよう (Azure Functionsその1)

著者名:菊地 宏司

目次

こんにちは。菊地です。

今回はkintoneとMicrosoft Azureの連携について紹介したいと思います。

Microsoft Azureとは

まず Microsoft Azure (External link) とは、分析、コンピューティング、データベース、モバイル、ネットワーク、ストレージ、Webの機能をもつ総合的なクラウドサービスプラットフォームです。

仮想マシン、モバイル、ビックデータ、機械学習、IoTとさまざまなことができるAzureですが、今回はその中のAzure Functionsを使ってkintoneと連携してみます。
このAzure Functionsは小規模なコードを実行できるサービスになっており、AWSのLambdaに似たような物となっています。

設定方法はブラウザー上から可能で、Azureサービスのイベント処理、cronジョブを使用したバッチ処理、HTTPトリガー(Webhook)等のイベントの際にNodeJSやC#のコードを実行できます。

また、これらの処理がサーバーレスで実現できるのも特徴です。
ハードやネットワークのことなんて考えなくてOK!お手軽ですね。

Azure Functions使用例

定期実行でkintone REST APIを実行する

Azure Functionsの設定でcron形式のタイマー設定が可能です。

HTTPトリガーを使ってAzureサービスと連携する

Azure Functionsを使うことによりAzureサービスとの連携が柔軟に対応できます。

ということで、発想次第でいろいろな使い方ができるサービスとなっています。
それではAzure Functionsを利用するための準備を以下の手順に沿ってやってみましょう。

Azure Functionsの準備

以下の手順でAzure Functionsの環境を準備しましょう。

  1. Microsoft Azureアカウントの準備 (External link)
  2. Azure Functionsの準備 (External link)
  3. Azure Functions関数の準備 (External link)

パッケージモジュールのインストール

次に以下の手順でNodeJSのパッケージをインストールします。

  1. 「高度なツール」→「移動」を選択します。

  2. Kuduが開かれます。
    「Debug console」から「CMD」をクリックしコンソール画面を表示します。

  3. このコンソールからパッケージをインストールしていきます。

  4. 画面上部にあるフォルダー名のリンクを選択して作成したFunctionのフォルダーに移動します。

    1
    
    D:\home\site\wwwroot\<function_name>

  5. フォルダーに移動したら、npmコマンドを実行します。

    • package.jsonの生成

      1
      
      D:\home\site\wwwroot\<function_name>> npm init

      いろいろ英語で質問されますが、"name"と"description"だけ入力して他はEnterキーで進んで問題ありません。

    • package install

      今回はnode-fetch(バージョン2)を使用します。

      1
      
      D:\home\site\wwwroot\<function_name>> npm install node-fetch@2

      インストールが完了したらnode_modulesフォルダーとpackage.jsonが作成されます。
      package.jsonを開いて、以下のように設定がされていたらOKです。

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      
      {
        "name": "test",
        "version": "1.0.0",
        "description": "",
        "main": "index.js",
        "dependencies": {
          "node-fetch": "^2.6.6"
        },
        "devDependencies": {},
        "scripts": {
          "test": "echo \"Error: no test specified\" && exit 1"
        },
        "author": "",
        "license": "ISC"
        // ......
      }

これでパッケージのインストールは完了です。

Functionエディターについて

① 表示する関数のファイルを切り替えることができます。

② 関数で実行する処理内容を記述します。

③ context.logなどのログ内容が表示されます。

④ 関数実行時のパラメーターを設定します。

コードの記述

Azure Functionsの準備ができたら次はコードを書いていきます。
今回はシンプルなkintoneのレコードを取得してログに表示するサンプルです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/*
 * Copyright (c) 2021 Cybozu
 *
 * Licensed under the MIT License
*/
const fetch = require('node-fetch');

const GET_URL = 'https://{subdomain}.cybozu.com/k/v1/records.json';
const APP_ID = 0; // アプリID
const APP_TOKEN = '{app token}'; // アプリトークン

module.exports = async (context, data) => {
  const url = GET_URL + '?app=' + APP_ID;
  const response = await fetch(url, {
    headers: {
      'X-Cybozu-API-Token': APP_TOKEN,
    },
  }).catch((error) => {
    // 通信自体にエラーが発生したとき
    context.log('error:' + error);
    context.fail();
  });

  const body = await response.json();

  // kintoneからエラーのレスポンスがかえってきたとき
  if (!response.ok) {
    context.log('error:' + JSON.stringify(body, null, '  '));
    context.fail();
  }

  context.log('success:' + JSON.stringify(body, null, '  '));
  context.done();
};

上記のJSをエディターに貼り付けてkintoneのサブドメインとアプリIDと APIトークン を変更してください。

1
2
3
const GET_URL = 'https://{subdomain}.cybozu.com/k/v1/records.json';
const APP_ID = 0;
const API_TOKEN = '{app token}';

変更ができたらコードを保存して画面下部の「実行」ボタンを押します。
ログにkintoneのレコードが表示され、出力のHTTP応答コードが「200 OK」と出ていれば成功です。

おわりに

さて、今回はレコードの取得までとなりますが、この処理をベースにしてkintoneからレコードを取得→更新や、取得したレコード情報を別システムに登録などができます。

次回は定期的にkintoneアプリAのデータを集計して、アプリBに登録してみます。
次回記事はこちら! kintoneとMicrosoft Azureを連携してみよう (Azure Functionsその2)

information

このTipsは、2022年1月版kintoneで動作を確認しています。