kintoneのGET APIを使えばレコードを取得できますが、一度に取得できる上限が500件と決まっていますよね。
一度に全件取得する方法はないのでしょうか。
500件を超えても取得はできます。
標準のGET APIを使っても良いのですが、kintone JavaScript Client (@kintone/rest-api-client)が便利です。
この記事ではkintone JavaScript Client (@kintone/rest-api-client)を使ったレコード全件取得処理について解説します。
- kintoneのJavaScriptカスタマイズでは、kintone JavaScript Client (@kintone/rest-api-client)を使ってレコードを全件取得できます。
- kintone REST APIではoffsetに10,000を超えた値を指定できません。
- kintone JavaScript Client (@kintone/rest-api-client)ではカーソルを使うことでoffsetが10,000を超えても処理できます。
kintoneのレコード取得(GET API)の制限
kintoneには標準でREST APIが用意されています。
その中のGET APIを使うことでレコードを取得できます。
しかし、GET APIで一度に取得できるレコードは500件と上限が決まっています。
アプリを使い続ければレコード500件はあっという間に超えてしまいます。
私は最大で100万件を超えたアプリを運用していますので到底足りません。
そんなときは再帰処理を使って500件を超えた件数を取得することも可能ですが、コードは複雑かつ冗長になります。
また、REST APIはoffset問題があります。
クエリのoffsetに指定できる値が10,000と制限されており、これを超えた値を指定するとエラーになります。
※2020年7月12日の定期メンテナンスより前に構築されたドメインでは、10,000を超えた値でも処理できますが、警告が表示されます。
kintoneのレコードを全件取得する
レコードを500件超えても取得できる便利なライブラリが「kintone JavaScript Client (@kintone/rest-api-client)」です。
カーソルを含めて簡単に記述できるので、コードも冗長にならず、offset問題も気にせずに取得できます。
まずはアプリの設定画面のJavaScriptにライブラリを追加します。
Cybozu CDNにある「KintoneRestAPIClient.min.js」のURLを追加します。
以下がコード例です。
(() => {
'use strict';
kintone.events.on(['app.record.index.show'], async event => {
try {
// クライアントの作成
const client = new KintoneRestAPIClient();
// リクエストパラメータの設定
const params = {
app: kintone.app.getId(), // アプリID
fields: ['$id'], // フィールド
condition: '日付 >= TODAY()', // 条件
orderBy: '日付 asc', // 順番
withCursor: true // カーソル有無
};
// レコードの全件取得
const resp = await client.record.getAllRecords(params);
for (let i = 0; i < resp.length; i++) {
console.log(resp[i].$id);
}
} catch (e) {
console.log(e);
}
return event;
});
})();
最初に「new KintoneRestAPIClient()」でクライアントを作成します。
レコードを取得するAPIはいくつかありますが、「client.record.getAllRecords()」を使うのがおすすめです。
「withCursor」をtrueにすれば、カーソルを使ってoffset 10,000を超えても取得できます。
「withCursor」を指定しない場合もtrueが初期値となります。
ただし、カーソルは同時に10個までしか生成できないため、同時に10件までのAPIしか実行できません。
これを超えてAPI実行するとエラーになります。
どれかの処理が終了することでカーソルに空きができ、また実行できるようになります。
offsetが10,000を超えない場合や10,000を超えてもIDの並び順で取得できる場合には「withCursor」をfalseにしましょう。
これ以外にもレコードの一括更新や一括削除、ファイル操作など、様々な機能が用意されています。
詳しくはドキュメントを参照ください。
- kintoneのJavaScriptカスタマイズでは、kintone JavaScript Client (@kintone/rest-api-client)を使ってレコードを全件取得できます。
- kintone REST APIではoffsetに10,000を超えた値を指定できません。
- kintone JavaScript Client (@kintone/rest-api-client)ではカーソルを使うことでoffsetが10,000を超えても処理できます。