複数のレコードを取得するAPI実行時の注意点(テーブル内のフィールドについて)

著者名:Ming( サイボウズ株式会社 (External link)

目次

はじめに

本記事は、複数のレコードを取得するAPI実行時の注意点について紹介するシリーズの第三弾です。
第一弾の「totalCountパラメーター」と第二弾の「OR条件」についての記事に続き、「テーブル内のフィールド」についての記事となります。
アプリでテーブル(表)を利用し、複数のレコードを取得するAPIを利用する場合、リクエストのパラメーターにテーブル内のフィールドを指定した絞り込みをしたことはありますか?

テーブル内に配置したフィールドをqueryパラメーターとして指定することで、複数のレコードを取得するAPIの処理は遅くなる可能性があります。
今回の検証では、複数のレコードを取得するAPIをテーブル内のフィールドで利用した際に、以下の条件でどのような変化が生じるかを調査しました。

  1. テーブル内のフィールドをqueryパラメーターに指定した場合(検証A)
  2. テーブル内の行数が増えた場合(検証B)
  3. テーブル内で絞り込み条件に一致する行(ヒット数)が増加した場合(検証C)
  4. テーブル内のフィールドを異なる種類にした場合(検証D)

検証結果から、複数のレコードを取得するAPIを快適に実行してもらうために、queryパラメーターを指定する際の注意点を紹介します。

注意事項

caution
警告

ご利用の環境内のデータ量等の要因により処理速度は変わります。

  • 同様のリクエストパラメーターで複数のレコードを取得するAPIを実行した場合でも同じ結果を保証するものではありません。
  • 将来にわたっても同様の結果になることを保証するものではありません。

テーブル内のフィールドとは?

テーブル内のフィールドとは、アプリのフォームで追加した テーブル (External link) の中に配置されるフィールドです。
これらのフィールドは、テーブルの各行ごとに入力できます。

また、テーブル外のフィールドと同様に、テーブル内のフィールドも フィールドコード (External link) を指定できます。

たとえば、複数のレコードを取得するAPIのqueryパラメーターにテーブル内のフィールド(例:text_table)を指定し、絞り込み条件として、複数のレコードを取得できます。

1
2
3
4
5
const body = {
  app: kintone.app.getId(),
  query: 'text_table = "test" and limit 500 offset 0',
  fields: ['レコード番号', '作成日時']
};

APIの詳細は以下を確認してください。
複数のレコードを取得する

queryパラメーターにテーブル内のフィールドを指定した場合の影響

queryパラメーターにテーブル内のフィールドを指定した場合、リクエストが大幅に遅延するなど、kintoneを快適に使えなくなる場合があります。

検証内容

  • queryパラメーターにテーブル内のフィールドを指定した場合の処理速度の比較(検証A)
  • queryパラメーターにテーブル内のフィールドを指定した場合、以下の条件に基づき、処理速度の差を比較
    • a. テーブル内の行数の増減(検証B)
    • b. queryで絞り込んだ場合の、条件に合致するテーブル内のレコード数(検証C)
  • queryの絞り込み条件で使うテーブル内のフィールドの種類(検証D)

検証条件

検証環境

  • 使用した検証環境:kintone 2024年11月版
  • ブラウザー:Google Chrome

検証A、B、Cのアプリ構成

  • テーブル外:文字列(1行)フィールドをひとつ用意
  • テーブル内:文字列(1行)フィールドをひとつ用意
    • 検証条件によって、テーブル内の行数を調整する(下図のテーブルでは、レコード数は10件となる)

検証 A、B、Cで使用するフィールドのレコード登録内容

以下の表の記載内容で、各検証アプリに100,000件のレコードを登録します。

レコード番号 テーブル外の文字列(1行) テーブル内のレコードの文字列(1行) *1
1 〜 100,000 testing test1 〜 test100

*1 検証によって、テーブル内のレコードの文字列(1行)に登録する値や数が異なります(例:検証Bでは1件、10件、100件で登録)。 ^

検証Dのアプリ構成

テーブル内:日付、数値、文字列(1行)フィールド、文字列(複数行)、ラジオボタンフィールドをひとつずつ用意します。

検証Dで使用するフィールドのレコード登録内容

以下の表の記載内容で、検証Dのアプリに100,000件のレコードを登録します。

レコード番号 日付 数値 文字列(1行) 文字列(複数行) ラジオボタン
1 2025-01-01 123 test1 this is test1
です
radio_1
2 ~ 100,000 2025-01-02 456 test2 this is test2
です
radio_2

検証時に実行したリクエストパラメーター

5行目のqueryで、テーブル内外の値やlimitの値を都度変更して実行します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
kintone.events.on('app.record.index.show', async (event) => {
  const record = event.record;
  const body = {
    app: kintone.app.getId(),
    query: 'text_table in ("test1") limit 500'
  };
  await kintone.api(
    kintone.api.url('/k/v1/records.json', true),
    'GET',
    body,
    (resp) => {
      console.log(resp);
    },
    (error) => {
      console.log(error);
    }
  );
});

具体的な値変更の例は以下のようになります。

  • 検証A:テーブル外のフィールドをqueryパラメーターに指定した場合
1
2
3
4
const body = {
  app: kintone.app.getId(),
  query: 'text=\'testing\' limit 500'
};
  • 検証A:テーブル内のフィールドをqueryパラメーターに指定した場合
1
2
3
4
const body = {
  app: kintone.app.getId(),
  query: 'text_table in ("test1") limit 500'
};

各検証の結果

検証Aの結果

queryパラメーターにテーブル内のフィールドを指定する場合、テーブル外の同じ種類のフィールド(文字列1行)を指定した場合と比べて、処理速度が遅くなることを確認しました。
limitで制限した取得レコード数による処理速度への影響は見られませんでした。

検証Bの結果

queryパラメーターにテーブル内のフィールドを指定して実行した結果、テーブル内の行数増加に伴い処理速度が遅くなることを確認しました。

検証Cの結果

queryパラメーターにテーブル内のフィールドを指定して実行した際、指定した条件に一致する(ヒット数)テーブル内レコード数が増加しても、処理速度に大きな変化は見られませんでした。

検証Dの結果

検証Dでは、queryパラメーターにテーブル内のフィールドを指定して実行した際に、異なる種類のフィールドを使用した場合の処理速度を確認しました。
テーブル内の文字列(1行)の処理時間は、他のフィールドタイプより遅いことが確認されました。

検証結果まとめ

  • 検証A
    • queryパラメーターにテーブル内のフィールドを指定する場合、テーブル外の同じ種類のフィールドを指定した場合と比べて、処理速度が遅くなることを確認しました。
  • 検証B、C、D
    • queryパラメーターにテーブル内のフィールドを指定して実行した場合
      • テーブル内の行数が増えると、処理速度がさらに遅くなることを確認しました。
      • ヒット数が増えた場合でも、処理速度に大きな差は見られないことを確認しました。
      • 指定するテーブル内のフィールドの種類によって、処理速度が異なることを確認しました。

テーブル内のフィールドを設定する際の注意点

  • queryパラメーターにテーブル内のフィールドを設定しないようにする。
  • レコードの絞り込み条件を指定する必要がある場合は、必要なフィールドをテーブル外に転記し、そのフィールドを使って絞り込みを行う。
  • queryパラメーターにテーブル内のフィールドを指定せざるを得ない場合は、1レコードあたりのテーブルの行数を減らす。

おわりに

queryパラメーターにテーブル内のフィールドを設定した場合、リクエストが大幅に遅延するなど、kintoneを快適に使えなくなる場合があります。

本記事を参考に、queryパラメーターにおけるテーブル内のフィールドの性質を理解し、使いどころを見極めて、複数のレコードを取得しましょう。

関連記事

information

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