キンコミ kintone user community

みんなの投稿

2023/04/04 13:04

JSカスタマイズで複数のレコードの追加と更新を行うときのコツを教えてください。
例えば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で検索してみましたが、いい情報を見つけることができませんでした。
皆さんがどのようにされているか、ぜひ教えていただけないでしょうか。

3件のコメント (新着順)

私だったらカスタマイン使いますが、JSだとこういうのもあります
https://github.com/kintone/js-sdk/tree/master/packages/rest-api-client


安藤 光昭
2023/04/05 09:07

rest-api-clientの実装も最初に書かれているのとほぼ同じっぽい。

https://github.com/kintone/js-sdk/blob/master/packages/rest-api-client/src/client/RecordClient.ts#L84

Inomata
2023/04/06 15:37

お金に余裕がなくて有料プラグイン無しで運用されている環境なので。
rest-api-clientで書けばやっていることは同じみたいですが、プログラムの可読性はだいぶ良くなりそうですね。

安藤 光昭
2023/04/04 15:34

おそらく1〜2の流れあたりをもっとなんとかできないかということかと想像します。

データ取得については500件ずつ取得できますので、減らせるとしたらそこだけのように感じました。データ300件が更新かどうかを事前に判定することが困難なのであれば、kintoneのJS APIの場合upsertができないので他に方法はなさそうです。

別な観点では、300件の更新/追加処理について値が変化してなければ処理しない、などの判定をしてなるべく呼出を減らすなどの案もあるかと思います。

きったんさんご提示のようにJavaScriptの開発に関しては developer network の方が有識者が多い可能性が高いかと思います。


Inomata
2023/04/06 16:30

ありがとうございます。やはり他に方法はなさそうですか。
developer networkは以前にも利用していましたが返信率がこちらより低い印象です。
developer networkでも投稿してみますがあまり分け隔てなくキンコミでも developer network でも相談できるのがいいなとは思います。

それはJavaScriptでやらないといけないのでしょうか。
JavaScriptが必須なのであればcybozu developer networkで質問されてはいかがでしょう。
キンコミはどちらかというとカスタマイズではない方法で運用している方が多いような気がします。

-krewData
-カスタマイン
-エクセル
この辺りでコネコネするのがキンコミ的かもしれません😁