# JSカスタマイズで複数のレコードの追加と更新を行うときのコツを教えてください。

**URL:** <https://community.cybozu.dev/t/topic/1499>\
**Category:** kintone 開発相談\
**Created:** [2023 年 4 月 4 日午前 6:20 UTC](https://community.cybozu.dev/t/topic/1499 "2023-04-04T06:20:27Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Legacy\_Account2276](https://avatars.discourse-cdn.com/v4/letter/l/cc9497/32.png) [@Legacy\_Account2276](https://community.cybozu.dev/u/Legacy_Account2276)\
**Post date:** [2023 年 4 月 4 日午前 6:20 UTC](https://community.cybozu.dev/t/topic/1499/1 "2023-04-04T06:20:27Z")

</div>

例えば500件のレコードが既に登録されていたとして、そこにAPIで外部から300件のデータを流し込みたいとします。  
300件のデータのうち200件は既存レコードの更新で100件は追加分としたときの効率の良い追加または更新の処理の作り方を考えています。

300件のデータの中でどれが更新分でどれが追加分かが予め判別できていない場合は以下の流れで処理を作っています。

1. 既に登録されているレコードを全て取得する
2. 取得した500件とデータ300件を突合して更新分と追加分にデータを仕分けする
3. 200件のデータを更新する
4. 100件のデータを追加する

APIを使って一度にレコードの取得や更新などを行えるのは最大で100件までなので、このやり方をしてしまうと取得だけで5回、更新で2回、追加で1回で最低でも8回もリクエストしてしまいます。  
1日に1アプリ1万回までしかAPIを扱えないので、少ないレコード数ならいいですが、大量のデータを扱う場合はすぐに制限に引っかかってしまうのと、処理事態も冗長的と感じているのでもっと効率のいいやり方があるのではないかと考えています。

しかしWebで検索してみましたが、いい情報を見つけることができませんでした。  
皆さんがどのようにされているか、ぜひ教えていただけないでしょうか。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1517](https://avatars.discourse-cdn.com/v4/letter/l/4bbf92/32.png) [@Legacy\_Account1517](https://community.cybozu.dev/u/Legacy_Account1517)\
**Post date:** [2023 年 4 月 4 日午前 7:16 UTC](https://community.cybozu.dev/t/topic/1499/2 "2023-04-04T07:16:20Z")

</div>

kintone のしくみに縛られてしまいますので、それほど効率的なやり方は無さそうですね。  
案としては、下記くらいでしょうか。

・レコードの取得は、最大500 です。500件なら１回で済みます。  
・レコード取得の代わりに CSV を書き出して取得  
・レコード更新は、項目の値を比較して更新が必要なものに絞る

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2276](https://avatars.discourse-cdn.com/v4/letter/l/cc9497/32.png) [@Legacy\_Account2276](https://community.cybozu.dev/u/Legacy_Account2276)\
**Post date:** [2023 年 4 月 4 日午前 10:04 UTC](https://community.cybozu.dev/t/topic/1499/3 "2023-04-04T10:04:50Z")

</div>

[@kintone/rest-api-client](https://cybozu.dev/ja/kintone/sdk/rest-api-client/kintone-javascript-client/#introduction)

にあるgetAllRecords()などを使うとある程度リクエスト数を稼げそうですね。

[https://cybozu.dev/ja/kintone/sdk/rest-api-client/kintone-javascript-client/#document:~:text=MIT%20%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9-,%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88,-%E5%9F%BA%E6%9C%AC%E6%83%85%E5%A0%B1](https://cybozu.dev/ja/kintone/sdk/rest-api-client/kintone-javascript-client/#document:~:text=MIT%20%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9-,%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88,-%E5%9F%BA%E6%9C%AC%E6%83%85%E5%A0%B1)

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex015/uploads/cybozu/original/1X/d5c841c3c5a6cb66eed514001c1b45147c9e1f4f.png) [@system](https://community.cybozu.dev/u/system)\
**Post date:** [2023 年 10 月 11 日午前 1:31 UTC](https://community.cybozu.dev/t/topic/1499/4 "2023-10-11T01:31:14Z")

</div>

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。
