Sync
sync - schemaとMySQLの同期
設定項目
syncの設定項目は、以下のようなオブジェクトを取ります。
const options = {  sync: {    active: true;  }};module.exports = options;- active: trueの場合、syncを実行します。falseの場合、syncを実行しません。(デフォルトはtrue)
 
syncとは
syncのactiveがtrueの場合、syncを実行します。
syncとは、schemaとMySQLの同期を行う機能です。
下記SQLより、すでに生成されたschema.tsが存在していたとします。
  CREATE TABLE `my_todo_list` (  `id` int NOT NULL AUTO_INCREMENT,  `status` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,  `task` varchar(255) NOT NULL,  `description` text,  `due_date` date DEFAULT NULL,  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ciそれをもとに生成したものが下記スキーマです。
ただし、statusはundoneとin_progressとdoneのみを許容するように手動で変更したとします。
export const myTodoListSchema = z.object({  id: z.number(),  status: z.union([    z.literal("undone"),    z.literal("in_progress"),    z.literal("done"),  ]), // 手動で変更  task: z.string(),  description: z.string().nullish(),  due_date: z.date().nullish(),  created_at: z.date().nullish(),  updated_at: z.date().nullish(),});このあとにテーブルにカラムを追加し、新しくスキーマを生成したいとします。
このとき、syncのactiveがfalseの場合は、完全に新しいスキーマを生成します。
よってstatusはz.string()に戻ってしまいます。
syncが有効になっている場合は、すでに存在するスキーマはそのまま残ります。
仮に新しく追加されたカラムがあった場合、下記のように既存のスキーマに追加されます。
export const myTodoListSchema = z.object({  id: z.number(),  status: z.union([    z.literal("undone"),    z.literal("in_progress"),    z.literal("done"),  ]),  task: z.string(),  description: z.string().nullish(),  due_date: z.date().nullish(),  created_at: z.date().nullish(),  updated_at: z.date().nullish(),  new_column: z.string().nullish(), // 追加されたカラム});syncを有効にしておくことで、常にスキーマを最新に保つことができます。
注意点として、schema.tsファイルに何か記述があった場合、schemaを再生成したときに削除されます。
自作のスキーマ、補助関数などは別ファイルに記述しておくことをおすすめします。