Featuresスキーマスキーマとは

スキーマとは

スキーマは、プロジェクトの構成を定義する設定ファイルです。以下の要素で構成されます。

  • tables: データベースの定義
  • tableModules: データベースで複雑なデータ構造を表現するためのモジュールの定義
  • buckets: バケットの定義
  • authorities: 権限の定義

設定ファイルはTypeScriptで記述します。このファイルを Orizm CLI に読み込ませて使用します。通常、ファイル名は orizm.config.ts でプロジェクトルートに配置しますが、CLI のオプションで任意のファイル名や配置場所を指定できます。

スキーマの例

以下はスキーマの例です。

orizm.config.ts
import { defineConfig } from "@orizm/cli/config";
 
export default defineConfig({
  tables: {
    blog: {
      columns: {
        slug: {
          type: "string",
          required: true,
        },
        title: {
          type: "string",
          required: true,
        },
        tags: {
          type: "module-array",
          moduleName: "tag",
        },
        body: {
          type: "string",
        },
      },
      indexes: [{ columns: ["slug"], unique: true }],
      enableDrafts: true,
    },
    tag: {
      columns: {
        key: {
          type: "string",
          required: true,
        },
        displayName: {
          type: "string",
          required: true,
        },
      },
      indexes: [{ columns: ["key"], unique: true }],
    },
  },
  tableModules: {
    tag: {
      columns: {
        tagId: {
          type: "reference",
          tableName: "tag",
          includeName: "tag",
          onDelete: "cascade",
        },
      },
    },
  },
  buckets: {
    public: {
      accessControl: "public",
    },
  },
  authorities: [
    {
      match: { role: "editor" },
      allowTables: ["blog", "category", "tag"],
      allowBuckets: ["images"],
      denyUserManagement: true,
    },
  ],
});

Orizm CLI

Orizm CLI を使用してスキーマのバリデーションや適用、クライアントコードの生成を行うことができます。 CLIは @orizm/cli パッケージに含まれています。

詳細は Orizm CLI ページを参照してください。

旧 CMS CLI や Consumer CLI を利用している場合は、CLI移行ガイド を参考に Orizm CLI への移行を行なってください。

スキーマのバリデーション

Orizm CLI を使用してスキーマ定義のバリデーションを行うことができます。

config validate コマンドを実行すると、スキーマの定義が正しいかどうかを検証します。

orizm config validate

スキーマの適用

プロジェクトにスキーマを適用するには、Orizm CLIを使用します。

push コマンドでスキーマをプロジェクトに適用します。

orizm push

cms generate コマンドでスキーマをもとにCMS向けのクライアントコードやTypeScriptの型定義を生成します。

orizm cms generate

consumer generate コマンドでスキーマをもとにConsumer向けのクライアントコードやTypeScriptの型定義を生成します。

orizm consumer generate

defineConfig() を使わない定義方法

@orizm/cli バージョン 1.1.0 でスキーマ定義用のヘルパー関数 defineConfig() が追加されました。
それより前のバージョンの定義方法とは以下の違いがあります。

  • tables, tableModules, buckets プロパティはオブジェクトではなく、配列で定義していました。
  • tables, tableModules およびそのカラムと buckets は、名前をオブジェクトのキーではなく name プロパティで定義していました。

以前の定義方法を使用している場合は、上記の変更に対応することで defineConfig() を使った定義方法へ移行できます。

以下に以前の定義方法で書かれたスキーマを示します。

orizm.config.ts
import type { Orizm } from "@orizm/cms-sdk";
 
export default {
  tables: [
    {
      name: "blog",
      columns: [
        {
          name: "slug",
          type: "string",
          required: true,
        },
        {
          name: "title",
          type: "string",
          required: true,
        },
        {
          name: "tags",
          type: "module-array",
          moduleName: "tag",
        },
        {
          name: "body",
          type: "string",
        },
      ],
      indexes: [{ columns: ["slug"], unique: true }],
      enableDrafts: true,
    },
    {
      name: "tag",
      columns: [
        {
          name: "key",
          type: "string",
          required: true,
        },
        {
          name: "displayName",
          type: "string",
          required: true,
        },
      ],
      indexes: [{ columns: ["key"], unique: true }],
    },
  ],
  tableModules: [
    {
      name: "tag",
      columns: [
        {
          name: "tagId",
          type: "reference",
          tableName: "tag",
          includeName: "tag",
          onDelete: "cascade",
        },
      ],
    },
  ],
  buckets: [
    {
      name: "object",
    },
  ],
  authorities: [
    {
      match: { role: "editor" },
      allowTables: ["blog", "category", "tag"],
      allowBuckets: ["images"],
      denyUserManagement: true,
    },
  ],
} satisfies Orizm.ProjectDefine;