Kintoneのレコード登録をslackに通知するシステムの開発　～社内ナレッジ整備の仕組み作りとシステムの導入～

# はじめに

はじめまして。社内でデータサイエンティストを務めております [@shosuke_kondo](https://qiita.com/shosuke_kondo) です。

NTTデータではグローバルレベルでNTTデータグループ内の技術・知見・経験等をアセット化し、それらを有効活用することで、お客様への提供価値を最大化するため、[中期経営戦略の1つとして、「アセットベースのビジネスモデルへの進化」](https://www.nttdata.com/global/ja/investors/management/plan/)を掲げております。

[NTTデータ デザイン＆テクノロジーコンサルティング事業本部](https://enterprise-aiiot.nttdata.com/)では、アセット戦略の一環として、本組織が提供しているソリューションである[DataRobot](https://enterprise-aiiot.nttdata.com/service/datarobot)のナレッジ整備を行っています。今回はナレッジ整備の一環として、Q&A共有の仕組み作りを行いました。

本記事では、DataRobotのQ&A共有促進のために開発した「Kintoneのレコード登録をslackに通知するシステム」と「Q&A共有への導入事例」のご紹介をさせていただきます。


# DataRobotとは
DataRobot社は、人工知能（AI）に対するユニークなコラボレーション型のアプローチであるバリュー・ドリブン AIのリーダーです。

https://www.datarobot.com/jp/

DataRobot社の製品であるDataRobotは、自動機械学習（AutoML）プラットフォームであり、機械学習モデルの構築、トレーニング、評価、デプロイメントを自動化することができます。複雑なデータ分析を迅速かつ簡単に実行し、優れた予測モデルの作成をサポートすることが可能です。

# QA共有の仕組み作りにより実現したいこと
QA共有の仕組み作りを行うことで、下記のようなAs-Is → To-Beを実現し、社員のスキルアップ・業務効率化を行うことで、DataRobotのQA対応の品質を向上したいと考えております。

【As-Is】QA応対の仕方や、過去のQAが共有されていない
- QA対応が上手い人と一緒に案件できればいいが、案件が別になると中々アドバイスを受けられない
- 過去のQAが共有されていないため、同じ内容の質問に対し、対応者が変わると重複した調査が行われることがある

【To-Be】QA応対の仕方や、過去のQAが共有されている状態
- QA対応が上手い人の回答を参考にできる
- 組織全体で重複した調査が無くなる

# Kintoneのレコード登録をslackに通知するシステム開発の経緯
DataRobotのQAを蓄積していく上で、kintoneに登録するだけでは、登録されたQAが目に留まらなかったり、QA登録の習慣が無くなってルールが形骸化することが懸念されました。そのため、日常的に利用しているコミュニケーションツールであるSlackに登録内容を送るような仕組みづくりが必要であり、intoneのレコード登録をslackに通知するシステムの開発に至りました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3725085/4096d44d-34d1-549e-3e16-35f2766b84c2.png)

# システムの要件
下画像のようなkintoneで作成しているDataRobotFAQアプリに新しいレコードを追加すると、下画像2枚目のような形でレコードの登録者・タイトル・URL・質問・回答に関する情報がSlackの特定のチャンネルに投稿される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3725085/74875ccb-00ff-341b-8df1-eda81b5ea11c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3725085/c59c420f-8b3f-f89a-a7a4-d917ab7d8d13.png)

# システムの開発

kintoneは[JavaScript/CSSファイルを適用して、kintone全体の動作や画面をカスタマイズ](https://jp.cybozu.help/k/ja/admin/javascript_fullcustomize.html#:~:text=JavaScript%2FCSS%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E5%8F%96%E3%82%8A%E8%BE%BC%E3%82%80%201%20kintone%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E7%AE%A1%E7%90%86%E7%94%BB%E9%9D%A2%E3%82%92%E9%96%8B%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%20kintone%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E7%AE%A1%E7%90%86%E7%94%BB%E9%9D%A2%E3%82%92%E9%96%8B%E3%81%8F%202%20%5BJavaScript%20%2F%20CSS%E3%81%A7%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA%5D%E3%82%92%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%81%97%E3%81%BE%E3%81%99%E3%80%82,%E9%81%A9%E7%94%A8%E3%81%97%E3%81%AA%E3%81%84%20...%204%20%5BURL%E6%8C%87%E5%AE%9A%E3%81%A7%E8%BF%BD%E5%8A%A0%5D%E3%81%BE%E3%81%9F%E3%81%AF%20%5B%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89%E3%81%97%E3%81%A6%E8%BF%BD%E5%8A%A0%5D%E3%82%92%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%81%97%E3%80%81%E5%8F%96%E3%82%8A%E8%BE%BC%E3%82%80%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E9%81%B8%E6%8A%9E%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%20...%205%20%5B%E4%BF%9D%E5%AD%98%5D%E3%82%92%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%81%97%E3%81%BE%E3%81%99%E3%80%82)できます。今回はJavaScriptのファイルを作成して、上述の仕組みのおけるkintoneからslackに通知を送る部分を開発していきます。

大まかな流れは下記のようになっており、Slackと連携するためには、SLackの[Incoming Webhook URL](https://api.slack.com/messaging/webhooks)が必要です。
（１）　レコード作成成功時のイベントハンドラを設定
（２）　ペイロードの構築
（３）　kintone.proxyを使用してSlackのIncoming Webhook URLにリクエストを送信

実際に作成したファイルは以下になります。

```javascript:kintone_slack_notification.js
(() => {
    'use strict';
    // レコード作成成功時のイベントハンドラを設定
    kintone.events.on('app.record.create.submit.success', (e) => { 
        
        // アプリのURLを取得し、レコードの詳細画面へのURLを構築
        // 'https://xxxx.com/x/'にはアプリ画面のURLが入る
        const thisUrl = 'https://xxxx.com/x/' + kintone.app.getId() + '/show#record=' + kintone.app.record.getId();
        // SlackのIncoming Webhook URLを設定
        const webhookUrl = 'webhookUrl';

        // ペイロードの構築（Slackに表示したい内容を書く）
        // e.record.xxxx.value のxxxxには、フィールドコードが入る
        // DataRobotFAQアプリ＞アプリの設定＞フォーム＞フィールドの設定＞フィールドコード　から確認可能
        const payload = {
          'text': `  【タイトル】 ${e.record.xxxx.value} 
                      【投稿者】 ${JSON.stringify(e.record.xxxx.value.name)} 
                      【質問】 ${e.record.xxxx.value} 
                      【回答】 ${e.record.xxxx.value}`
        };
        
        // Promiseを返して非同期処理を行う
        return new kintone.Promise((resolve, reject) => {
        // kintone.proxyを使用してSlackへのリクエストを送信
          kintone.proxy(webhookUrl, 'POST', {}, payload, (body, status, headers) => {
            console.log(status, body);// レスポンスステータスとボディをコンソールに出力
            resolve(e); // Promiseの解決
          });
        });
      
    });
  })();
```

ファイルを作成したら、以下の手順を踏んで完成です。
（１）次の場所（パス）にJavaScriptファイルをアップロードする画面があるので、作成したファイルをアップロード
　アプリ＞アプリの設定（右上歯車ボタン）＞JavaScript/CSSでカスタマイズ＞JavaScriptファイル
（２）保存ボタンを押す
（３）アプリの設定の初期画面に戻るので、更新ボタンを押す
（４）完成
レコードを追加すると通知が来るようになったと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3725085/c0c5f467-53d3-b643-c4ac-0d2472f81053.png)

# Q&A共有への導入
## 導入
下記手順でなるべく多くの関係者を巻き込み、活動の活発化を図りました。
（１）メールでの回答、デモの実施、定例などで生じたQ&Aをkintoneに登録する。
（２）社内のプロジェクト関係者が入っているSlack channelにQ&Aが投稿されるので、
　　　参考になったQ&Aには積極的にリアクションを行ってもらう。
（３）コミュニティステュワーズの設定
　　　QA共有活動を活発化させるためにコミュニティステュワーズを設定しました。
・インスパイヤ―リーダー
　この取り組みを継続的なものにするために、定例でベストQAを共有する。積極的にQAを発信、コメントする。
・サポーター
　QA登録の障壁を取り除くため、運用方法について使い方の問い合わせ / 困ったことがあれば相談に乗る。
## 導入結果
導入結果測定のためのアンケートの結果、回答者の83%の方がQAの閲覧または投稿を実施。回答者の83%は「知識を得られた」、残りの17%は「手間を削減できた」と回答。また、QA投稿や閲覧ができなかった主な理由は「投稿するQAが無かった」が50%、「投稿する時間が無かった」が33%となりました。

上記の結果を見ると、当初見込んだ効果は発揮できていると一方、「投稿する時間の短縮」といった改善点もあるため、今後は「QA登録の必須項目の整理」や「登録未経験の方に1度登録を経験してもらうことによる心理障壁の排除」をして行けたらと思います。

# まとめ
今回はDataRobotのQ&A共有促進のために開発した「Kintoneのレコード登録をslackに通知するシステム」と「Q&A共有への導入事例」のご紹介をさせていただきました。導入を通じて、Q&Aに関する知識を組織内で共有できるようになったことをご理解いただけたかと思います。本システムは導入して終わりではなく、定例でのベストQ&Aの発表などを通じて、「登録された内容を認知してもらうための仕組みづくり」や「陳腐化させないようにアナウンス・継続すること」が重要です。本システムはSlackとkintoneを導入している組織のナレッジ管理に貢献できると思いますので、その際に本記事がお役立てれば幸いです。

## 仲間募集

NTTデータ テクノロジーコンサルティング事業本部 では、以下の職種を募集しています。

<details><summary>1. クラウド技術を活用したデータ分析プラットフォームの開発・構築(ITアーキテクト/クラウドエンジニア)</summary>

クラウド／プラットフォーム技術の知見に基づき、DWH、BI、ETL領域におけるソリューション開発を推進します。
https://enterprise-aiiot.nttdata.com/recruitment/career_sp/cloud_engineer

</details>

<details><summary>2. データサイエンス領域（データサイエンティスト／データアナリスト）</summary>

データ活用／情報処理／AI／BI／統計学などの情報科学を活用し、よりデータサイエンスの観点から、データ分析プロジェクトのリーダーとしてお客様のDX／デジタルサクセスを推進します。
https://enterprise-aiiot.nttdata.com/recruitment/career_sp/datascientist

</details>

<details><summary>3.お客様のAI活用の成功を推進するAIサクセスマネージャー</summary>

DataRobotをはじめとしたAIソリューションやサービスを使って、
お客様のAIプロジェクトを成功させ、ビジネス価値を創出するための活動を実施し、
お客様内でのAI活用を拡大、NTTデータが提供するAIソリューションの利用継続を推進していただく人材を募集しています。
https://nttdata.jposting.net/u/job.phtml?job_code=804

</details>

<details><summary>4.DX／デジタルサクセスを推進するデータサイエンティスト《管理職/管理職候補》</summary>
データ分析プロジェクトのリーダとして、正確な課題の把握、適切な評価指標の設定、分析計画策定や適切な分析手法や技術の評価・選定といったデータ活用の具現化、高度化を行い分析結果の見える化・お客様の納得感醸成を行うことで、ビジネス成果・価値を出すアクションへとつなげることができるデータサイエンティスト人材を募集しています。

https://nttdata.jposting.net/u/job.phtml?job_code=898

</details>


## ソリューション紹介

<details><summary> Trusted Data Foundationについて</summary><div>

～データ資産を分析活用するための環境をオールインワンで提供するソリューション～
https://enterprise-aiiot.nttdata.com/tdf/
最新のクラウド技術を採用して弊社が独自に設計したリファレンスアーキテクチャ（Datalake+DWH+AI/BI）を顧客要件に合わせてカスタマイズして提供します。
可視化、機械学習、DeepLearningなどデータ資産を分析活用するための環境がオールインワンで用意されており、これまでとは別次元の量と質のデータを用いてアジリティ高くDX推進を実現できます。

</div></details>


<details><summary> TDFⓇ-AM（Trusted Data Foundation - Analytics Managed Service）について</summary><div>

～データ活用基盤の段階的な拡張支援（Quick Start) と保守運用のマネジメント（Analytics Managed）をご提供することでお客様のDXを成功に導く、データ活用プラットフォームサービス～
https://enterprise-aiiot.nttdata.com/service/tdf/tdf_am
TDFⓇ-AMは、データ活用をQuickに始めることができ、データ活用の成熟度に応じて段階的に環境を拡張します。プラットフォームの保守運用はNTTデータが一括で実施し、お客様は成果創出に専念することが可能です。また、日々最新のテクノロジーをキャッチアップし、常に活用しやすい環境を提供します。なお、ご要望に応じて上流のコンサルティングフェーズからAI/BIなどのデータ活用支援に至るまで、End to Endで課題解決に向けて伴走することも可能です。

</div></details>


<details><summary>NTTデータとTableauについて </summary><div>

ビジュアル分析プラットフォームのTableauと2014年にパートナー契約を締結し、自社の経営ダッシュボード基盤への採用や独自のコンピテンシーセンターの設置などの取り組みを進めてきました。さらに2019年度にはSalesforceとワンストップでのサービスを提供開始するなど、積極的にビジネスを展開しています。

これまでPartner of the Year, Japanを4年連続で受賞しており、2021年にはアジア太平洋地域で最もビジネスに貢献したパートナーとして表彰されました。
また、2020年度からは、Tableauを活用したデータ活用促進のコンサルティングや導入サービスの他、AI活用やデータマネジメント整備など、お客さまの企業全体のデータ活用民主化を成功させるためのノウハウ・方法論を体系化した「デジタルサクセス」プログラムを提供開始しています。
https://enterprise-aiiot.nttdata.com/service/tableau

</div></details>


<details><summary>NTTデータとAlteryxについて </summary><div>
Alteryxは、業務ユーザーからIT部門まで誰でも使えるセルフサービス分析プラットフォームです。

Alteryx導入の豊富な実績を持つNTTデータは、最高位にあたるAlteryx Premiumパートナーとしてお客さまをご支援します。

導入時のプロフェッショナル支援など独自メニューを整備し、特定の業種によらない多くのお客さまに、Alteryxを活用したサービスの強化・拡充を提供します。

https://enterprise-aiiot.nttdata.com/service/alteryx

</div></details>

<details><summary>NTTデータとDataRobotについて </summary><div>
DataRobotは、包括的なAIライフサイクルプラットフォームです。

NTTデータはDataRobot社と戦略的資本業務提携を行い、経験豊富なデータサイエンティストがAI・データ活用を起点にお客様のビジネスにおける価値創出をご支援します。

https://enterprise-aiiot.nttdata.com/service/datarobot

</div></details>

<details><summary> NTTデータとInformaticaについて</summary><div>

データ連携や処理方式を専門領域として10年以上取り組んできたプロ集団であるNTTデータは、データマネジメント領域でグローバルでの高い評価を得ているInformatica社とパートナーシップを結び、サービス強化を推進しています。
https://enterprise-aiiot.nttdata.com/service/informatica

</div></details>

<details><summary>NTTデータとSnowflakeについて </summary><div>
NTTデータでは、Snowflake Inc.とソリューションパートナー契約を締結し、クラウド・データプラットフォーム「Snowflake」の導入・構築、および活用支援を開始しています。

NTTデータではこれまでも、独自ノウハウに基づき、ビッグデータ・AIなど領域に係る市場競争力のあるさまざまなソリューションパートナーとともにエコシステムを形成し、お客さまのビジネス変革を導いてきました。
Snowflakeは、これら先端テクノロジーとのエコシステムの形成に強みがあり、NTTデータはこれらを組み合わせることでお客さまに最適なインテグレーションをご提供いたします。

https://enterprise-aiiot.nttdata.com/service/snowflake

</div></details>