取得するフィールドを指定することで、kintone のレコード一括取得の時間を短縮する

目次

はじめに

kintone の性能は、「同時リクエスト数」と「リクエストの処理時間」との掛け合わせで考えられます。
「リクエストの処理時間」は 1 件ずつのリクエストの処理に要する時間で、取り扱うデータ量が影響します。

本記事では kintone REST API のレコード一括取得 を利用する場合に、取得するフィールドを指定することで API 実行時間がどう変化するのかを紹介します。
kintone の性能についての詳細は kintone の性能 Vol.1 - リクエストの処理時間 を確認してください。

得られる効果

次のようなケースかつ多くのレコードを一括取得する場合に効果が期待できます。

  • アプリのフィールド数がとても多いが、必要なのは一部のフィールド
  • 特定のフィールドに長い文字列が含まれているが、そのフィールドは不要

また、時間短縮以外にも、ネットワーク負荷やクライアント側でのメモリ使用量の低減も期待できます。

フィールドを指定する方法

レコード一括取得 REST APIfields パラメーターに、取得したいフィールドのフィールドコードを指定します。
以下は JavaScript での例です。4 行目で fields パラメーターを指定しています。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
const body = {
  app: kintone.app.getId(),
  query: 'order by $id asc limit 500',
  fields: ['$id', 'CREATED_TIME'] // ここにフィールドコードを指定
};

kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body, (resp) => {
  console.log(resp);
}, (error) => {
  console.log(error);
});

検証内容

取得するフィールド数と 1 リクエストあたりの API の実行時間の関係を調べます。
次のようなフォームを持ったアプリを用意しました。

結果をわかりやすくするため、極端な構成にしています。
100 個の文字列(複数行)のフィールドを配置し、それぞれの文字列フィールドに約 1[KB]の文字列を保存したレコードを 500 件登録します。

そして、取得するフィールド数と レコード一括取得 REST API の実行時間の関係を調べました。

検証結果

結果は次のとおりです。

取得するフィールド数に比例して、API の実行時間も増加しています。
つまり、取得するフィールドを少なくすれば API の実行時間を短縮できることが分かりました。

今回の検証では 500 件の取得のため、差は 1 秒程度ですが、数千件、数万件のレコードを取得する場合はさらに大きな差になります。

おわりに

レコード一括取得 REST APIfields パラメーターを指定することで API の実行時間を短縮できることを紹介しました。
アプリのフィールド数が多い場合や特定のフィールドに長い文字列が含まれている場合は大きな効果があります。

フィールド数やレコード数は時間の経過にしたがって増加する傾向があります。
そのため、フィールド数やレコード数が少ない場合でも、数年先を見据えて fields パラメーターを指定することをおすすめします。

information

この Tips は、2018 年 12 月版 kintone で動作を確認しています。