たったの1時間！エクセルの顧客リストをkintoneに自動登録 featuring DataSpider

ノンプログラミングでデータを繋ぐことができる[DataSpider ServistaのV4](https://www.appresso.com/servista/campaign/1192501_1941.html)が先週（2月24日）リリースされました。

大きな更新としてはAWSとの連携強化があります。
が、[kintone](https://kintone.cybozu.com/jp/)アダプタもいくつか機能追加されており、その中でも目玉機能がUpsertです。
Upsertはかなりの優れもので、データがなければ登録（Insert）、データがあれば更新（Update）するという機能です。
これは試してみるっきゃない！ということで、エクセルの顧客リストをkintoneに自動登録する仕組みを構築してみました。

![abstract1.jpg](https://qiita-image-store.s3.amazonaws.com/0/102790/eb308dc5-c292-a668-15ca-22527469cd25.jpeg)



今回もまずは結果から～

# 結果
結論としては1時間ほどでばっちり構築することができました。（DataSpiderのインストール時間、kintoneの環境取得時間は除く）
ノンプログラミングを売りにしているだけのことはありますね。
※DataSpiderやkintoneを初めて利用する方はもう少し時間が必要になると思います。

## 動作前の状況
最初、kintoneのデータは何もない状態です。
![kintone1.jpg](https://qiita-image-store.s3.amazonaws.com/0/102790/13bb050c-0991-b649-4b71-84eac5affe92.jpeg)


ファイル「顧客一覧.xlsx」を保存して15分ほど休憩します。
顧客一覧.xlsxの内容はこんな感じ。
![excel1.jpg](https://qiita-image-store.s3.amazonaws.com/0/102790/38952e87-ea1f-6dd4-5867-13bd4eaf72f4.jpeg)



## 1回目の動作
あらま！蜜柑を食べている間にkintoneにデータが登録されていました。
![kintone2.jpg](https://qiita-image-store.s3.amazonaws.com/0/102790/bc3f3bda-70cc-4357-2623-a182a07bdd30.jpeg)


そして・・・
つ、ついにUpsert機能を確認する瞬間がやってきました。
顧客一覧.xlsxの内容を変更します。変更点は以下の通りです。

- △△株式会社の佐藤さんが結婚して大阪府から北海道に引っ越しました。寒そうですね。
- □□株式会社の人事部、佐々木さんの行が増えました。
![excel2.jpg](https://qiita-image-store.s3.amazonaws.com/0/102790/002acc6c-633e-24e5-19d7-558a50be133d.jpeg)

さて、準備は万端なので15分ほど休憩します。

## 2回目の動作（差分）
なんとまあ！コーヒーをハンドドリップしている間にデータが更新されています！
佐藤さんのデータはUpdateされ、佐々木さんのデータはInsertされました！
![kintone3.jpg](https://qiita-image-store.s3.amazonaws.com/0/102790/fc34a1c6-b161-ac39-2ac5-c0b77941370c.jpeg)



ここからはそれぞれの設定をご紹介～

# kintoneの設定
## フォーム設定
DataSpiderでフィールドコードを見ながら設定する箇所があるのでフィールドコードも分かりやすいものに変えておくと便利です。

| フィールド名 | フィールドタイプ | フィールドコード |
|----------|----------------|------------------|
| 会社名 | 文字列（1行） | 会社名 |
| 部署名 | 文字列（1行） | 部署名 |
| 担当者名 | 文字列（1行） | 担当者名 |
| 郵便番号 | 文字列（1行） | 郵便番号 |
| 住所 | 文字列（1行） | 住所 |
| TEL | リンク | TEL |
| FAX | 文字列（1行） | FAX |
| メールアドレス | リンク | メールアドレス |


# DataSpiderの設定
## フロー
各パーツをドラッグ&ドロップで配置することでデータを処理できます。
![DataSpider1.jpg](https://qiita-image-store.s3.amazonaws.com/0/102790/118fd38f-ffad-2ffc-43f0-fbb8f7599669.jpeg)

今回のフローは以下の通りです。
1. エクセルの内容を読み込み
2. エクセルの列とkintoneのフォームを紐付け
3. kintoneに登録
4. 2と3をデータ件数分繰り返す

## 各パーツの設定

### excel_sheet（エクセルの読み込み）
読み込むエクセルとシートを指定します。
![DataSpider2.jpg](https://qiita-image-store.s3.amazonaws.com/0/102790/6e402de9-5f09-4281-1002-a916d98dfb2b.jpeg)
DataSpiderをデフォルトでインストールした場合、「/data/kintone連携/」は「C:/Program Files/DataSpiderServista/server/data/kintone連携/」を指します。

読み込むエクセルの行を指定します。
![DataSpider3.jpg](https://qiita-image-store.s3.amazonaws.com/0/102790/0a390150-4222-f9cc-98f8-ce99e375b482.jpeg)

1行目は項目名なので除外します。
![DataSpider4.jpg](https://qiita-image-store.s3.amazonaws.com/0/102790/d9551c42-f1ae-a1f2-0191-cd6b87a31105.jpeg)

### foreach（繰り返し）
![DataSpider5.jpg](https://qiita-image-store.s3.amazonaws.com/0/102790/16e6e8e9-eb91-47b1-5d0d-d39c3e45e696.jpeg)

### mapping（エクセルの列とkintoneのフォームを紐付け）
これもドラッグ&ドロップで左の項目と右の項目を繋げるだけです。
![DataSpider6.jpg](https://qiita-image-store.s3.amazonaws.com/0/102790/3584bc32-4744-5602-a1e7-b37f9ff9ee60.jpeg)

### kintone_register（kintoneに登録）
キーの値と一致するレコードは更新にチェックを入れて、キーを指定します。
今回の場合は会社名、部署名、担当者名をキーにしました。複数項目指定できるのがありがたいです。
![DataSpider7.jpg](https://qiita-image-store.s3.amazonaws.com/0/102790/72413db3-af12-fed3-306e-7fa1ab9073c9.jpeg)






## トリガー
これだけではエクセル更新時に自動反映されないので、トリガーを設定します。
顧客リストは頻繁に更新するものではないので監視間隔は3600（1時間）とかでもいいですね。
![DataSpider8.jpg](https://qiita-image-store.s3.amazonaws.com/0/102790/7589b679-9912-2815-9855-33dd4ffb6c14.jpeg)


# 参考
参考までに今回の構成で1000件のデータ登録、更新にどれだけ時間がかかるか試してみました。

- 1000件の登録にかかった時間
 - 1回目　　：392秒
 - 2回目　　：386秒
 - 3回目　　：388秒
 - 3回の平均：389秒

- 1000件の更新にかかった時間
 - 1回目　　：601秒
 - 2回目　　：598秒
 - 3回目　　：586秒
 - 3回の平均：592秒

# まとめ
今回はDataSpiderを使ってエクセルとkintoneを連携させてみました。
開発時間を大きく短縮できて、PG知識がなくても連携させられるところがDataSpiderのメリットですね。
メールやAWSとも繋げられるDataSpiderのお試しは[こちら](https://www.appresso.com/trial/index.html)。

kintoneにも1年間無料で使える開発者環境がありますよ。興味がある方は[こちら](https://cybozudev.zendesk.com/hc/ja/articles/200929540#step2)からどうぞ。