メインコンテンツへスキップ
開発者向けドキュメントを表示しています
このドキュメントは、Base44 開発者プラットフォームで作業する開発者向けです。アプリエディタを使用したアプリデータの管理については、アプリデータの管理を参照してください。
エンティティは、データ構造と検証ルールを記述する JSON スキーマを使用して定義されます。

基本のスキーマ構造

エンティティスキーマは、プロジェクトの entities ディレクトリ内の JSON ファイルで定義されます。デフォルトでは base44/entities/ ですが、プロジェクト構成でパスをカスタマイズできます。ファイル名がエンティティ名を決定します。例えば、Task.json は Task エンティティを作成します。 エンティティスキーマのテンプレート:

組み込みフィールド

すべてのエンティティレコードには、次のフィールドが自動的に含まれます。スキーマでこれらの名前のフィールドを定義しないでください。 内部フィールドは API レスポンスで返されませんが、セキュリティルールで参照できます。

スキーマフィールド

string
エンティティの文字列識別子。
string
必須
"object" である必要があります。
string
ユーザーフレンドリーな表示名。
string
エンティティが表すものの説明。
object
必須
フィールド定義を含むオブジェクト。各フィールドには type とオプションの検証ルールがあります。

フィールドタイプ

エンティティは、保存できる異なる種類のデータを定義するさまざまなフィールドタイプをサポートしています: string、integer、number、boolean、array、object。 properties 内の各フィールドには type が必要です。型に基づいて、検証オプションを追加できます。

String フィールド

String フィールドは次のオプションをサポートします:
  • minLength / maxLength: 最小および最大文字数を制御します。
  • pattern: カスタム検証用の正規表現。
  • format: 事前定義された形式。サポートされる値:
    • "date"
    • "date-time"
    • "time"
    • "email"
    • "uri"
    • "hostname"
    • "ipv4"
    • "ipv6"
    • "uuid"
  • enum: 特定の許可された値に制限します。配列として定義: ["value1", "value2", "value3"]。
  • default: 提供されない場合のデフォルト値。

Integer フィールド

Integer フィールドは次のオプションをサポートします:
  • minimum / maximum: 包含的な下限/上限を設定します。
  • default: 提供されない場合のデフォルト値。

Number フィールド

Number フィールドは次のオプションをサポートします:
  • minimum / maximum: 包含的な下限/上限を設定します。
  • default: 提供されない場合のデフォルト値。

Boolean フィールド

Boolean フィールドは次のオプションをサポートします:
  • default: 提供されない場合のデフォルト値。

Array フィールド

Array フィールドは次のオプションをサポートします:
  • items: 配列要素のタイプ/スキーマを定義します。
  • default: 提供されない場合のデフォルト配列値。

Object フィールド

Object フィールドは次のオプションをサポートします:
  • properties: オブジェクト内のフィールドを定義します。
  • required: 必須プロパティ名のリスト。

必須フィールド

提供する必要があるフィールドを指定します:

一意性

Base44 エンティティは一意制約をサポートしていません。unique_fields のようなスキーマフォーマットに含まれないプロパティは、スキーマとともに保存されますが無視されます。
レコードの重複を避けるには、新しいレコードを作成する前にバックエンド関数で既存のレコードをチェックしてください。このようなチェックは重複の発生する可能性を狭めますが、完全には排除できません。1 人のユーザーだけが確実に成功するようにするには、同時更新 のクレームパターンを使用してください。

同時更新

Base44 はレコードをロックせず、複数のレコードにまたがるトランザクションも実行しません。2 人のユーザーやプロセスが同時に同じデータを変更すると、各書き込みは個別に適用されます。このセクションでは、どの更新がアトミックか、レコードを安全にクレームする方法、複数のレコードを書き込む呼び出しで想定される動作について説明します。

レコードを安全にクレームする

タスクや予約枠など、既存のレコードを 1 人のユーザーだけがクレームできるようにするには、その単一レコードの id と、まだ満たされている必要がある条件を指定して updateMany() を呼び出します。更新は、書き込みの時点で条件がまだ一致する場合にのみ適用されます。そのため、2 人のユーザーが同時に試行しても、成功するのは 1 人だけです。自分の更新が成功したかどうかは、レスポンスの updated で確認します。
書き込みの時点で条件が再チェックされるのは、クエリで単一レコードの id をプレーンな値として指定した場合のみです。$in や $or で複数の id を指定する場合を含め、それ以外のクエリでは、まず一致するレコードを見つけてから更新します。そのため、その間に変更されたレコードも更新される可能性があります。

複数のレコードを書き込む

bulkCreate()、bulkUpdate()、updateMany()、deleteMany()、upsert() はトランザクションではありません。各レコードは個別に書き込まれるため、呼び出しが途中で失敗しても、すでに書き込まれたレコードはそのまま残ります。これらの呼び出しは、再実行しても安全になるように設計してください。たとえば、すでに更新されたレコードを除外します。 同じキーで upsert() を同時に呼び出すと、重複したレコードが作成されることがあります。

完全な例

完全なエンティティスキーマ:

エンティティのデプロイ

エンティティスキーマを定義した後、entities push を使用して Base44 にデプロイします。プロジェクト全体をデプロイするために deploy コマンドを実行すると、エンティティも自動的にデプロイされます。 デプロイ後、SDK の entities モジュールを使用してエンティティと対話できます。スキーマ内のエンティティ名は、大文字小文字を含めて、SDK でアクセスする方法と正確に一致する必要があります。例えば、スキーマに "name": "Task" がある場合、base44.entities.Task.list() としてアクセスする必要があります。 デプロイされたエンティティスキーマは、ダッシュボードの Data セクションで表示できます。

関連項目

  • User Schema: ユーザー認証のための特別な組み込みエンティティ
  • Security: エンティティ用の行レベルセキュリティルールを構成
  • Project Structure: エンティティスキーマがプロジェクトにどう適合するか
このページは AI を使用して翻訳されました。最も正確で最新の情報については、英語版 を参照してください。