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

目次

はじめに

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

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

得られる効果

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

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

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

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

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

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

information

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