スキーマとは
スキーマは、プロジェクトの構成を定義する設定ファイルです。以下の要素で構成されます。
- 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 pushcms generate コマンドでスキーマをもとにCMS向けのクライアントコードやTypeScriptの型定義を生成します。
orizm cms generateconsumer generate コマンドでスキーマをもとにConsumer向けのクライアントコードやTypeScriptの型定義を生成します。
orizm consumer generatedefineConfig() を使わない定義方法
@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;