diff --git a/src/misc/schema.ts b/src/misc/schema.ts
index 8854ab5303..90d4c3b715 100644
--- a/src/misc/schema.ts
+++ b/src/misc/schema.ts
@@ -1,19 +1,57 @@
-import { packedNoteSchema } from "@/models/repositories/note";
-import { packedNotificationSchema } from "@/models/repositories/notification";
+import { SimpleObj, SimpleSchema } from './simple-schema';
+import { packedUserSchema } from '@/models/repositories/user';
+import { packedNoteSchema } from '@/models/repositories/note';
+import { packedUserListSchema } from '@/models/repositories/user-list';
+import { packedAppSchema } from '@/models/repositories/app';
+import { packedMessagingMessageSchema } from '@/models/repositories/messaging-message';
+import { packedNotificationSchema } from '@/models/repositories/notification';
+import { packedDriveFileSchema } from '@/models/repositories/drive-file';
+import { packedDriveFolderSchema } from '@/models/repositories/drive-folder';
+import { packedFollowingSchema } from '@/models/repositories/following';
+import { packedMutingSchema } from '@/models/repositories/muting';
+import { packedBlockingSchema } from '@/models/repositories/blocking';
+import { packedNoteReactionSchema } from '@/models/repositories/note-reaction';
+import { packedHashtagSchema } from '@/models/repositories/hashtag';
+import { packedPageSchema } from '@/models/repositories/page';
+import { packedUserGroupSchema } from '@/models/repositories/user-group';
+import { packedNoteFavoriteSchema } from '@/models/repositories/note-favorite';
+import { packedChannelSchema } from '@/models/repositories/channel';
+import { packedAntennaSchema } from '@/models/repositories/antenna';
+import { packedClipSchema } from '@/models/repositories/clip';
+import { packedFederationInstanceSchema } from '@/models/repositories/federation-instance';
+import { packedQueueCountSchema } from '@/models/repositories/queue';
+import { packedGalleryPostSchema } from '@/models/repositories/gallery-post';
 
-export type Schema = {
-	type: 'boolean' | 'number' | 'string' | 'array' | 'object' | 'any';
-	nullable: boolean;
-	optional: boolean;
-	items?: Schema;
-	properties?: Obj;
-	description?: string;
-	example?: any;
-	format?: string;
-	ref?: string;
-	enum?: string[];
+export const refs = {
+	User: packedUserSchema,
+	UserList: packedUserListSchema,
+	UserGroup: packedUserGroupSchema,
+	App: packedAppSchema,
+	MessagingMessage: packedMessagingMessageSchema,
+	Note: packedNoteSchema,
+	NoteReaction: packedNoteReactionSchema,
+	NoteFavorite: packedNoteFavoriteSchema,
+	Notification: packedNotificationSchema,
+	DriveFile: packedDriveFileSchema,
+	DriveFolder: packedDriveFolderSchema,
+	Following: packedFollowingSchema,
+	Muting: packedMutingSchema,
+	Blocking: packedBlockingSchema,
+	Hashtag: packedHashtagSchema,
+	Page: packedPageSchema,
+	Channel: packedChannelSchema,
+	QueueCount: packedQueueCountSchema,
+	Antenna: packedAntennaSchema,
+	Clip: packedClipSchema,
+	FederationInstance: packedFederationInstanceSchema,
+	GalleryPost: packedGalleryPostSchema,
 };
 
+export interface Schema extends SimpleSchema {
+	properties?: Obj;
+	ref?: keyof typeof refs;
+}
+
 type NonUndefinedPropertyNames<T extends Obj> = {
 	[K in keyof T]: T[K]['optional'] extends true ? never : K
 }[keyof T];
@@ -25,7 +63,7 @@ type UndefinedPropertyNames<T extends Obj> = {
 type OnlyRequired<T extends Obj> = Pick<T, NonUndefinedPropertyNames<T>>;
 type OnlyOptional<T extends Obj> = Pick<T, UndefinedPropertyNames<T>>;
 
-export type Obj = { [key: string]: Schema };
+export interface Obj extends SimpleObj { [key: string]: Schema; }
 
 export type ObjType<s extends Obj> =
 	{ [P in keyof OnlyOptional<s>]?: SchemaType<s[P]> } &
@@ -46,19 +84,15 @@ type NullOrUndefined<p extends Schema, T> =
 			? (T | undefined)
 			: T;
 
-export const refs = {
-	Note: packedNoteSchema,
-	Notification: packedNotificationSchema,
-};
-
 export type SchemaType<p extends Schema> =
 	p['type'] extends 'number' ? NullOrUndefined<p, number> :
 	p['type'] extends 'string' ? NullOrUndefined<p, string> :
 	p['type'] extends 'boolean' ? NullOrUndefined<p, boolean> :
 	p['type'] extends 'array' ? NullOrUndefined<p, MyType<NonNullable<p['items']>>[]> :
-	p['type'] extends 'object' ?
-	(	p['ref'] extends keyof typeof refs ?
-		NullOrUndefined<p, SchemaType<typeof refs[p['ref']]>> :
-		NullOrUndefined<p, ObjType<NonNullable<p['properties']>>> ) :
+	p['type'] extends 'object' ? (
+		p['ref'] extends keyof typeof refs
+			? NullOrUndefined<p, SchemaType<typeof refs[p['ref']]>>
+			: NullOrUndefined<p, ObjType<NonNullable<p['properties']>>>
+	) :
 	p['type'] extends 'any' ? NullOrUndefined<p, any> :
 	any;
diff --git a/src/misc/simple-schema.ts b/src/misc/simple-schema.ts
new file mode 100644
index 0000000000..abbb348e24
--- /dev/null
+++ b/src/misc/simple-schema.ts
@@ -0,0 +1,15 @@
+export interface SimpleSchema {
+	type: 'boolean' | 'number' | 'string' | 'array' | 'object' | 'any';
+	nullable: boolean;
+	optional: boolean;
+	items?: SimpleSchema;
+	properties?: SimpleObj;
+	description?: string;
+	example?: any;
+	format?: string;
+	ref?: string;
+	enum?: string[];
+	default?: boolean | null;
+}
+
+export interface SimpleObj { [key: string]: SimpleSchema; }
diff --git a/src/models/repositories/clip.ts b/src/models/repositories/clip.ts
index 49dc3a332e..e3d718bef4 100644
--- a/src/models/repositories/clip.ts
+++ b/src/models/repositories/clip.ts
@@ -53,7 +53,7 @@ export const packedClipSchema = {
 		},
 		user: {
 			type: 'object' as const,
-			ref: 'User',
+			ref: 'User' as const,
 			optional: false as const, nullable: false as const,
 		},
 		name: {
diff --git a/src/models/repositories/drive-file.ts b/src/models/repositories/drive-file.ts
index 42a60ff03c..63bd020cbe 100644
--- a/src/models/repositories/drive-file.ts
+++ b/src/models/repositories/drive-file.ts
@@ -234,7 +234,7 @@ export const packedDriveFileSchema = {
 		folder: {
 			type: 'object' as const,
 			optional: true as const, nullable: true as const,
-			ref: 'DriveFolder'
+			ref: 'DriveFolder' as const,
 		},
 		userId: {
 			type: 'string' as const,
@@ -245,7 +245,7 @@ export const packedDriveFileSchema = {
 		user: {
 			type: 'object' as const,
 			optional: true as const, nullable: true as const,
-			ref: 'User'
+			ref: 'User' as const,
 		}
 	},
 };
diff --git a/src/models/repositories/drive-folder.ts b/src/models/repositories/drive-folder.ts
index 4228284f82..bc73018f29 100644
--- a/src/models/repositories/drive-folder.ts
+++ b/src/models/repositories/drive-folder.ts
@@ -87,7 +87,7 @@ export const packedDriveFolderSchema = {
 		parent: {
 			type: 'object' as const,
 			optional: true as const, nullable: true as const,
-			ref: 'DriveFolder'
+			ref: 'DriveFolder' as const,
 		},
 	},
 };
diff --git a/src/models/repositories/following.ts b/src/models/repositories/following.ts
index 3bb120bc4b..24ddd0d676 100644
--- a/src/models/repositories/following.ts
+++ b/src/models/repositories/following.ts
@@ -110,7 +110,7 @@ export const packedFollowingSchema = {
 		followee: {
 			type: 'object' as const,
 			optional: true as const, nullable: false as const,
-			ref: 'User',
+			ref: 'User' as const,
 		},
 		followerId: {
 			type: 'string' as const,
@@ -120,7 +120,7 @@ export const packedFollowingSchema = {
 		follower: {
 			type: 'object' as const,
 			optional: true as const, nullable: false as const,
-			ref: 'User',
+			ref: 'User' as const,
 		},
 	}
 };
diff --git a/src/models/repositories/gallery-post.ts b/src/models/repositories/gallery-post.ts
index 03edb35213..afa22e9edf 100644
--- a/src/models/repositories/gallery-post.ts
+++ b/src/models/repositories/gallery-post.ts
@@ -1,6 +1,6 @@
 import { EntityRepository, Repository } from 'typeorm';
 import { GalleryPost } from '@/models/entities/gallery-post';
-import { SchemaType } from '../../misc/schema';
+import { SchemaType } from '@/misc/schema';
 import { Users, DriveFiles, GalleryLikes } from '../index';
 import { awaitAll } from '@/prelude/await-all';
 import { User } from '@/models/entities/user';
@@ -76,7 +76,7 @@ export const packedGalleryPostSchema = {
 		},
 		user: {
 			type: 'object' as const,
-			ref: 'User',
+			ref: 'User' as const,
 			optional: false as const, nullable: false as const,
 		},
 		fileIds: {
@@ -94,7 +94,7 @@ export const packedGalleryPostSchema = {
 			items: {
 				type: 'object' as const,
 				optional: false as const, nullable: false as const,
-				ref: 'DriveFile'
+				ref: 'DriveFile' as const,
 			}
 		},
 		tags: {
diff --git a/src/models/repositories/messaging-message.ts b/src/models/repositories/messaging-message.ts
index 1a4a8eecc4..f97905af2f 100644
--- a/src/models/repositories/messaging-message.ts
+++ b/src/models/repositories/messaging-message.ts
@@ -67,7 +67,7 @@ export const packedMessagingMessageSchema = {
 		},
 		user: {
 			type: 'object' as const,
-			ref: 'User',
+			ref: 'User' as const,
 			optional: true as const, nullable: false as const,
 		},
 		text: {
@@ -82,7 +82,7 @@ export const packedMessagingMessageSchema = {
 		file: {
 			type: 'object' as const,
 			optional: true as const, nullable: true as const,
-			ref: 'DriveFile',
+			ref: 'DriveFile' as const,
 		},
 		recipientId: {
 			type: 'string' as const,
@@ -92,7 +92,7 @@ export const packedMessagingMessageSchema = {
 		recipient: {
 			type: 'object' as const,
 			optional: true as const, nullable: true as const,
-			ref: 'User'
+			ref: 'User' as const,
 		},
 		groupId: {
 			type: 'string' as const,
@@ -102,7 +102,7 @@ export const packedMessagingMessageSchema = {
 		group: {
 			type: 'object' as const,
 			optional: true as const, nullable: true as const,
-			ref: 'UserGroup'
+			ref: 'UserGroup' as const,
 		},
 		isRead: {
 			type: 'boolean' as const,
diff --git a/src/models/repositories/muting.ts b/src/models/repositories/muting.ts
index e46f4ae448..d957b1792d 100644
--- a/src/models/repositories/muting.ts
+++ b/src/models/repositories/muting.ts
@@ -56,7 +56,7 @@ export const packedMutingSchema = {
 		mutee: {
 			type: 'object' as const,
 			optional: false as const, nullable: false as const,
-			ref: 'User',
+			ref: 'User' as const,
 		},
 	}
 };
diff --git a/src/models/repositories/note-favorite.ts b/src/models/repositories/note-favorite.ts
index 3248c32ded..47586a9116 100644
--- a/src/models/repositories/note-favorite.ts
+++ b/src/models/repositories/note-favorite.ts
@@ -45,7 +45,7 @@ export const packedNoteFavoriteSchema = {
 		note: {
 			type: 'object' as const,
 			optional: false as const, nullable: false as const,
-			ref: 'Note',
+			ref: 'Note' as const,
 		},
 		noteId: {
 			type: 'string' as const,
diff --git a/src/models/repositories/note-reaction.ts b/src/models/repositories/note-reaction.ts
index c349edf182..e73a832109 100644
--- a/src/models/repositories/note-reaction.ts
+++ b/src/models/repositories/note-reaction.ts
@@ -42,7 +42,7 @@ export const packedNoteReactionSchema = {
 		user: {
 			type: 'object' as const,
 			optional: false as const, nullable: false as const,
-			ref: 'User',
+			ref: 'User' as const,
 		},
 		type: {
 			type: 'string' as const,
diff --git a/src/models/repositories/note.ts b/src/models/repositories/note.ts
index 9e0f5e55f0..77fedd791f 100644
--- a/src/models/repositories/note.ts
+++ b/src/models/repositories/note.ts
@@ -95,7 +95,7 @@ export class NoteRepository extends Repository<Note> {
 				hide = true;
 			} else if (meId === packedNote.userId) {
 				hide = false;
-			} else if (packedNote.reply && (meId === (packedNote.reply as PackedNote).userId)) {
+			} else if (packedNote.reply && (meId === packedNote.reply.userId)) {
 				// 自分の投稿に対するリプライ
 				hide = false;
 			} else if (packedNote.mentions && packedNote.mentions.some(id => meId === id)) {
@@ -353,7 +353,7 @@ export const packedNoteSchema = {
 		},
 		user: {
 			type: 'object' as const,
-			ref: 'User',
+			ref: 'User' as const,
 			optional: false as const, nullable: false as const,
 		},
 		replyId: {
@@ -371,12 +371,12 @@ export const packedNoteSchema = {
 		reply: {
 			type: 'object' as const,
 			optional: true as const, nullable: true as const,
-			ref: 'Note'
+			ref: 'Note' as const,
 		},
 		renote: {
 			type: 'object' as const,
 			optional: true as const, nullable: true as const,
-			ref: 'Note'
+			ref: 'Note' as const,
 		},
 		viaMobile: {
 			type: 'boolean' as const,
@@ -423,7 +423,7 @@ export const packedNoteSchema = {
 			items: {
 				type: 'object' as const,
 				optional: false as const, nullable: false as const,
-				ref: 'DriveFile'
+				ref: 'DriveFile' as const,
 			}
 		},
 		tags: {
@@ -447,7 +447,7 @@ export const packedNoteSchema = {
 		channel: {
 			type: 'object' as const,
 			optional: true as const, nullable: true as const,
-			ref: 'Channel'
+			ref: 'Channel' as const,
 		},
 		localOnly: {
 			type: 'boolean' as const,
diff --git a/src/models/repositories/notification.ts b/src/models/repositories/notification.ts
index 983fdaf6e8..b7f9e3643c 100644
--- a/src/models/repositories/notification.ts
+++ b/src/models/repositories/notification.ts
@@ -136,7 +136,7 @@ export const packedNotificationSchema = {
 		},
 		user: {
 			type: 'object' as const,
-			ref: 'User',
+			ref: 'User' as const,
 			optional: true as const, nullable: true as const,
 		},
 		userId: {
@@ -159,7 +159,6 @@ export const packedNotificationSchema = {
 		},
 		invitation: {
 			type: 'object' as const,
-			ref: 'Note',
 			optional: true as const, nullable: true as const,
 		},
 		body: {
diff --git a/src/models/repositories/page.ts b/src/models/repositories/page.ts
index 757aaa5a3f..1a61e2c99c 100644
--- a/src/models/repositories/page.ts
+++ b/src/models/repositories/page.ts
@@ -137,7 +137,7 @@ export const packedPageSchema = {
 		},
 		user: {
 			type: 'object' as const,
-			ref: 'User',
+			ref: 'User' as const,
 			optional: false as const, nullable: false as const,
 		},
 	}
diff --git a/src/models/repositories/user.ts b/src/models/repositories/user.ts
index d4bb995ce2..4a6534b557 100644
--- a/src/models/repositories/user.ts
+++ b/src/models/repositories/user.ts
@@ -520,7 +520,7 @@ export const packedUserSchema = {
 			items: {
 				type: 'object' as const,
 				nullable: false as const, optional: false as const,
-				ref: 'Note'
+				ref: 'Note' as const,
 			}
 		},
 		pinnedPageId: {
@@ -530,7 +530,7 @@ export const packedUserSchema = {
 		pinnedPage: {
 			type: 'object' as const,
 			nullable: true as const, optional: false as const,
-			ref: 'Page'
+			ref: 'Page' as const,
 		},
 		twoFactorEnabled: {
 			type: 'boolean' as const,
diff --git a/src/server/api/endpoints.ts b/src/server/api/endpoints.ts
index 640b14ed6a..6d9d2b0782 100644
--- a/src/server/api/endpoints.ts
+++ b/src/server/api/endpoints.ts
@@ -3,7 +3,7 @@ import { dirname } from 'path';
 import { Context } from 'cafy';
 import * as path from 'path';
 import * as glob from 'glob';
-import { Schema } from '@/misc/schema';
+import { SimpleSchema } from '@/misc/simple-schema';
 
 //const _filename = fileURLToPath(import.meta.url);
 const _filename = __filename;
@@ -34,7 +34,7 @@ export interface IEndpointMeta {
 		};
 	};
 
-	res?: Schema;
+	res?: SimpleSchema;
 
 	/**
 	 * このエンドポイントにリクエストするのにユーザー情報が必須か否か
diff --git a/src/server/api/openapi/schemas.ts b/src/server/api/openapi/schemas.ts
index 5402dc6f48..12fc207c47 100644
--- a/src/server/api/openapi/schemas.ts
+++ b/src/server/api/openapi/schemas.ts
@@ -1,26 +1,4 @@
-import { packedUserSchema } from '@/models/repositories/user';
-import { Schema } from '@/misc/schema';
-import { packedNoteSchema } from '@/models/repositories/note';
-import { packedUserListSchema } from '@/models/repositories/user-list';
-import { packedAppSchema } from '@/models/repositories/app';
-import { packedMessagingMessageSchema } from '@/models/repositories/messaging-message';
-import { packedNotificationSchema } from '@/models/repositories/notification';
-import { packedDriveFileSchema } from '@/models/repositories/drive-file';
-import { packedDriveFolderSchema } from '@/models/repositories/drive-folder';
-import { packedFollowingSchema } from '@/models/repositories/following';
-import { packedMutingSchema } from '@/models/repositories/muting';
-import { packedBlockingSchema } from '@/models/repositories/blocking';
-import { packedNoteReactionSchema } from '@/models/repositories/note-reaction';
-import { packedHashtagSchema } from '@/models/repositories/hashtag';
-import { packedPageSchema } from '@/models/repositories/page';
-import { packedUserGroupSchema } from '@/models/repositories/user-group';
-import { packedNoteFavoriteSchema } from '@/models/repositories/note-favorite';
-import { packedChannelSchema } from '@/models/repositories/channel';
-import { packedAntennaSchema } from '@/models/repositories/antenna';
-import { packedClipSchema } from '@/models/repositories/clip';
-import { packedFederationInstanceSchema } from '@/models/repositories/federation-instance';
-import { packedQueueCountSchema } from '@/models/repositories/queue';
-import { packedGalleryPostSchema } from '@/models/repositories/gallery-post';
+import { refs, Schema } from '@/misc/schema';
 
 export function convertSchemaToOpenApiSchema(schema: Schema) {
 	const res: any = schema;
@@ -72,26 +50,7 @@ export const schemas = {
 		required: ['error']
 	},
 
-	User: convertSchemaToOpenApiSchema(packedUserSchema),
-	UserList: convertSchemaToOpenApiSchema(packedUserListSchema),
-	UserGroup: convertSchemaToOpenApiSchema(packedUserGroupSchema),
-	App: convertSchemaToOpenApiSchema(packedAppSchema),
-	MessagingMessage: convertSchemaToOpenApiSchema(packedMessagingMessageSchema),
-	Note: convertSchemaToOpenApiSchema(packedNoteSchema),
-	NoteReaction: convertSchemaToOpenApiSchema(packedNoteReactionSchema),
-	NoteFavorite: convertSchemaToOpenApiSchema(packedNoteFavoriteSchema),
-	Notification: convertSchemaToOpenApiSchema(packedNotificationSchema),
-	DriveFile: convertSchemaToOpenApiSchema(packedDriveFileSchema),
-	DriveFolder: convertSchemaToOpenApiSchema(packedDriveFolderSchema),
-	Following: convertSchemaToOpenApiSchema(packedFollowingSchema),
-	Muting: convertSchemaToOpenApiSchema(packedMutingSchema),
-	Blocking: convertSchemaToOpenApiSchema(packedBlockingSchema),
-	Hashtag: convertSchemaToOpenApiSchema(packedHashtagSchema),
-	Page: convertSchemaToOpenApiSchema(packedPageSchema),
-	Channel: convertSchemaToOpenApiSchema(packedChannelSchema),
-	QueueCount: convertSchemaToOpenApiSchema(packedQueueCountSchema),
-	Antenna: convertSchemaToOpenApiSchema(packedAntennaSchema),
-	Clip: convertSchemaToOpenApiSchema(packedClipSchema),
-	FederationInstance: convertSchemaToOpenApiSchema(packedFederationInstanceSchema),
-	GalleryPost: convertSchemaToOpenApiSchema(packedGalleryPostSchema),
+	...Object.fromEntries(
+		Object.entries(refs).map(([key, schema]) => [key, convertSchemaToOpenApiSchema(schema)])
+	),
 };
diff --git a/src/server/api/stream/channels/global-timeline.ts b/src/server/api/stream/channels/global-timeline.ts
index 2cb138966f..384ed61409 100644
--- a/src/server/api/stream/channels/global-timeline.ts
+++ b/src/server/api/stream/channels/global-timeline.ts
@@ -43,7 +43,7 @@ export default class extends Channel {
 
 		// 関係ない返信は除外
 		if (note.reply) {
-			const reply = note.reply as PackedNote;
+			const reply = note.reply;
 			// 「チャンネル接続主への返信」でもなければ、「チャンネル接続主が行った返信」でもなければ、「投稿者の投稿者自身への返信」でもない場合
 			if (reply.userId !== this.user!.id && note.userId !== this.user!.id && reply.userId !== note.userId) return;
 		}
diff --git a/src/server/api/stream/channels/home-timeline.ts b/src/server/api/stream/channels/home-timeline.ts
index c7a9728741..0e21ab552e 100644
--- a/src/server/api/stream/channels/home-timeline.ts
+++ b/src/server/api/stream/channels/home-timeline.ts
@@ -51,7 +51,7 @@ export default class extends Channel {
 
 		// 関係ない返信は除外
 		if (note.reply) {
-			const reply = note.reply as PackedNote;
+			const reply = note.reply;
 			// 「チャンネル接続主への返信」でもなければ、「チャンネル接続主が行った返信」でもなければ、「投稿者の投稿者自身への返信」でもない場合
 			if (reply.userId !== this.user!.id && note.userId !== this.user!.id && reply.userId !== note.userId) return;
 		}
diff --git a/src/server/api/stream/channels/hybrid-timeline.ts b/src/server/api/stream/channels/hybrid-timeline.ts
index 5c454764ec..0b28ff616b 100644
--- a/src/server/api/stream/channels/hybrid-timeline.ts
+++ b/src/server/api/stream/channels/hybrid-timeline.ts
@@ -4,7 +4,6 @@ import Channel from '../channel';
 import { fetchMeta } from '@/misc/fetch-meta';
 import { Notes } from '@/models/index';
 import { PackedNote } from '@/models/repositories/note';
-import { PackedUser } from '@/models/repositories/user';
 import { checkWordMute } from '@/misc/check-word-mute';
 import { isBlockerUserRelated } from '@/misc/is-blocker-user-related';
 
@@ -31,7 +30,7 @@ export default class extends Channel {
 		if (!(
 			(note.channelId == null && this.user!.id === note.userId) ||
 			(note.channelId == null && this.following.has(note.userId)) ||
-			(note.channelId == null && ((note.user as PackedUser).host == null && note.visibility === 'public')) ||
+			(note.channelId == null && (note.user.host == null && note.visibility === 'public')) ||
 			(note.channelId != null && this.followingChannels.has(note.channelId))
 		)) return;
 
@@ -60,7 +59,7 @@ export default class extends Channel {
 
 		// 関係ない返信は除外
 		if (note.reply) {
-			const reply = note.reply as PackedNote;
+			const reply = note.reply;
 			// 「チャンネル接続主への返信」でもなければ、「チャンネル接続主が行った返信」でもなければ、「投稿者の投稿者自身への返信」でもない場合
 			if (reply.userId !== this.user!.id && note.userId !== this.user!.id && reply.userId !== note.userId) return;
 		}
diff --git a/src/server/api/stream/channels/local-timeline.ts b/src/server/api/stream/channels/local-timeline.ts
index 4bf0d02ed3..20061410c4 100644
--- a/src/server/api/stream/channels/local-timeline.ts
+++ b/src/server/api/stream/channels/local-timeline.ts
@@ -4,7 +4,6 @@ import Channel from '../channel';
 import { fetchMeta } from '@/misc/fetch-meta';
 import { Notes } from '@/models/index';
 import { PackedNote } from '@/models/repositories/note';
-import { PackedUser } from '@/models/repositories/user';
 import { checkWordMute } from '@/misc/check-word-mute';
 import { isBlockerUserRelated } from '@/misc/is-blocker-user-related';
 
@@ -26,7 +25,7 @@ export default class extends Channel {
 
 	@autobind
 	private async onNote(note: PackedNote) {
-		if ((note.user as PackedUser).host !== null) return;
+		if (note.user.host !== null) return;
 		if (note.visibility !== 'public') return;
 		if (note.channelId != null && !this.followingChannels.has(note.channelId)) return;
 
@@ -45,7 +44,7 @@ export default class extends Channel {
 
 		// 関係ない返信は除外
 		if (note.reply) {
-			const reply = note.reply as PackedNote;
+			const reply = note.reply;
 			// 「チャンネル接続主への返信」でもなければ、「チャンネル接続主が行った返信」でもなければ、「投稿者の投稿者自身への返信」でもない場合
 			if (reply.userId !== this.user!.id && note.userId !== this.user!.id && reply.userId !== note.userId) return;
 		}
diff --git a/src/server/api/stream/index.ts b/src/server/api/stream/index.ts
index 5bd021c814..0101e6e079 100644
--- a/src/server/api/stream/index.ts
+++ b/src/server/api/stream/index.ts
@@ -166,8 +166,8 @@ export default class Connection {
 		};
 
 		add(note);
-		if (note.reply) add(note.reply as PackedNote);
-		if (note.renote) add(note.renote as PackedNote);
+		if (note.reply) add(note.reply);
+		if (note.renote) add(note.renote);
 	}
 
 	@autobind
diff --git a/src/services/chart/core.ts b/src/services/chart/core.ts
index eee7d20efb..c0d3280c2b 100644
--- a/src/services/chart/core.ts
+++ b/src/services/chart/core.ts
@@ -7,7 +7,7 @@
 import * as nestedProperty from 'nested-property';
 import autobind from 'autobind-decorator';
 import Logger from '../logger';
-import { Schema } from '@/misc/schema';
+import { SimpleSchema } from '@/misc/simple-schema';
 import { EntitySchema, getRepository, Repository, LessThan, Between } from 'typeorm';
 import { dateUTC, isTimeSame, isTimeBefore, subtractTime, addTime } from '@/prelude/time';
 import { getChartInsertLock } from '@/misc/app-lock';
@@ -56,7 +56,7 @@ export default abstract class Chart<T extends Record<string, any>> {
 		diff: DeepPartial<T>;
 		group: string | null;
 	}[] = [];
-	public schema: Schema;
+	public schema: SimpleSchema;
 	protected repository: Repository<Log>;
 
 	protected abstract genNewLog(latest: T): DeepPartial<T>;
@@ -69,7 +69,7 @@ export default abstract class Chart<T extends Record<string, any>> {
 	protected abstract fetchActual(group: string | null): Promise<DeepPartial<T>>;
 
 	@autobind
-	private static convertSchemaToFlatColumnDefinitions(schema: Schema) {
+	private static convertSchemaToFlatColumnDefinitions(schema: SimpleSchema) {
 		const columns = {} as any;
 		const flatColumns = (x: Obj, path?: string) => {
 			for (const [k, v] of Object.entries(x)) {
@@ -181,7 +181,7 @@ export default abstract class Chart<T extends Record<string, any>> {
 	}
 
 	@autobind
-	public static schemaToEntity(name: string, schema: Schema): EntitySchema {
+	public static schemaToEntity(name: string, schema: SimpleSchema): EntitySchema {
 		return new EntitySchema({
 			name: `__chart__${camelToSnake(name)}`,
 			columns: {
@@ -211,7 +211,7 @@ export default abstract class Chart<T extends Record<string, any>> {
 		});
 	}
 
-	constructor(name: string, schema: Schema, grouped = false) {
+	constructor(name: string, schema: SimpleSchema, grouped = false) {
 		this.name = name;
 		this.schema = schema;
 		const entity = Chart.schemaToEntity(name, schema);
@@ -546,8 +546,8 @@ export default abstract class Chart<T extends Record<string, any>> {
 	}
 }
 
-export function convertLog(logSchema: Schema): Schema {
-	const v: Schema = JSON.parse(JSON.stringify(logSchema)); // copy
+export function convertLog(logSchema: SimpleSchema): SimpleSchema {
+	const v: SimpleSchema = JSON.parse(JSON.stringify(logSchema)); // copy
 	if (v.type === 'number') {
 		v.type = 'array';
 		v.items = {
diff --git a/test/utils.ts b/test/utils.ts
index 1a0c54463d..253c410bf0 100644
--- a/test/utils.ts
+++ b/test/utils.ts
@@ -158,7 +158,7 @@ export async function initTestDb(justBorrow = false, initEntities?: any[]) {
 		await conn.close();
 	} catch (e) {}
 
-	return await createConnection({
+	return createConnection({
 		type: 'postgres',
 		host: config.db.host,
 		port: config.db.port,