【kintone】レコードを全件取得する【カスタマイズAPI編】

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を超えても処理できます。
目次