スキーマとは
スキーマは、プロジェクトの構成を定義する設定ファイルです。以下の要素で構成されます。
- tables: データベースの定義
- tableModules: データベースで複雑なデータ構造を表現するためのモジュールの定義
- buckets: バケットの定義
- authorities: 権限の定義
設定ファイルはTypeScriptで記述します。このファイルを Orizm CLI に読み込ませて使用します。通常、ファイル名は orizm.config.ts
でプロジェクトルートに配置しますが、CLI のオプションで任意のファイル名や配置場所を指定できます。
スキーマの例
以下はスキーマの例です。
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()
を使った定義方法へ移行できます。
以下に以前の定義方法で書かれたスキーマを示します。
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;