レコード更新におけるテーブル操作のテクニック

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

目次

はじめに

kintoneアプリのレコードは、テーブルという複数の行を作成できます。
見積もりや月間タイムカード、訪問記録など、テーブルを利用するシーンは多いです。
本記事では、kintone REST APIを使ったテーブル操作を紹介します。

kintone REST APIを使って、レコード内のテーブルを更新するときには次の2つの注意点があります。

  • レコード更新時にテーブルのデータを含まない場合には、テーブルのデータは保持される。
  • レコード更新時にテーブルのデータを含む場合には、リクエストに含まれないデータは更新されない。

これらの注意点を考慮し、さまざまなケースを紹介します。

準備:アプリとレコードの作成

次のようにフィールドを設定したアプリを作成しました。
「Text」と「Number」はテーブル内に配置します。

フィールド名 フィールドタイプ フィールドコード
Table テーブル Table
Text 文字列(1行) Text
Number 数値 Number

アプリを作成したら、次のようにレコードを1つ追加してください。

レコードの値の取得

まずは1件のレコードを取得するAPIを使ってアプリのレコードを取得し、実際のレコードの値を確認してみましょう。
サンプルコードは次のリンクを参考にしてください。
1件のレコードを取得する

取得した結果は次のとおりです。
レコードの値は、JSON形式で取得できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
{
  "record": {
    "レコード番号": {
      "type": "RECORD_NUMBER",
      "value": "3"
    },
    "Table": { // テーブルのフィールドコード
      "type": "SUBTABLE",
      "value": [ // 行のデータ
        {
          "id": "8204", // 行のID
          "value": {
            "Number": { // テーブル内のフィールドのフィールドコード
              "type": "NUMBER", // テーブル内のフィールドのフィールドタイプ
              "value": "1" // テーブル内のフィールドの値
            },
            "Text": {
              "type": "SINGLE_LINE_TEXT",
              "value": "TableText1"
            }
          }
        },
        {
          "id": "8205",
          "value": {
            "Number": {
              "type": "NUMBER",
              "value": "2"
            },
            "Text": {
              "type": "SINGLE_LINE_TEXT",
              "value": "TableText2"
            }
          }
        }
      ]
    },
    "更新者": {
      "type": "MODIFIER",
      "value": {
        "code": "cybozu",
        "name": "cybozu"
      }
    },
    "作成者": {
      "type": "CREATOR",
      "value": {
        "code": "cybozu",
        "name": "cybozu"
      }
    },
    "$revision": {
      "type": "__REVISION__",
      "value": "16"
    },
    "更新日時": {
      "type": "UPDATED_TIME",
      "value": "2025-07-10T11:42:00Z"
    },
    "作成日時": {
      "type": "CREATED_TIME",
      "value": "2025-07-10T09:44:00Z"
    },
    "$id": {
      "type": "__ID__",
      "value": "3"
    }
  }
}

その他フィールドの形式については次のリンクを参考にしてください。
フィールドの形式

レコードの更新

では、1件のレコードを更新するAPIを使って、テーブルフィールドを更新してみましょう。

テーブルの最後に値を追加する

行を追加する場合、既存の行のIDをリクエストに含める必要があります。
サンプルコードは次のリンクを参考にしてください。
1件のレコードを更新する

行の各フィールドの値を更新しない場合は、次のように既存の行の値を省略できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
  "app": "115", // 更新するアプリのアプリID
  "id": "3", // 更新するレコードID
  "record": {
    "Table": {
      "value": [
        {
          "id": "8204" // 既存の行のID
        },
        {
          "id": "8205" // 既存の行のID
        },
        {
          "value": { // 追加する行の値
            "Number": {
              "value": "3"
            },
            "Text": {
              "value": "追加するテキスト"
            }
          }
        }
      ]
    }
  }
}

また、既存の行のIDを省略し、すでにテーブルにあった行の値をすべてリクエストに含めると、テーブルに値の追加ができます。
実際の挙動は「既存の行をすべて削除し、リクエストに含まれるデータをテーブルへ追加する」となります。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
{
  "app": "115", // 更新するアプリのアプリID
  "id": "3", // 更新するレコードID
  "record": {
    "Table": {
      "value": [ // 既存の行の値+追加する行の値
        {
          "value": {
            "Text": {
              "value": "TableText1"
            },
            "Number": {
              "value": "1"
            }
          }
        },
        {
          "value": {
            "Text": {
              "value": "TableText2"
            },
            "Number": {
              "value": "2"
            }
          }
        },
        {
          "value": {
            "Number": {
              "value": "3"
            },
            "Text": {
              "value": "追加するテキスト"
            }
          }
        }
      ]
    }
  }
}

更新した結果は次のとおりです。

テーブルの1行目に挿入する

挿入の場合にも、テーブルの行追加と同様の処理になります。
テーブルに表示したい順番でリクエストします。

行の各フィールドの値を更新しない場合は、先ほどと同様に既存の行の値を省略できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
  "app": "115", // 更新するアプリのアプリID
  "id": "3", // 更新するレコードID
  "record": {
    "Table": {
      "value": [
        {
          "value": { // 追加する行の値
            "Number": {
              "value": "0"
            },
            "Text": {
              "value": "1行目に挿入する"
            }
          }
        },
        {
          "id": "8204" // 既存の行のID
        },
        {
          "id": "8205" // 既存の行のID
        }
      ]
    }
  }
}

またこちらも同様に、既存の行のIDを省略し、すでにテーブルにあった行の値をすべてリクエストに含めると、テーブルに値の追加ができます。
実際の挙動は「既存の行をすべて削除し、リクエストに含まれるデータをテーブルへ追加する」となります。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
{
  "app": "115", // 更新するアプリのアプリID
  "id": "3", // 更新するレコードID
  "record": {
    "Table": {
      "value": [ // 追加する行の値+既存の行の値
        {
          "value": {
            "Number": {
              "value": "0"
            },
            "Text": {
              "value": "1行目に挿入する"
            }
          }
        },
        {
          "value": {
            "Text": {
              "value": "TableText1"
            },
            "Number": {
              "value": "1"
            }
          }
        },
        {
          "value": {
            "Text": {
              "value": "TableText2"
            },
            "Number": {
              "value": "2"
            }
          }
        }
      ]
    }
  }
}

挿入した結果は次のとおりです。

テーブルの1行の特定のフィールドのみを更新する

更新する行のIDを指定することで、その行の特定のフィールドのみを更新できます。
同じ行の他のフィールドを更新しない場合にはそのフィールドを省くことができます。
既存の行のIDを省略した場合、対象行は削除されます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
  "app": "115", // 更新するアプリのアプリID
  "id": "3", // 更新するレコードID
  "record": {
    "Table": {
      "value": [
        {
          "id": "8204", // 更新する行ID
          "value": {
            "Text": {
              "value": "特定のフィールドのみを更新する"
            }
          }
        },
        {
          "id": "8205", // 更新する行ID
          "value": {
            "Number": {
              "value": "200"
            }
          }
        }
      ]
    }
  }
}

テーブルの1行の特定のフィールドのみを更新した結果は次のとおりです。
赤枠の部分のみが更新されています。

注意事項

存在しない行IDを指定した場合、エラーは出ず、新規追加として扱われます。
その際、テーブルに存在するがAPIで指定していない既存の行IDは削除されます。

補足:テーブルの内容をすべて削除する

Tableオブジェクト内のvalue配列を空にして指定し、更新することで削除できます。

1
2
3
4
5
6
7
8
9
{
  "app": "115", // 更新するアプリのアプリID
  "id": "3", // 更新するレコードID
  "record": {
    "Table": {
      "value": []
    }
  }
}

結果は次のとおりです。

おわりに

このようにテーブル更新のテクニックを理解するだけで、さまざまな利用シーンに活用できるかと思います。
ぜひ、お試しください。

information

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