cybozu developer network

カテゴリー内の他の記事

Slack-kintone連携をAzureでもやってみた

記事内で利用しているライブラリ「request」は、非推奨(deprecated)になりました。
HTTP リクエストができる他のライブラリ(axios など)や、https.requst に書き換えることをおすすめします。

このところ、kintoneとAzureを連携する記事がいくつか公開されています。cybozu developer networkではこれまでAWSを使った連携例をご紹介していますが、今回はAzureを使った同様の連携をご紹介し、比較してみたいと思います。

kintoneとAzureの連携関連の記事

kintoneとMicrosoft Azureを連携してみよう(Azure Functionsその1) - レコード取得編

kintoneとMicrosoft Azureを連携してみよう (Azure Functionsその2) - 定期実行編

AWSは使い慣れているけれど、Azureはちょっと良くわからないという方や、どちらを使ったら良いか迷っている方に参考にしていただけたら幸いです。

この記事では、Slackから手軽にkintoneへレコードを登録する方法を題材に、同じことをAzure Functionsを使って実現させてみます。

概要

Slack上で「Todo」で始まる文字列を入力すると、kintoneのToDoアプリにレコードを登録します。詳細は、AWSを使ったTipsページをご参照ください。

Azureを使った連携の全体概要図は以下です。

流れは以下の通りで、AWSを使うときより1工程減ります

  1. SlackのOutgoing Webhookで、Azure Functionsのfunctionを呼び出す
  2. このfunctionで、Slackから受け取った情報を基に、kintoneへのリクエストデータを作成&kintone REST APIを実行しレコード登録

kintoneアプリ

AWS版と同じアプリを使うので、ここでは説明を割愛します。

APIトークンも忘れずに発行しておいてください。

Azure Functions

Azure Functionsの準備に関しては詳しくは、kintoneとMicrosoft Azureを連携してみよう(Azure Functionsその1)をご参照ください。本記事では簡単に記載させていただきます。

関数の作成

  1. Funciton Appの画面からクイックスタート画面を開きます。
  2. シナリオ選択では、「WebHook + API」を選択します。
  3. 言語の選択は、「JavaScript」を選択します。

補足:関数名を指定したい場合は、クイックスタートではなく「+新しい関数」から関数を作成してください。

この段階で、Slackに設定する関数URLが作成され、画面の上部に表示されます。

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

  1. Kuduを開き、画面上部にあるフォルダ名のリンクを選択して作成したFuncitonのフォルダに移動します。
    D:\home\site\wwwroot\<function_name>
  2. npmコマンドを実行します。
  3. npm init
  4. 「name」と「descripstion」のみ指定して、package.jsonを生成します。
  5. requestパッケージをインストールします。
    npm install request --save-dev

例) package.json

 プログラム

Amazon Lambdaでの連携Tipsでは、Javascipt(Node.js)で作成したプログラム一式をZip化してアップロードする方法が紹介されていましたが、Azure Functionsでは、ツール内のエディターにプログラムを直接書くことができ、プログラムファイルをアップロードする必要がありません

以下のコードをエディターに貼り付け(index.js)、「kintone環境のドメイン」、「アプリ番号」、「APIトークン」をご自身の環境に合わせて変更し、保存してください。

 基本的には、AWSの記事と同じプログラムで動作しますが、AWSとAzureで異なる部分は以下の通りです。この3か所は必ず変更してください。

 1.

  • var aws = require('aws-sdk');

AWS SDKを呼び出すためななので不要

  2.

  • exports.handler = function(event, context) {}
    module.exports = function(context, event) {}

  3.

  • context.done(null, {text: "kintone POST success!"});
    context.res =  {text: "kintone POST success!"};
    context.done();

以上でAzure Functions側の準備は完了です。

Slack Outgoing Webhooksの設定

 Slack側の設定は過去記事と同じですが、当時と多少設定方法が変わっています。

投稿するチャネルのあるチームにログインしておく必要があります。該当チームにログインした状態で設定作業を行うため、インストールという行為は発生せず、「Outgoing Webhooks」を検索して選択するだけとなっています。

下の図のような画面が表示されたら、「Add Configuration」をクリックして設定を行ってください。

URLの欄には、Azure Functionsで作成した関数のRULをコピーして貼り付けてください。

試してみよう

設定したトリガーワード「Todo」に続けて、タイトルとなる文字、また今回のサンプルでは「+」を区切り文字として、詳細として設定できるので以下のように投稿しました。

次に、kintoneアプリを確認してみましょう。

Azure Functionsを使っても無事にSlackからkintoneにレコードを登録することができました!

AzureとAWSとの比較

Slackから手軽にkintoneへレコード登録する方法に記載されている方法と比較すると、以下のような違いがあります。

違いその1

AWSの場合、2つのサービスを使いますが、Azureの場合はAzure Functionsのみで、エンドポイントの作成とコードの実行を行えます。

違いその2

Azureの場合、他システム連携の設定について、クイックスタートやテンプレートなどが用意されています。そのため、ある程度自動でできます。

違いその3

ログの確認方法は、AWSの場合はAmazon CloudWatchで確認することになりますが、Azureでは、エディターの下に表示させることができます。

ただし、AWSの最新バージョンを使う事で、その差はほとんどなくなるようです。興味のある方は、こちらのサイトを参照してみてくださいね。

まとめ 

今回はWebhookを使った連携をAzureでやってみたらどうなるか試した結果、Azureでも簡単にSlackとkintoneを連携できることがわかりました。AWSもAzureもそう大きな差はなさそうです。

ハマった点としては、関数の設定部分のモード設定を「Standard」のままにしておく、というところでした。Webhookを使った連携だからといって「Webhook」を選択すると、動きません。ログも出ないので、原因にたどり着くのに時間がかかりました。

クイックスタートを使って関数を作った場合には、初期値で「Standard」になっているので、変にいじらなければ大丈夫です!

記事に関するフィードバック

記事のコメント欄は記事に対するフィードバックをする場となっております。
右の記事フィードバックのためのガイドを参照してコメントしてください。
記事のリンク切れなど、気になる点がある場合も、こちらのフォームからフィードバックいただけますと幸いです。

サインインしてコメントを残してください。