---
title: カスタムオブジェクト
description: "実行時にオブジェクトとフィールドを追加する方法。モジュールが制御するもの、拒否されるキー、上限、そしてリレーションが関連リストを生む仕組みです。"
---

`custom_objects` モジュールは、ワークスペースが 14 個の標準オブジェクトと並べて独自のオブジェクトとフィールドを追加できるようにします。それ以外は標準と同じです。同じフィールドの種類、同じレコードのエンドポイント、同じ権限の検査です。

**モジュールが制御するのはスキーマであり、データではありません。** オブジェクトやフィールドの作成には必要ですが、レコードの読み書きには一切不要です。カスタムオブジェクトでも標準オブジェクトでも同じなので、データを動かすだけのクライアントはモジュールの状態に関係なく動きます。

## オブジェクトの作成

[`POST /objects`](/ja/reference/crm/post-api-v1-objects) は 3 つを取ります。

| フィールド | 形 |
| --- | --- |
| `key` | `^[a-z][a-z0-9_]{0,62}$` — 小文字、英字で始まり、最大 63 文字。パスとフィルターが使うのはこれです |
| `label` | 1〜120 文字。一覧が表示する複数形の名前 |
| `singularLabel` | 1〜120 文字。1 件のレコードが表示する名前 |

2 種類のキーが `object_key_reserved` で拒否されます。標準オブジェクトのキーと、プラットフォームが内部で使う名前に衝突するキーです。汎用的な語ではなく、その製品が所有する語を選んでください。

## オブジェクトの変更

[`PATCH /objects/{objectId}`](/ja/reference/crm/patch-api-v1-objects-by-object-id) は `key`、`label`、`singularLabel`、そして読み取り時の `revision` を受け付けます。

**オブジェクトのキーは変更できます。フィールドのキーはできません。** オブジェクトのキーの変更は通りますが、古いキーを指していたすべてのパスと保存済みフィルターは一致しなくなるため、無料の変更ではありません。フィールドは逆です。更新エンドポイントは `key`、`type`、`targetObjectId` を受け付けますが、そのどれも変更は拒否します（`field_key_immutable`、`field_type_immutable`、`field_target_immutable`）。実際に動くのは `label` と `required` だけです。

`required` を有効にする変更は、その値を持たないレコードが 1 件でもあれば拒否されます。標準フィールドの `required` は一切変更できません（`field_system_locked`）。仮想の種類は必須にできません。何も書き込まないからです。

## フィールド

フィールドは [`POST /objects/{objectId}/fields`](/ja/reference/crm/post-api-v1-objects-by-object-id-fields) で追加し、標準オブジェクトが使うのと同じ 19 種類が使えます。

**1 つのオブジェクトが持てるフィールドは最大 256 個です。** 257 個目は `object_field_limit` で拒否されます。

すべてのオブジェクトのテーブルが持つ列として 10 個のキーが予約されており、フィールドはそのいずれも使えません。

`id` · `name` · `organization_id` · `object_id` · `revision` · `created_at` · `updated_at` · `archived_at` · `created_by` · `updated_by`

これを使うと `field_key_reserved` が返り、そのオブジェクトに既にあるキーを再利用すると `field_key_taken` が返ります。

## リレーションが関連リストを生む

`relation` フィールドは指し先のオブジェクトを指定します。逆方向は反対側から読み取ります。[`GET /objects/{objectId}/related`](/ja/reference/crm/get-api-v1-objects-by-object-id-related) はリレーションフィールドがこのオブジェクトを指しているオブジェクトを返し、これが関連リストの元になります。

つまりカスタムオブジェクトは、どこかに登録することではなく標準オブジェクトを指すことで、その文脈に現れます。自分のオブジェクトから `account` へリレーションを追加すれば、取引先に自分のレコードの関連リストが増えます。

## 変わらないこと

カスタムオブジェクトのレコードは標準オブジェクトと同じエンドポイント（`/objects/{objectId}/records` など）を使い、同じ 4 つの[権限](/ja/guides/concepts/permissions)検査を通ります。カスタムデータ専用のスコープはありません。`records.read` と `records.write` がワークスペースの持つすべてのオブジェクトをカバーします。
