カテゴリー内の他の記事

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

フォローする

はじめに

この記事では、レコード一括取得REST APIで、取得するフィールドを指定することで、APIの実行時間が短縮できることを説明します。
とても簡単な内容ではありますが、kintoneアプリの構成やレコード取得の目的によっては、処理時間の削減に効果がありますので、覚えておいていただければと思います。

方法

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

効果

このTipsの効果は、取得するデータ量が減ることによる通信時間の短縮です。
そのため、以下のようなケースで効果が期待できます。

  1. アプリのフィールド数がとても多いが、処理で必要なのは1部だけのケース
  2. 特定のフィールドに長い文字列が含まれているが、処理では使用しないケース

また、時間短縮以外にも、ネットワーク負荷やクライアント側でのメモリ使用量の低減も期待できます。
逆に、フィールドの数が少ない場合や取得するレコード数が少ない場合など、削減できるデータ量が少ないケースでは、体感できるほどの効果を得るのは難しいと思います。

処理時間の測定

では実際に、処理時間を測定してみましょう。

測定(1) - 取得するフィールド数とAPIの実行時間

測定(1)では、取得するフィールド数と、1リクエストあたりのAPIの実行時間の関係を調べてみます。

アプリ

測定(1)では、以下のようなフォームを持ったアプリを用意しました。

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

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

測定結果

結果は以下のとおりです。

測定(1)では、"$idだけ"を取得する場合で約0.92秒かかっていますが、それ以降は取得するフィールド数に比例する形でAPIの実行時間が増えていることが分かります。
この測定の場合、"$idだけ"取得した場合と、"全フィールド取得"した場合では、APIの実行時間が約2倍になりました。

測定(1)は極端な例ですが、レコード一括取得REST APIで、取得するフィールドを指定することで、APIの実行時間が削減できることが分かりました。

測定(2) - 大量レコード取得の実行時間

次に測定(2)では、大量のレコードを取得する時間を測定してみます。

アプリ

測定(2)では、以下のようなフォームを持ったアプリを用意しました。

上記は、管理用のフィールドと、フリーフォーマットで文章を記載する文字列フィールドが、それぞれ複数あるアプリ、のようなものと考えていただければと思います。
"文字列_複数行1"〜"文字列_複数行3"のフィールドそれぞれに、約2[KB]の文字列が保存されたレコード、10万件を登録しておきました。

測定(2)では、「offset の制限値を考慮したレコード一括取得について」で紹介している、レコードID($id)を利用する方法や offset を利用する方法を使って、大量レコード取得にかかる時間を調べました。

測定結果

結果は以下のとおりです。

測定(2)では、取得するレコード数に比例して、処理時間が増加することがわかります。
この測定では、"文字列以外"と"全フィールド取得"では、最大23秒の差になりました。

測定(2)では、フィールド数が少なくても、大量レコードを取得する場合は、数十秒と体感できるほどの差になることがわかりました。
取得するレコード数が多かったり、アプリがより複雑なものだったとしたら、実行時間の差はより大きくなるでしょう。

おわりに

今回は、取得するフィールドを指定することで、kintoneアプリのレコード一括取得REST APIの実行時間を短縮できることを紹介しました。
簡単な方法ですが、地味に効果がありますので、ご参考にしていただければと思います。

このTipsは、2018年12月版 kintoneで確認したものになります。

記事に関するフィードバック

直接的に記事と関連がないご質問はcybozu developer コミュニティをご活用ください。

ログインしてコメントを残してください。