レコードの取得(複数件)

にメンテナンス済み

kintone は豊富な API を提供しており、これを活用することでアプリケーションのデータをプログラムから直接操作することが可能です。

特に、REST API は HTTP リクエストを通じて kintone のデータを操作するための強力なツールです。

このページでは、kintone の REST API を使用して、特定のレコードを 複数件取得する方法について詳しく解説します。

レコードを 1 件だけ取得する場合は、エンドポイントが異なります。詳細は以下のページを参照してください。

レコードの取得(1件)
kintone REST APIを使用して、レコードを1件取得する方法を紹介します。レコードIDを指定して、レコード情報を取得することができます。

kintone から利用する場合

kintone の JavaScript カスタマイズとして REST API を実行する場合、用意されている JavaScript API を使用することで、簡単に REST API を実行することができます。

JavaScript API のkintone.api.urlメソッドを使用することで、実行されるスペースを意識することなく、REST API のエンドポイントを取得することができます。

汎用的な関数の定義
/**
 * kintone REST APIを使用して、指定した条件に一致するレコードを取得する
 *
 * @param { Object } params
 * @param { string | number } params.app - アプリID
 * @param { string[] } params.fields - 取得したいフィールドのフィールドコード
 * @param { string } params.query - レコードを取得する条件
 * @param { boolean } params.totalCount - 取得したレコードの総数を取得するかどうか
 * @return { Promise<{ records: Record<string, any>[]; totalCount: string | null }> } - レコード情報
 */
const getRecords = (params) => {
  const { app, fields, query, totalCount } = params;
  return kintone.api(kintone.api.url('/k/v1/records.json', true), 'GET', {
    app,
    fields,
    query,
    totalCount,
  });
};

レコードを 1 件だけ取得する場合は、record.jsonを指定しますが、複数件取得する場合は、records.jsonを指定する点に注意してください。

引数には、取得先のアプリ ID と、取得したいレコードの ID を指定します。

対象レコードが存在する場合は、recordプロパティを持つオブジェクトが返されます。

現在表示しているレコードの情報を取得する
(() => {
  const getRecords = (params) => {
    /** 省略 */
  };

  kintone.events.on(['app.record.detail.show'], async (event) => {
    const appId = kintone.app.getId();
    const query = `関与開始日 > "2024-01-01" and 契約状況 in ("契約中", "契約満了")`; // レコードを取得する条件
    const { records } = await getRecords({ app: appId, query });
    console.log(records); // [{ フィールドコード: 値, ... }, ...]
    return event;
  });
})();
ダイアログに入力されたレコードIDの情報を取得する
(() => {
  const getRecords = (params) => {
    /** 省略 */
  };

  kintone.events.on(['app.record.index.show'], async (event) => {
    const query = prompt('取得するレコードの条件を入力してください');
    const appId = kintone.app.getId();
    const { records } = await getRecords({ app: appId, query });
    console.log(records); // [{ フィールドコード: 値, ... }, ...]
    return event;
  });
})();

クエリビルダーで条件を組み立てる

query パラメータの記法は独特で、慣れるまでは戸惑いがちです。以下のクエリビルダーで実際に条件を組み立てて、生成されるクエリ文字列を確認してみてください。

レコード取得用クエリビルダー

フィールド・演算子・値を選ぶだけで、records.json に渡せる query パラメータが組み立てられます。

条件
オプション
order by
並び順は指定されていません(既定: レコード ID 降順)
サンプルデータでの実行結果(6 件)
レコード番号
1
2
3
4
5
6

※ クライアントサイドの簡易エミュレータでフィルタ・ソートしています。実際の kintone サーバーの挙動と完全には一致しません。

クエリの書き方
kintone REST APIでレコードを絞り込む際に使用するクエリの書き方を詳しく解説します。演算子、関数、オプションの使い方から、実践的なサンプルコードまで紹介します。

大量レコードを取得するときの戦略

records.jsonoffset には 10,000 件 という上限があります。1 万件を超えるレコードを扱う場合は、カーソル API やシーク法を検討する必要があります。下のシミュレータでレコード件数を増やしながら戦略を切り替えると、コール数の差や上限超過の挙動が一目で分かります。

kintone REST API 一括処理シミュレータ

offset

レコード件数と戦略を選ぶと、API コールの並び・所要時間・上限超過を可視化します。

戦略
速度
処理レコード
0 / 1,500
進捗 0%
HTTP コール
0 / 3
1コールあたり平均 500 件
シミュレート所要時間
0 ms
合計 1.6 s
ステータス
待機中
  1. 1
    GET/k/v1/records.json500·540 ms
    query: offset 0 limit 500
  2. 2
    GET/k/v1/records.json500·540 ms
    query: offset 500 limit 500
  3. 3
    GET/k/v1/records.json500·540 ms
    query: offset 1000 limit 500
カーソルAPI
kintone のカーソル API を使って 10,000 件を超える大量レコードを安全に取得する方法を解説します。カーソルの作成・取得・削除の基本操作から、全件取得の汎用関数、運用上の注意点まで紹介します。

kintone 以外から利用する場合

kintone の REST API は、Excel や GAS、Node.js など、様々な環境から利用することができます。

REST API を使用することで、kintone 以外の環境から kintone のデータを使用して、アプリケーションを動作させることが可能です。

APIトークンを使用しましょう

kintone 以外の環境から kintone のデータを取得する場合、認証情報をリクエストに含める必要があります。

認証情報にはいくつかの種類がありますが、API トークンを選択することで、セキュリティを確保しつつ、簡単に認証情報を取得することができます。

最も簡単に使用できるのは ID とパスワードを使用した方法ですが、セキュリティ上のリスクがあるため、必要最小限の権限を付与した API トークンを使用することをおすすめします。

Node.js を使用した場合

Node.js から kintone の REST API を使用する場合、ブラウザで JavaScript を実行するのとほとんど同じコードで、HTTP リクエストを送信することができます。

Node.jsでレコードを取得する
/**
 * kintone REST APIを使用して、IDに一致するレコードを取得する
 * @param { Object } params
 * @param { string | number } params.app - アプリID
 * @param { string[] } params.fields - 取得したいフィールドのフィールドコード
 * @param { string } params.query - レコードを取得する条件
 * @param { boolean } params.totalCount - 取得したレコードの総数を取得するかどうか
 * @return { Promise<{ records: Record<string, any>[]; totalCount: string | null }> } - レコード情報
 */
const getRecords = (params) => {
  const { app, fields, query, totalCount } = params;
  const queryParams = new URLSearchParams({ app, fields, query, totalCount }).toString();
  return fetch(`https://__your_subdomain__.cybozu.com/k/v1/records.json?${queryParams}`, {
    method: 'GET',
    headers: {
      'X-Cybozu-API-Token': 'YOUR_API_TOKEN',
    },
  }).then((res) => res.json());
};

__your_subdomain__の部分と、YOUR_API_TOKENの部分を、それぞれご自身の環境に合わせて変更してください。

引数として設定しても良いですが、関数内で直接設定しても問題ありません。

前述した kintone から利用するコードと異なり、参照先のアプリがゲストスペースである場合は、URL を変更する必要があります。

GAS を使用した場合

Google Apps Script (GAS) から kintone の REST API を使用する場合、UrlFetchAppクラスを使用することで、HTTP リクエストを送信することができます。

GASを使用した場合のサンプルコード
/**
 * kintone REST APIを使用して、IDに一致するレコードを取得する
 * @param { Object } params
 * @param { string | number } params.app - アプリID
 * @param { string[] } params.fields - 取得したいフィールドのフィールドコード
 * @param { string } params.query - レコードを取得する条件
 * @param { boolean } params.totalCount - 取得したレコードの総数を取得するかどうか
 * @return { Promise<{ records: Record<string, any>[]; totalCount: string | null }> } - レコード情報
 */
const getRecords = (params) => {
  const { app, fields, query, totalCount } = params;
  const queryParams = yourCustomQueryParamsFunction({ app, fields, query, totalCount });
  const url = `https://__your_subdomain__.cybozu.com/k/v1/records.json?${queryParams}`;
  const options = {
    method: 'GET',
    headers: {
      'X-Cybozu-API-Token': 'YOUR_API_TOKEN',
    },
  };
  const response = UrlFetchApp.fetch(url, options);
  return JSON.parse(response.getContentText());
};

GAS では、UrlFetchAppクラスを使用して、HTTP リクエストを送信します。

また、URLSearchParamsクラスが用意されていないため、クエリパラメータを作成する関数を別途用意する必要があります。

python を使用した場合

Python から kintone の REST API を使用する場合、requestsライブラリを使用することで、HTTP リクエストを送信することができます。

pythonでレコードを取得する
import requests

def get_records(params):
    app = params['app']
    fields = params['fields']
    query = params['query']
    totalCount = params['totalCount']
    url = f'https://__your_subdomain__.cybozu.com/k/v1/records.json'
    headers = {
        'X-Cybozu-API-Token': 'YOUR_API_TOKEN',
    }
    params = {
        'app': app,
        'fields': fields,
        'query': query,
        'totalCount': totalCount,
    }
    response = requests.get(url, headers=headers, params=params)
    return response.json()

コマンドラインを使用した場合

コマンドラインから kintone の REST API を使用する場合、curlコマンドを使用して HTTP リクエストを送信することができます。

コマンドラインでレコードを取得する
curl -X GET 'https://__your_subdomain__.cybozu.com/k/v1/records.json?app=1&query=レコード番号 > 10' \
  -H 'X-Cybozu-API-Token: YOUR_API_TOKEN'

制限事項

kintone でレコードを複数件取得する場合、以下の制限事項があります。

  • 1 回のリクエストで取得できるレコード数は最大 500 件
  • query パラメータの offset の上限値は 10,000 件

この制限を意識することなく取得する方法については、以下のページを参照してください。

POST, PUT, DELETEの上限
kintone REST APIには、GET, POST, PUT, DELETEそれぞれに、1度に操作できるレコードの上限が設けられています。今回は上記のレコード上限を気にすることなく、一括でレコードの作成ができる関数をご紹介します。RE
#kintone #JavaScript #TypeScript