diff --git a/packages/backend/migration/1697420555911-deleteCreatedAt.js b/packages/backend/migration/1697420555911-deleteCreatedAt.js
new file mode 100644
index 0000000000..958d61a348
--- /dev/null
+++ b/packages/backend/migration/1697420555911-deleteCreatedAt.js
@@ -0,0 +1,144 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and other misskey contributors
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+export class DeleteCreatedAt1697420555911 {
+    name = 'DeleteCreatedAt1697420555911'
+
+    async up(queryRunner) {
+        await queryRunner.query(`DROP INDEX "public"."IDX_02878d441ceae15ce060b73daf"`);
+        await queryRunner.query(`DROP INDEX "public"."IDX_c8dfad3b72196dd1d6b5db168a"`);
+        await queryRunner.query(`DROP INDEX "public"."IDX_e11e649824a45d8ed01d597fd9"`);
+        await queryRunner.query(`DROP INDEX "public"."IDX_db2098070b2b5a523c58181f74"`);
+        await queryRunner.query(`DROP INDEX "public"."IDX_048a757923ed8b157e9895da53"`);
+        await queryRunner.query(`DROP INDEX "public"."IDX_1129c2ef687fc272df040bafaa"`);
+        await queryRunner.query(`DROP INDEX "public"."IDX_118ec703e596086fc4515acb39"`);
+        await queryRunner.query(`DROP INDEX "public"."IDX_b9a354f7941c1e779f3b33aea6"`);
+        await queryRunner.query(`DROP INDEX "public"."IDX_71cb7b435b7c0d4843317e7e16"`);
+        await queryRunner.query(`DROP INDEX "public"."IDX_11e71f2511589dcc8a4d3214f9"`);
+        await queryRunner.query(`DROP INDEX "public"."IDX_735a5544f9249d412255f47f95"`);
+        await queryRunner.query(`DROP INDEX "public"."IDX_582f8fab771a9040a12961f3e7"`);
+        await queryRunner.query(`DROP INDEX "public"."IDX_8f1a239bd077c8864a20c62c2c"`);
+        await queryRunner.query(`DROP INDEX "public"."IDX_f86d57fbca33c7a4e6897490cc"`);
+        await queryRunner.query(`DROP INDEX "public"."IDX_d1259a2c2b7bb413ff449e8711"`);
+        await queryRunner.query(`DROP INDEX "public"."IDX_fbb4297c927a9b85e9cefa2eb1"`);
+        await queryRunner.query(`DROP INDEX "public"."IDX_0fb627e1c2f753262a74f0562d"`);
+        await queryRunner.query(`DROP INDEX "public"."IDX_149d2e44785707548c82999b01"`);
+        await queryRunner.query(`ALTER TABLE "drive_folder" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "drive_file" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "user" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "abuse_user_report" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "app" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "access_token" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "ad" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "announcement" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "announcement_read" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "user_list" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "antenna" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "auth_session" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "blocking" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "channel" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "channel_following" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "channel_favorite" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "clip" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "note" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "clip_favorite" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "following" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "follow_request" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "gallery_post" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "gallery_like" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "moderation_log" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "muting" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "renote_muting" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "note_favorite" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "note_reaction" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "note_thread_muting" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "page" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "page_like" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "password_reset_request" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "poll_vote" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "promo_read" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "registration_ticket" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "registry_item" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "signin" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "sw_subscription" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "user_list_favorite" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "user_list_membership" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "user_note_pining" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "user_pending" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "webhook" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "role" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "role_assignment" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "flash" DROP COLUMN "createdAt"`);
+        await queryRunner.query(`ALTER TABLE "flash_like" DROP COLUMN "createdAt"`);
+    }
+
+    async down(queryRunner) {
+        await queryRunner.query(`ALTER TABLE "flash_like" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "flash" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "role_assignment" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "role" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "webhook" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "user_pending" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "user_note_pining" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "user_list_membership" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "user_list_favorite" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "sw_subscription" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "signin" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "registry_item" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "registration_ticket" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "promo_read" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "poll_vote" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "password_reset_request" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "page_like" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "page" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "note_thread_muting" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "note_reaction" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "note_favorite" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "renote_muting" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "muting" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "moderation_log" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "gallery_like" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "gallery_post" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "follow_request" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "following" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "clip_favorite" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "note" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "clip" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "channel_favorite" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "channel_following" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "channel" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "blocking" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "auth_session" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "antenna" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "user_list" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "announcement_read" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "announcement" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "ad" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "access_token" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "app" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "abuse_user_report" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "user" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "drive_file" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`ALTER TABLE "drive_folder" ADD "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
+        await queryRunner.query(`CREATE INDEX "IDX_149d2e44785707548c82999b01" ON "flash" ("createdAt") `);
+        await queryRunner.query(`CREATE INDEX "IDX_0fb627e1c2f753262a74f0562d" ON "poll_vote" ("createdAt") `);
+        await queryRunner.query(`CREATE INDEX "IDX_fbb4297c927a9b85e9cefa2eb1" ON "page" ("createdAt") `);
+        await queryRunner.query(`CREATE INDEX "IDX_d1259a2c2b7bb413ff449e8711" ON "renote_muting" ("createdAt") `);
+        await queryRunner.query(`CREATE INDEX "IDX_f86d57fbca33c7a4e6897490cc" ON "muting" ("createdAt") `);
+        await queryRunner.query(`CREATE INDEX "IDX_8f1a239bd077c8864a20c62c2c" ON "gallery_post" ("createdAt") `);
+        await queryRunner.query(`CREATE INDEX "IDX_582f8fab771a9040a12961f3e7" ON "following" ("createdAt") `);
+        await queryRunner.query(`CREATE INDEX "IDX_735a5544f9249d412255f47f95" ON "channel_favorite" ("createdAt") `);
+        await queryRunner.query(`CREATE INDEX "IDX_11e71f2511589dcc8a4d3214f9" ON "channel_following" ("createdAt") `);
+        await queryRunner.query(`CREATE INDEX "IDX_71cb7b435b7c0d4843317e7e16" ON "channel" ("createdAt") `);
+        await queryRunner.query(`CREATE INDEX "IDX_b9a354f7941c1e779f3b33aea6" ON "blocking" ("createdAt") `);
+        await queryRunner.query(`CREATE INDEX "IDX_118ec703e596086fc4515acb39" ON "announcement" ("createdAt") `);
+        await queryRunner.query(`CREATE INDEX "IDX_1129c2ef687fc272df040bafaa" ON "ad" ("createdAt") `);
+        await queryRunner.query(`CREATE INDEX "IDX_048a757923ed8b157e9895da53" ON "app" ("createdAt") `);
+        await queryRunner.query(`CREATE INDEX "IDX_db2098070b2b5a523c58181f74" ON "abuse_user_report" ("createdAt") `);
+        await queryRunner.query(`CREATE INDEX "IDX_e11e649824a45d8ed01d597fd9" ON "user" ("createdAt") `);
+        await queryRunner.query(`CREATE INDEX "IDX_c8dfad3b72196dd1d6b5db168a" ON "drive_file" ("createdAt") `);
+        await queryRunner.query(`CREATE INDEX "IDX_02878d441ceae15ce060b73daf" ON "drive_folder" ("createdAt") `);
+    }
+}
diff --git a/packages/backend/src/core/AccountMoveService.ts b/packages/backend/src/core/AccountMoveService.ts
index db64f42754..ed2891113b 100644
--- a/packages/backend/src/core/AccountMoveService.ts
+++ b/packages/backend/src/core/AccountMoveService.ts
@@ -186,7 +186,7 @@ export class AccountMoveService {
 		const genId = (): string => {
 			let id: string;
 			do {
-				id = this.idService.genId();
+				id = this.idService.gen();
 			} while (newMutings.has(id));
 			return id;
 		};
@@ -234,7 +234,7 @@ export class AccountMoveService {
 		const genId = (): string => {
 			let id: string;
 			do {
-				id = this.idService.genId();
+				id = this.idService.gen();
 			} while (newMemberships.has(id));
 			return id;
 		};
diff --git a/packages/backend/src/core/AnnouncementService.ts b/packages/backend/src/core/AnnouncementService.ts
index a5330db53f..ec1a082d78 100644
--- a/packages/backend/src/core/AnnouncementService.ts
+++ b/packages/backend/src/core/AnnouncementService.ts
@@ -53,7 +53,7 @@ export class AnnouncementService {
 			}))
 			.andWhere(new Brackets(qb => {
 				qb.orWhere('announcement.forExistingUsers = false');
-				qb.orWhere('announcement.createdAt > :createdAt', { createdAt: user.createdAt });
+				qb.orWhere('announcement.id > :userId', { userId: user.id });
 			}))
 			.andWhere(`announcement.id NOT IN (${ readsQuery.getQuery() })`);
 
@@ -65,8 +65,7 @@ export class AnnouncementService {
 	@bindThis
 	public async create(values: Partial<MiAnnouncement>, moderator?: MiUser): Promise<{ raw: MiAnnouncement; packed: Packed<'Announcement'> }> {
 		const announcement = await this.announcementsRepository.insert({
-			id: this.idService.genId(),
-			createdAt: new Date(),
+			id: this.idService.gen(),
 			updatedAt: null,
 			title: values.title,
 			text: values.text,
@@ -179,8 +178,7 @@ export class AnnouncementService {
 	public async read(user: MiUser, announcementId: MiAnnouncement['id']): Promise<void> {
 		try {
 			await this.announcementReadsRepository.insert({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				announcementId: announcementId,
 				userId: user.id,
 			});
@@ -204,7 +202,7 @@ export class AnnouncementService {
 		const reads = me ? (options?.reads ?? await this.getReads(me.id)) : [];
 		return announcements.map(announcement => ({
 			id: announcement.id,
-			createdAt: announcement.createdAt.toISOString(),
+			createdAt: this.idService.parse(announcement.id).date.toISOString(),
 			updatedAt: announcement.updatedAt?.toISOString() ?? null,
 			text: announcement.text,
 			title: announcement.title,
diff --git a/packages/backend/src/core/AntennaService.ts b/packages/backend/src/core/AntennaService.ts
index ca7624b1d4..60569c44fc 100644
--- a/packages/backend/src/core/AntennaService.ts
+++ b/packages/backend/src/core/AntennaService.ts
@@ -57,14 +57,12 @@ export class AntennaService implements OnApplicationShutdown {
 				case 'antennaCreated':
 					this.antennas.push({
 						...body,
-						createdAt: new Date(body.createdAt),
 						lastUsedAt: new Date(body.lastUsedAt),
 					});
 					break;
 				case 'antennaUpdated':
 					this.antennas[this.antennas.findIndex(a => a.id === body.id)] = {
 						...body,
-						createdAt: new Date(body.createdAt),
 						lastUsedAt: new Date(body.lastUsedAt),
 					};
 					break;
diff --git a/packages/backend/src/core/ClipService.ts b/packages/backend/src/core/ClipService.ts
index 3d9982e80f..e94f1eb531 100644
--- a/packages/backend/src/core/ClipService.ts
+++ b/packages/backend/src/core/ClipService.ts
@@ -46,8 +46,7 @@ export class ClipService {
 		}
 
 		const clip = await this.clipsRepository.insert({
-			id: this.idService.genId(),
-			createdAt: new Date(),
+			id: this.idService.gen(),
 			userId: me.id,
 			name: name,
 			isPublic: isPublic,
@@ -109,7 +108,7 @@ export class ClipService {
 
 		try {
 			await this.clipNotesRepository.insert({
-				id: this.idService.genId(),
+				id: this.idService.gen(),
 				noteId: noteId,
 				clipId: clip.id,
 			});
diff --git a/packages/backend/src/core/CreateSystemUserService.ts b/packages/backend/src/core/CreateSystemUserService.ts
index 3419d0b497..6b475316f0 100644
--- a/packages/backend/src/core/CreateSystemUserService.ts
+++ b/packages/backend/src/core/CreateSystemUserService.ts
@@ -52,8 +52,7 @@ export class CreateSystemUserService {
 			if (exist) throw new Error('the user is already exists');
 
 			account = await transactionalEntityManager.insert(MiUser, {
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				username: username,
 				usernameLower: username.toLowerCase(),
 				host: null,
diff --git a/packages/backend/src/core/CustomEmojiService.ts b/packages/backend/src/core/CustomEmojiService.ts
index 145c224f67..505c8e4269 100644
--- a/packages/backend/src/core/CustomEmojiService.ts
+++ b/packages/backend/src/core/CustomEmojiService.ts
@@ -69,7 +69,7 @@ export class CustomEmojiService implements OnApplicationShutdown {
 		roleIdsThatCanBeUsedThisEmojiAsReaction: MiRole['id'][];
 	}, moderator?: MiUser): Promise<MiEmoji> {
 		const emoji = await this.emojisRepository.insert({
-			id: this.idService.genId(),
+			id: this.idService.gen(),
 			updatedAt: new Date(),
 			name: data.name,
 			category: data.category,
diff --git a/packages/backend/src/core/DriveService.ts b/packages/backend/src/core/DriveService.ts
index cecbec9638..484f4fc52e 100644
--- a/packages/backend/src/core/DriveService.ts
+++ b/packages/backend/src/core/DriveService.ts
@@ -564,8 +564,7 @@ export class DriveService {
 		const folder = await fetchFolder();
 
 		let file = new MiDriveFile();
-		file.id = this.idService.genId();
-		file.createdAt = new Date();
+		file.id = this.idService.gen();
 		file.userId = user ? user.id : null;
 		file.userHost = user ? user.host : null;
 		file.folderId = folder !== null ? folder.id : null;
diff --git a/packages/backend/src/core/FederatedInstanceService.ts b/packages/backend/src/core/FederatedInstanceService.ts
index 61806583c6..e41f010e48 100644
--- a/packages/backend/src/core/FederatedInstanceService.ts
+++ b/packages/backend/src/core/FederatedInstanceService.ts
@@ -56,7 +56,7 @@ export class FederatedInstanceService implements OnApplicationShutdown {
 
 		if (index == null) {
 			const i = await this.instancesRepository.insert({
-				id: this.idService.genId(),
+				id: this.idService.gen(),
 				host,
 				firstRetrievedAt: new Date(),
 			}).then(x => this.instancesRepository.findOneByOrFail(x.identifiers[0]));
diff --git a/packages/backend/src/core/HashtagService.ts b/packages/backend/src/core/HashtagService.ts
index ddff28359a..1a2f37be39 100644
--- a/packages/backend/src/core/HashtagService.ts
+++ b/packages/backend/src/core/HashtagService.ts
@@ -120,7 +120,7 @@ export class HashtagService {
 		} else {
 			if (isUserAttached) {
 				this.hashtagsRepository.insert({
-					id: this.idService.genId(),
+					id: this.idService.gen(),
 					name: tag,
 					mentionedUserIds: [],
 					mentionedUsersCount: 0,
@@ -137,7 +137,7 @@ export class HashtagService {
 				} as MiHashtag);
 			} else {
 				this.hashtagsRepository.insert({
-					id: this.idService.genId(),
+					id: this.idService.gen(),
 					name: tag,
 					mentionedUserIds: [user.id],
 					mentionedUsersCount: 1,
diff --git a/packages/backend/src/core/IdService.ts b/packages/backend/src/core/IdService.ts
index 06c58ad8a1..c98b8ea6fc 100644
--- a/packages/backend/src/core/IdService.ts
+++ b/packages/backend/src/core/IdService.ts
@@ -26,17 +26,21 @@ export class IdService {
 		this.method = config.id.toLowerCase();
 	}
 
+	/**
+	 * 時間を元にIDを生成します(省略時は現在日時)
+	 * @param time 日時
+	 */
 	@bindThis
-	public genId(date?: Date): string {
-		if (!date || (date > new Date())) date = new Date();
+	public gen(time?: number): string {
+		const t = (!time || (time > Date.now())) ? Date.now() : time;
 
 		switch (this.method) {
-			case 'aid': return genAid(date);
-			case 'aidx': return genAidx(date);
-			case 'meid': return genMeid(date);
-			case 'meidg': return genMeidg(date);
-			case 'ulid': return ulid(date.getTime());
-			case 'objectid': return genObjectId(date);
+			case 'aid': return genAid(t);
+			case 'aidx': return genAidx(t);
+			case 'meid': return genMeid(t);
+			case 'meidg': return genMeidg(t);
+			case 'ulid': return ulid(t);
+			case 'objectid': return genObjectId(t);
 			default: throw new Error('unrecognized id generation method');
 		}
 	}
diff --git a/packages/backend/src/core/ModerationLogService.ts b/packages/backend/src/core/ModerationLogService.ts
index f7f9063d92..8b78d02047 100644
--- a/packages/backend/src/core/ModerationLogService.ts
+++ b/packages/backend/src/core/ModerationLogService.ts
@@ -24,8 +24,7 @@ export class ModerationLogService {
 	@bindThis
 	public async log<T extends typeof moderationLogTypes[number]>(moderator: { id: MiUser['id'] }, type: T, info?: ModerationLogPayloads[T]) {
 		await this.moderationLogsRepository.insert({
-			id: this.idService.genId(),
-			createdAt: new Date(),
+			id: this.idService.gen(),
 			userId: moderator.id,
 			type: type,
 			info: (info as any) ?? {},
diff --git a/packages/backend/src/core/NoteCreateService.ts b/packages/backend/src/core/NoteCreateService.ts
index e12945172f..400f1ec98c 100644
--- a/packages/backend/src/core/NoteCreateService.ts
+++ b/packages/backend/src/core/NoteCreateService.ts
@@ -222,7 +222,6 @@ export class NoteCreateService implements OnApplicationShutdown {
 		id: MiUser['id'];
 		username: MiUser['username'];
 		host: MiUser['host'];
-		createdAt: MiUser['createdAt'];
 		isBot: MiUser['isBot'];
 		isCat: MiUser['isCat'];
 	}, data: Option, silent = false): Promise<MiNote> {
@@ -383,8 +382,7 @@ export class NoteCreateService implements OnApplicationShutdown {
 	@bindThis
 	private async insertNote(user: { id: MiUser['id']; host: MiUser['host']; }, data: Option, tags: string[], emojis: string[], mentionedUsers: MinimumUser[]) {
 		const insert = new MiNote({
-			id: this.idService.genId(data.createdAt!),
-			createdAt: data.createdAt!,
+			id: this.idService.gen(data.createdAt?.getTime()),
 			fileIds: data.files ? data.files.map(file => file.id) : [],
 			replyId: data.reply ? data.reply.id : null,
 			renoteId: data.renote ? data.renote.id : null,
@@ -483,7 +481,6 @@ export class NoteCreateService implements OnApplicationShutdown {
 		id: MiUser['id'];
 		username: MiUser['username'];
 		host: MiUser['host'];
-		createdAt: MiUser['createdAt'];
 		isBot: MiUser['isBot'];
 	}, data: Option, silent: boolean, tags: string[], mentionedUsers: MinimumUser[]) {
 		const meta = await this.metaService.fetch();
diff --git a/packages/backend/src/core/NotePiningService.ts b/packages/backend/src/core/NotePiningService.ts
index 147554ee9a..52abb4c2a1 100644
--- a/packages/backend/src/core/NotePiningService.ts
+++ b/packages/backend/src/core/NotePiningService.ts
@@ -71,8 +71,7 @@ export class NotePiningService {
 		}
 
 		await this.userNotePiningsRepository.insert({
-			id: this.idService.genId(),
-			createdAt: new Date(),
+			id: this.idService.gen(),
 			userId: user.id,
 			noteId: note.id,
 		} as MiUserNotePining);
diff --git a/packages/backend/src/core/NoteReadService.ts b/packages/backend/src/core/NoteReadService.ts
index 422e0192cf..03c1735e04 100644
--- a/packages/backend/src/core/NoteReadService.ts
+++ b/packages/backend/src/core/NoteReadService.ts
@@ -57,7 +57,7 @@ export class NoteReadService implements OnApplicationShutdown {
 		if (isThreadMuted) return;
 
 		const unread = {
-			id: this.idService.genId(),
+			id: this.idService.gen(),
 			noteId: note.id,
 			userId: userId,
 			isSpecified: params.isSpecified,
diff --git a/packages/backend/src/core/NotificationService.ts b/packages/backend/src/core/NotificationService.ts
index 32d54d2576..c6d5023e65 100644
--- a/packages/backend/src/core/NotificationService.ts
+++ b/packages/backend/src/core/NotificationService.ts
@@ -125,7 +125,7 @@ export class NotificationService implements OnApplicationShutdown {
 		}
 
 		const notification = {
-			id: this.idService.genId(),
+			id: this.idService.gen(),
 			createdAt: new Date(),
 			type: type,
 			notifierId: notifierId,
diff --git a/packages/backend/src/core/PollService.ts b/packages/backend/src/core/PollService.ts
index 570f2350f1..9e1b5ca78a 100644
--- a/packages/backend/src/core/PollService.ts
+++ b/packages/backend/src/core/PollService.ts
@@ -72,10 +72,8 @@ export class PollService {
 			throw new Error('already voted');
 		}
 
-		// Create vote
 		await this.pollVotesRepository.insert({
-			id: this.idService.genId(),
-			createdAt: new Date(),
+			id: this.idService.gen(),
 			noteId: note.id,
 			userId: user.id,
 			choice: choice,
diff --git a/packages/backend/src/core/QueryService.ts b/packages/backend/src/core/QueryService.ts
index 50d1d2e65b..ae8f8a3f19 100644
--- a/packages/backend/src/core/QueryService.ts
+++ b/packages/backend/src/core/QueryService.ts
@@ -52,14 +52,14 @@ export class QueryService {
 			q.andWhere(`${q.alias}.id < :untilId`, { untilId: untilId });
 			q.orderBy(`${q.alias}.id`, 'DESC');
 		} else if (sinceDate && untilDate) {
-			q.andWhere(`${q.alias}.id > :sinceId`, { sinceId: this.idService.genId(new Date(sinceDate)) });
-			q.andWhere(`${q.alias}.id < :untilId`, { untilId: this.idService.genId(new Date(untilDate)) });
+			q.andWhere(`${q.alias}.id > :sinceId`, { sinceId: this.idService.gen(sinceDate) });
+			q.andWhere(`${q.alias}.id < :untilId`, { untilId: this.idService.gen(untilDate) });
 			q.orderBy(`${q.alias}.id`, 'DESC');
 		} else if (sinceDate) {
-			q.andWhere(`${q.alias}.id > :sinceId`, { sinceId: this.idService.genId(new Date(sinceDate)) });
+			q.andWhere(`${q.alias}.id > :sinceId`, { sinceId: this.idService.gen(sinceDate) });
 			q.orderBy(`${q.alias}.id`, 'ASC');
 		} else if (untilDate) {
-			q.andWhere(`${q.alias}.id < :untilId`, { untilId: this.idService.genId(new Date(untilDate)) });
+			q.andWhere(`${q.alias}.id < :untilId`, { untilId: this.idService.gen(untilDate) });
 			q.orderBy(`${q.alias}.id`, 'DESC');
 		} else {
 			q.orderBy(`${q.alias}.id`, 'DESC');
diff --git a/packages/backend/src/core/ReactionService.ts b/packages/backend/src/core/ReactionService.ts
index e7bbd44926..49b465a0f8 100644
--- a/packages/backend/src/core/ReactionService.ts
+++ b/packages/backend/src/core/ReactionService.ts
@@ -153,8 +153,7 @@ export class ReactionService {
 		}
 
 		const record: MiNoteReaction = {
-			id: this.idService.genId(),
-			createdAt: new Date(),
+			id: this.idService.gen(),
 			noteId: note.id,
 			userId: user.id,
 			reaction,
diff --git a/packages/backend/src/core/RelayService.ts b/packages/backend/src/core/RelayService.ts
index 7171bf84c5..d40cd080c7 100644
--- a/packages/backend/src/core/RelayService.ts
+++ b/packages/backend/src/core/RelayService.ts
@@ -54,7 +54,7 @@ export class RelayService {
 	@bindThis
 	public async addRelay(inbox: string): Promise<MiRelay> {
 		const relay = await this.relaysRepository.insert({
-			id: this.idService.genId(),
+			id: this.idService.gen(),
 			inbox,
 			status: 'requesting',
 		}).then(x => this.relaysRepository.findOneByOrFail(x.identifiers[0]));
diff --git a/packages/backend/src/core/RoleService.ts b/packages/backend/src/core/RoleService.ts
index 2c3547e4ac..d18fb240f7 100644
--- a/packages/backend/src/core/RoleService.ts
+++ b/packages/backend/src/core/RoleService.ts
@@ -125,7 +125,6 @@ export class RoleService implements OnApplicationShutdown {
 					if (cached) {
 						cached.push({
 							...body,
-							createdAt: new Date(body.createdAt),
 							updatedAt: new Date(body.updatedAt),
 							lastUsedAt: new Date(body.lastUsedAt),
 						});
@@ -139,7 +138,6 @@ export class RoleService implements OnApplicationShutdown {
 						if (i > -1) {
 							cached[i] = {
 								...body,
-								createdAt: new Date(body.createdAt),
 								updatedAt: new Date(body.updatedAt),
 								lastUsedAt: new Date(body.lastUsedAt),
 							};
@@ -159,7 +157,6 @@ export class RoleService implements OnApplicationShutdown {
 					if (cached) {
 						cached.push({
 							...body,
-							createdAt: new Date(body.createdAt),
 							expiresAt: body.expiresAt ? new Date(body.expiresAt) : null,
 						});
 					}
@@ -198,10 +195,10 @@ export class RoleService implements OnApplicationShutdown {
 					return this.userEntityService.isRemoteUser(user);
 				}
 				case 'createdLessThan': {
-					return user.createdAt.getTime() > (Date.now() - (value.sec * 1000));
+					return this.idService.parse(user.id).date.getTime() > (Date.now() - (value.sec * 1000));
 				}
 				case 'createdMoreThan': {
-					return user.createdAt.getTime() < (Date.now() - (value.sec * 1000));
+					return this.idService.parse(user.id).date.getTime() < (Date.now() - (value.sec * 1000));
 				}
 				case 'followersLessThanOrEq': {
 					return user.followersCount <= value.value;
@@ -382,7 +379,7 @@ export class RoleService implements OnApplicationShutdown {
 
 	@bindThis
 	public async assign(userId: MiUser['id'], roleId: MiRole['id'], expiresAt: Date | null = null, moderator?: MiUser): Promise<void> {
-		const now = new Date();
+		const now = Date.now();
 
 		const role = await this.rolesRepository.findOneByOrFail({ id: roleId });
 
@@ -392,7 +389,7 @@ export class RoleService implements OnApplicationShutdown {
 		});
 
 		if (existing) {
-			if (existing.expiresAt && (existing.expiresAt.getTime() < now.getTime())) {
+			if (existing.expiresAt && (existing.expiresAt.getTime() < now)) {
 				await this.roleAssignmentsRepository.delete({
 					roleId: roleId,
 					userId: userId,
@@ -403,8 +400,7 @@ export class RoleService implements OnApplicationShutdown {
 		}
 
 		const created = await this.roleAssignmentsRepository.insert({
-			id: this.idService.genId(),
-			createdAt: now,
+			id: this.idService.gen(now),
 			expiresAt: expiresAt,
 			roleId: roleId,
 			userId: userId,
@@ -485,8 +481,7 @@ export class RoleService implements OnApplicationShutdown {
 	public async create(values: Partial<MiRole>, moderator?: MiUser): Promise<MiRole> {
 		const date = new Date();
 		const created = await this.rolesRepository.insert({
-			id: this.idService.genId(),
-			createdAt: date,
+			id: this.idService.gen(date.getTime()),
 			updatedAt: date,
 			lastUsedAt: date,
 			name: values.name,
diff --git a/packages/backend/src/core/SearchService.ts b/packages/backend/src/core/SearchService.ts
index 3ef321dd32..b6d2bcabc8 100644
--- a/packages/backend/src/core/SearchService.ts
+++ b/packages/backend/src/core/SearchService.ts
@@ -131,7 +131,7 @@ export class SearchService {
 
 			await this.meilisearchNoteIndex?.addDocuments([{
 				id: note.id,
-				createdAt: note.createdAt.getTime(),
+				createdAt: this.idService.parse(note.id).date.getTime(),
 				userId: note.userId,
 				userHost: note.userHost,
 				channelId: note.channelId,
diff --git a/packages/backend/src/core/SignupService.ts b/packages/backend/src/core/SignupService.ts
index dfec0cfcfe..b9e3ded46f 100644
--- a/packages/backend/src/core/SignupService.ts
+++ b/packages/backend/src/core/SignupService.ts
@@ -120,8 +120,7 @@ export class SignupService {
 			if (exist) throw new Error(' the username is already used');
 
 			account = await transactionalEntityManager.save(new MiUser({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				username: username,
 				usernameLower: username.toLowerCase(),
 				host: this.utilityService.toPunyNullable(host),
diff --git a/packages/backend/src/core/UserBlockingService.ts b/packages/backend/src/core/UserBlockingService.ts
index 087dfd9214..39b19325c3 100644
--- a/packages/backend/src/core/UserBlockingService.ts
+++ b/packages/backend/src/core/UserBlockingService.ts
@@ -68,8 +68,7 @@ export class UserBlockingService implements OnModuleInit {
 		]);
 
 		const blocking = {
-			id: this.idService.genId(),
-			createdAt: new Date(),
+			id: this.idService.gen(),
 			blocker,
 			blockerId: blocker.id,
 			blockee,
diff --git a/packages/backend/src/core/UserFollowingService.ts b/packages/backend/src/core/UserFollowingService.ts
index beffcc2e9c..f6d0c3a6d5 100644
--- a/packages/backend/src/core/UserFollowingService.ts
+++ b/packages/backend/src/core/UserFollowingService.ts
@@ -196,8 +196,7 @@ export class UserFollowingService implements OnModuleInit {
 		let alreadyFollowed = false as boolean;
 
 		await this.followingsRepository.insert({
-			id: this.idService.genId(),
-			createdAt: new Date(),
+			id: this.idService.gen(),
 			followerId: follower.id,
 			followeeId: followee.id,
 
@@ -465,8 +464,7 @@ export class UserFollowingService implements OnModuleInit {
 		if (blocked) throw new Error('blocked');
 
 		const followRequest = await this.followRequestsRepository.insert({
-			id: this.idService.genId(),
-			createdAt: new Date(),
+			id: this.idService.gen(),
 			followerId: follower.id,
 			followeeId: followee.id,
 			requestId,
diff --git a/packages/backend/src/core/UserListService.ts b/packages/backend/src/core/UserListService.ts
index 5b4e7a711e..702c731fc3 100644
--- a/packages/backend/src/core/UserListService.ts
+++ b/packages/backend/src/core/UserListService.ts
@@ -93,8 +93,7 @@ export class UserListService implements OnApplicationShutdown {
 		}
 
 		await this.userListMembershipsRepository.insert({
-			id: this.idService.genId(),
-			createdAt: new Date(),
+			id: this.idService.gen(),
 			userId: target.id,
 			userListId: list.id,
 			userListUserId: list.userId,
diff --git a/packages/backend/src/core/UserMutingService.ts b/packages/backend/src/core/UserMutingService.ts
index 2387c9d648..397e6bdd5d 100644
--- a/packages/backend/src/core/UserMutingService.ts
+++ b/packages/backend/src/core/UserMutingService.ts
@@ -26,8 +26,7 @@ export class UserMutingService {
 	@bindThis
 	public async mute(user: MiUser, target: MiUser, expiresAt: Date | null = null): Promise<void> {
 		await this.mutingsRepository.insert({
-			id: this.idService.genId(),
-			createdAt: new Date(),
+			id: this.idService.gen(),
 			expiresAt: expiresAt ?? null,
 			muterId: user.id,
 			muteeId: target.id,
diff --git a/packages/backend/src/core/WebhookService.ts b/packages/backend/src/core/WebhookService.ts
index ff70f7bc0c..930e6ef64a 100644
--- a/packages/backend/src/core/WebhookService.ts
+++ b/packages/backend/src/core/WebhookService.ts
@@ -51,7 +51,6 @@ export class WebhookService implements OnApplicationShutdown {
 					if (body.active) {
 						this.webhooks.push({
 							...body,
-							createdAt: new Date(body.createdAt),
 							latestSentAt: body.latestSentAt ? new Date(body.latestSentAt) : null,
 						});
 					}
@@ -62,13 +61,11 @@ export class WebhookService implements OnApplicationShutdown {
 						if (i > -1) {
 							this.webhooks[i] = {
 								...body,
-								createdAt: new Date(body.createdAt),
 								latestSentAt: body.latestSentAt ? new Date(body.latestSentAt) : null,
 							};
 						} else {
 							this.webhooks.push({
 								...body,
-								createdAt: new Date(body.createdAt),
 								latestSentAt: body.latestSentAt ? new Date(body.latestSentAt) : null,
 							});
 						}
diff --git a/packages/backend/src/core/activitypub/ApInboxService.ts b/packages/backend/src/core/activitypub/ApInboxService.ts
index b921ee7454..8d5d34d40b 100644
--- a/packages/backend/src/core/activitypub/ApInboxService.ts
+++ b/packages/backend/src/core/activitypub/ApInboxService.ts
@@ -514,8 +514,7 @@ export class ApInboxService {
 		if (users.length < 1) return 'skip';
 
 		await this.abuseUserReportsRepository.insert({
-			id: this.idService.genId(),
-			createdAt: new Date(),
+			id: this.idService.gen(),
 			targetUserId: users[0].id,
 			targetUserHost: users[0].host,
 			reporterId: actor.id,
diff --git a/packages/backend/src/core/activitypub/ApRendererService.ts b/packages/backend/src/core/activitypub/ApRendererService.ts
index 7a9d2e21d8..e29bc1d096 100644
--- a/packages/backend/src/core/activitypub/ApRendererService.ts
+++ b/packages/backend/src/core/activitypub/ApRendererService.ts
@@ -27,6 +27,7 @@ import type { UsersRepository, UserProfilesRepository, NotesRepository, DriveFil
 import { bindThis } from '@/decorators.js';
 import { CustomEmojiService } from '@/core/CustomEmojiService.js';
 import { isNotNull } from '@/misc/is-not-null.js';
+import { IdService } from '@/core/IdService.js';
 import { LdSignatureService } from './LdSignatureService.js';
 import { ApMfmService } from './ApMfmService.js';
 import type { IAccept, IActivity, IAdd, IAnnounce, IApDocument, IApEmoji, IApHashtag, IApImage, IApMention, IBlock, ICreate, IDelete, IFlag, IFollow, IKey, ILike, IMove, IObject, IPost, IQuestion, IReject, IRemove, ITombstone, IUndo, IUpdate } from './type.js';
@@ -59,6 +60,7 @@ export class ApRendererService {
 		private userKeypairService: UserKeypairService,
 		private apMfmService: ApMfmService,
 		private mfmService: MfmService,
+		private idService: IdService,
 	) {
 	}
 
@@ -105,7 +107,7 @@ export class ApRendererService {
 			id: `${this.config.url}/notes/${note.id}/activity`,
 			actor: this.userEntityService.genLocalUserUri(note.userId),
 			type: 'Announce',
-			published: note.createdAt.toISOString(),
+			published: this.idService.parse(note.id).date.toISOString(),
 			to,
 			cc,
 			object,
@@ -137,7 +139,7 @@ export class ApRendererService {
 			id: `${this.config.url}/notes/${note.id}/activity`,
 			actor: this.userEntityService.genLocalUserUri(note.userId),
 			type: 'Create',
-			published: note.createdAt.toISOString(),
+			published: this.idService.parse(note.id).date.toISOString(),
 			object,
 		};
 
@@ -437,7 +439,7 @@ export class ApRendererService {
 			},
 			_misskey_quote: quote,
 			quoteUrl: quote,
-			published: note.createdAt.toISOString(),
+			published: this.idService.parse(note.id).date.toISOString(),
 			to,
 			cc,
 			inReplyTo,
diff --git a/packages/backend/src/core/activitypub/models/ApNoteService.ts b/packages/backend/src/core/activitypub/models/ApNoteService.ts
index 573dff5b91..1979cdda9c 100644
--- a/packages/backend/src/core/activitypub/models/ApNoteService.ts
+++ b/packages/backend/src/core/activitypub/models/ApNoteService.ts
@@ -386,7 +386,7 @@ export class ApNoteService {
 			this.logger.info(`register emoji host=${host}, name=${name}`);
 
 			return await this.emojisRepository.insert({
-				id: this.idService.genId(),
+				id: this.idService.gen(),
 				host,
 				name,
 				uri: tag.id,
diff --git a/packages/backend/src/core/activitypub/models/ApPersonService.ts b/packages/backend/src/core/activitypub/models/ApPersonService.ts
index ea64883395..47f8d7313e 100644
--- a/packages/backend/src/core/activitypub/models/ApPersonService.ts
+++ b/packages/backend/src/core/activitypub/models/ApPersonService.ts
@@ -295,10 +295,9 @@ export class ApPersonService implements OnModuleInit {
 			// Start transaction
 			await this.db.transaction(async transactionalEntityManager => {
 				user = await transactionalEntityManager.save(new MiUser({
-					id: this.idService.genId(),
+					id: this.idService.gen(),
 					avatarId: null,
 					bannerId: null,
-					createdAt: new Date(),
 					lastFetchedAt: new Date(),
 					name: truncate(person.name, nameLength),
 					isLocked: person.manuallyApprovesFollowers,
@@ -607,8 +606,7 @@ export class ApPersonService implements OnModuleInit {
 			for (const note of featuredNotes.filter((note): note is MiNote => note != null)) {
 				td -= 1000;
 				transactionalEntityManager.insert(MiUserNotePining, {
-					id: this.idService.genId(new Date(Date.now() + td)),
-					createdAt: new Date(),
+					id: this.idService.gen(Date.now() + td),
 					userId: user.id,
 					noteId: note.id,
 				});
diff --git a/packages/backend/src/core/chart/charts/active-users.ts b/packages/backend/src/core/chart/charts/active-users.ts
index 55da1469e5..f0918e059c 100644
--- a/packages/backend/src/core/chart/charts/active-users.ts
+++ b/packages/backend/src/core/chart/charts/active-users.ts
@@ -9,6 +9,7 @@ import { AppLockService } from '@/core/AppLockService.js';
 import type { MiUser } from '@/models/User.js';
 import { DI } from '@/di-symbols.js';
 import { bindThis } from '@/decorators.js';
+import { IdService } from '@/core/IdService.js';
 import Chart from '../core.js';
 import { ChartLoggerService } from '../ChartLoggerService.js';
 import { name, schema } from './entities/active-users.js';
@@ -29,6 +30,7 @@ export default class ActiveUsersChart extends Chart<typeof schema> { // eslint-d
 
 		private appLockService: AppLockService,
 		private chartLoggerService: ChartLoggerService,
+		private idService: IdService,
 	) {
 		super(db, (k) => appLockService.getChartInsertLock(k), chartLoggerService.logger, name, schema);
 	}
@@ -42,20 +44,21 @@ export default class ActiveUsersChart extends Chart<typeof schema> { // eslint-d
 	}
 
 	@bindThis
-	public async read(user: { id: MiUser['id'], host: null, createdAt: MiUser['createdAt'] }): Promise<void> {
+	public async read(user: { id: MiUser['id'], host: null }): Promise<void> {
+		const createdAt = this.idService.parse(user.id).date;
 		await this.commit({
 			'read': [user.id],
-			'registeredWithinWeek': (Date.now() - user.createdAt.getTime() < week) ? [user.id] : [],
-			'registeredWithinMonth': (Date.now() - user.createdAt.getTime() < month) ? [user.id] : [],
-			'registeredWithinYear': (Date.now() - user.createdAt.getTime() < year) ? [user.id] : [],
-			'registeredOutsideWeek': (Date.now() - user.createdAt.getTime() > week) ? [user.id] : [],
-			'registeredOutsideMonth': (Date.now() - user.createdAt.getTime() > month) ? [user.id] : [],
-			'registeredOutsideYear': (Date.now() - user.createdAt.getTime() > year) ? [user.id] : [],
+			'registeredWithinWeek': (Date.now() - createdAt.getTime() < week) ? [user.id] : [],
+			'registeredWithinMonth': (Date.now() - createdAt.getTime() < month) ? [user.id] : [],
+			'registeredWithinYear': (Date.now() - createdAt.getTime() < year) ? [user.id] : [],
+			'registeredOutsideWeek': (Date.now() - createdAt.getTime() > week) ? [user.id] : [],
+			'registeredOutsideMonth': (Date.now() - createdAt.getTime() > month) ? [user.id] : [],
+			'registeredOutsideYear': (Date.now() - createdAt.getTime() > year) ? [user.id] : [],
 		});
 	}
 
 	@bindThis
-	public async write(user: { id: MiUser['id'], host: null, createdAt: MiUser['createdAt'] }): Promise<void> {
+	public async write(user: { id: MiUser['id'], host: null }): Promise<void> {
 		await this.commit({
 			'write': [user.id],
 		});
diff --git a/packages/backend/src/core/entities/AbuseUserReportEntityService.ts b/packages/backend/src/core/entities/AbuseUserReportEntityService.ts
index 0e65a10d26..97de891ece 100644
--- a/packages/backend/src/core/entities/AbuseUserReportEntityService.ts
+++ b/packages/backend/src/core/entities/AbuseUserReportEntityService.ts
@@ -9,6 +9,7 @@ import type { AbuseUserReportsRepository } from '@/models/_.js';
 import { awaitAll } from '@/misc/prelude/await-all.js';
 import type { MiAbuseUserReport } from '@/models/AbuseUserReport.js';
 import { bindThis } from '@/decorators.js';
+import { IdService } from '@/core/IdService.js';
 import { UserEntityService } from './UserEntityService.js';
 
 @Injectable()
@@ -18,6 +19,7 @@ export class AbuseUserReportEntityService {
 		private abuseUserReportsRepository: AbuseUserReportsRepository,
 
 		private userEntityService: UserEntityService,
+		private idService: IdService,
 	) {
 	}
 
@@ -29,7 +31,7 @@ export class AbuseUserReportEntityService {
 
 		return await awaitAll({
 			id: report.id,
-			createdAt: report.createdAt.toISOString(),
+			createdAt: this.idService.parse(report.id).date.toISOString(),
 			comment: report.comment,
 			resolved: report.resolved,
 			reporterId: report.reporterId,
diff --git a/packages/backend/src/core/entities/AntennaEntityService.ts b/packages/backend/src/core/entities/AntennaEntityService.ts
index ed108f2ce5..a9e504d374 100644
--- a/packages/backend/src/core/entities/AntennaEntityService.ts
+++ b/packages/backend/src/core/entities/AntennaEntityService.ts
@@ -9,12 +9,15 @@ import type { AntennasRepository } from '@/models/_.js';
 import type { Packed } from '@/misc/json-schema.js';
 import type { MiAntenna } from '@/models/Antenna.js';
 import { bindThis } from '@/decorators.js';
+import { IdService } from '@/core/IdService.js';
 
 @Injectable()
 export class AntennaEntityService {
 	constructor(
 		@Inject(DI.antennasRepository)
 		private antennasRepository: AntennasRepository,
+
+		private idService: IdService,
 	) {
 	}
 
@@ -26,7 +29,7 @@ export class AntennaEntityService {
 
 		return {
 			id: antenna.id,
-			createdAt: antenna.createdAt.toISOString(),
+			createdAt: this.idService.parse(antenna.id).date.toISOString(),
 			name: antenna.name,
 			keywords: antenna.keywords,
 			excludeKeywords: antenna.excludeKeywords,
diff --git a/packages/backend/src/core/entities/BlockingEntityService.ts b/packages/backend/src/core/entities/BlockingEntityService.ts
index 44466e24e8..b4760346b7 100644
--- a/packages/backend/src/core/entities/BlockingEntityService.ts
+++ b/packages/backend/src/core/entities/BlockingEntityService.ts
@@ -11,6 +11,7 @@ import type { Packed } from '@/misc/json-schema.js';
 import type { MiBlocking } from '@/models/Blocking.js';
 import type { MiUser } from '@/models/User.js';
 import { bindThis } from '@/decorators.js';
+import { IdService } from '@/core/IdService.js';
 import { UserEntityService } from './UserEntityService.js';
 
 @Injectable()
@@ -20,6 +21,7 @@ export class BlockingEntityService {
 		private blockingsRepository: BlockingsRepository,
 
 		private userEntityService: UserEntityService,
+		private idService: IdService,
 	) {
 	}
 
@@ -32,7 +34,7 @@ export class BlockingEntityService {
 
 		return await awaitAll({
 			id: blocking.id,
-			createdAt: blocking.createdAt.toISOString(),
+			createdAt: this.idService.parse(blocking.id).date.toISOString(),
 			blockeeId: blocking.blockeeId,
 			blockee: this.userEntityService.pack(blocking.blockeeId, me, {
 				detail: true,
diff --git a/packages/backend/src/core/entities/ChannelEntityService.ts b/packages/backend/src/core/entities/ChannelEntityService.ts
index 094de4d2d5..dd72953c7d 100644
--- a/packages/backend/src/core/entities/ChannelEntityService.ts
+++ b/packages/backend/src/core/entities/ChannelEntityService.ts
@@ -11,6 +11,7 @@ import type { } from '@/models/Blocking.js';
 import type { MiUser } from '@/models/User.js';
 import type { MiChannel } from '@/models/Channel.js';
 import { bindThis } from '@/decorators.js';
+import { IdService } from '@/core/IdService.js';
 import { DriveFileEntityService } from './DriveFileEntityService.js';
 import { NoteEntityService } from './NoteEntityService.js';
 import { In } from 'typeorm';
@@ -38,6 +39,7 @@ export class ChannelEntityService {
 
 		private noteEntityService: NoteEntityService,
 		private driveFileEntityService: DriveFileEntityService,
+		private idService: IdService,
 	) {
 	}
 
@@ -81,7 +83,7 @@ export class ChannelEntityService {
 
 		return {
 			id: channel.id,
-			createdAt: channel.createdAt.toISOString(),
+			createdAt: this.idService.parse(channel.id).date.toISOString(),
 			lastNotedAt: channel.lastNotedAt ? channel.lastNotedAt.toISOString() : null,
 			name: channel.name,
 			description: channel.description,
diff --git a/packages/backend/src/core/entities/ClipEntityService.ts b/packages/backend/src/core/entities/ClipEntityService.ts
index e141db03f1..96422894fd 100644
--- a/packages/backend/src/core/entities/ClipEntityService.ts
+++ b/packages/backend/src/core/entities/ClipEntityService.ts
@@ -11,6 +11,7 @@ import type { Packed } from '@/misc/json-schema.js';
 import type { } from '@/models/Blocking.js';
 import type { MiClip } from '@/models/Clip.js';
 import { bindThis } from '@/decorators.js';
+import { IdService } from '@/core/IdService.js';
 import { UserEntityService } from './UserEntityService.js';
 
 @Injectable()
@@ -23,6 +24,7 @@ export class ClipEntityService {
 		private clipFavoritesRepository: ClipFavoritesRepository,
 
 		private userEntityService: UserEntityService,
+		private idService: IdService,
 	) {
 	}
 
@@ -36,7 +38,7 @@ export class ClipEntityService {
 
 		return await awaitAll({
 			id: clip.id,
-			createdAt: clip.createdAt.toISOString(),
+			createdAt: this.idService.parse(clip.id).date.toISOString(),
 			lastClippedAt: clip.lastClippedAt ? clip.lastClippedAt.toISOString() : null,
 			userId: clip.userId,
 			user: this.userEntityService.pack(clip.user ?? clip.userId),
diff --git a/packages/backend/src/core/entities/DriveFileEntityService.ts b/packages/backend/src/core/entities/DriveFileEntityService.ts
index 23273b0413..5148b2ca9e 100644
--- a/packages/backend/src/core/entities/DriveFileEntityService.ts
+++ b/packages/backend/src/core/entities/DriveFileEntityService.ts
@@ -17,6 +17,7 @@ import { deepClone } from '@/misc/clone.js';
 import { bindThis } from '@/decorators.js';
 import { isMimeImage } from '@/misc/is-mime-image.js';
 import { isNotNull } from '@/misc/is-not-null.js';
+import { IdService } from '@/core/IdService.js';
 import { UtilityService } from '../UtilityService.js';
 import { VideoProcessingService } from '../VideoProcessingService.js';
 import { UserEntityService } from './UserEntityService.js';
@@ -44,6 +45,7 @@ export class DriveFileEntityService {
 		private utilityService: UtilityService,
 		private driveFolderEntityService: DriveFolderEntityService,
 		private videoProcessingService: VideoProcessingService,
+		private idService: IdService,
 	) {
 	}
 
@@ -196,7 +198,7 @@ export class DriveFileEntityService {
 
 		return await awaitAll<Packed<'DriveFile'>>({
 			id: file.id,
-			createdAt: file.createdAt.toISOString(),
+			createdAt: this.idService.parse(file.id).date.toISOString(),
 			name: file.name,
 			type: file.type,
 			md5: file.md5,
@@ -231,7 +233,7 @@ export class DriveFileEntityService {
 
 		return await awaitAll<Packed<'DriveFile'>>({
 			id: file.id,
-			createdAt: file.createdAt.toISOString(),
+			createdAt: this.idService.parse(file.id).date.toISOString(),
 			name: file.name,
 			type: file.type,
 			md5: file.md5,
diff --git a/packages/backend/src/core/entities/DriveFolderEntityService.ts b/packages/backend/src/core/entities/DriveFolderEntityService.ts
index 55014284bd..8fa78154b9 100644
--- a/packages/backend/src/core/entities/DriveFolderEntityService.ts
+++ b/packages/backend/src/core/entities/DriveFolderEntityService.ts
@@ -11,6 +11,7 @@ import type { Packed } from '@/misc/json-schema.js';
 import type { } from '@/models/Blocking.js';
 import type { MiDriveFolder } from '@/models/DriveFolder.js';
 import { bindThis } from '@/decorators.js';
+import { IdService } from '@/core/IdService.js';
 
 @Injectable()
 export class DriveFolderEntityService {
@@ -20,6 +21,8 @@ export class DriveFolderEntityService {
 
 		@Inject(DI.driveFilesRepository)
 		private driveFilesRepository: DriveFilesRepository,
+
+		private idService: IdService,
 	) {
 	}
 
@@ -38,7 +41,7 @@ export class DriveFolderEntityService {
 
 		return await awaitAll({
 			id: folder.id,
-			createdAt: folder.createdAt.toISOString(),
+			createdAt: this.idService.parse(folder.id).date.toISOString(),
 			name: folder.name,
 			parentId: folder.parentId,
 
diff --git a/packages/backend/src/core/entities/FlashEntityService.ts b/packages/backend/src/core/entities/FlashEntityService.ts
index 4701cddcba..dc335d9975 100644
--- a/packages/backend/src/core/entities/FlashEntityService.ts
+++ b/packages/backend/src/core/entities/FlashEntityService.ts
@@ -12,6 +12,7 @@ import type { } from '@/models/Blocking.js';
 import type { MiUser } from '@/models/User.js';
 import type { MiFlash } from '@/models/Flash.js';
 import { bindThis } from '@/decorators.js';
+import { IdService } from '@/core/IdService.js';
 import { UserEntityService } from './UserEntityService.js';
 
 @Injectable()
@@ -24,6 +25,7 @@ export class FlashEntityService {
 		private flashLikesRepository: FlashLikesRepository,
 
 		private userEntityService: UserEntityService,
+		private idService: IdService,
 	) {
 	}
 
@@ -37,7 +39,7 @@ export class FlashEntityService {
 
 		return await awaitAll({
 			id: flash.id,
-			createdAt: flash.createdAt.toISOString(),
+			createdAt: this.idService.parse(flash.id).date.toISOString(),
 			updatedAt: flash.updatedAt.toISOString(),
 			userId: flash.userId,
 			user: this.userEntityService.pack(flash.user ?? flash.userId, me), // { detail: true } すると無限ループするので注意
diff --git a/packages/backend/src/core/entities/FollowingEntityService.ts b/packages/backend/src/core/entities/FollowingEntityService.ts
index 9f6eb51e8c..52aa979677 100644
--- a/packages/backend/src/core/entities/FollowingEntityService.ts
+++ b/packages/backend/src/core/entities/FollowingEntityService.ts
@@ -12,6 +12,7 @@ import type { } from '@/models/Blocking.js';
 import type { MiUser } from '@/models/User.js';
 import type { MiFollowing } from '@/models/Following.js';
 import { bindThis } from '@/decorators.js';
+import { IdService } from '@/core/IdService.js';
 import { UserEntityService } from './UserEntityService.js';
 
 type LocalFollowerFollowing = MiFollowing & {
@@ -45,6 +46,7 @@ export class FollowingEntityService {
 		private followingsRepository: FollowingsRepository,
 
 		private userEntityService: UserEntityService,
+		private idService: IdService,
 	) {
 	}
 
@@ -83,7 +85,7 @@ export class FollowingEntityService {
 
 		return await awaitAll({
 			id: following.id,
-			createdAt: following.createdAt.toISOString(),
+			createdAt: this.idService.parse(following.id).date.toISOString(),
 			followeeId: following.followeeId,
 			followerId: following.followerId,
 			followee: opts.populateFollowee ? this.userEntityService.pack(following.followee ?? following.followeeId, me, {
diff --git a/packages/backend/src/core/entities/GalleryPostEntityService.ts b/packages/backend/src/core/entities/GalleryPostEntityService.ts
index bbaf70f0fd..d7b960e0d9 100644
--- a/packages/backend/src/core/entities/GalleryPostEntityService.ts
+++ b/packages/backend/src/core/entities/GalleryPostEntityService.ts
@@ -12,6 +12,7 @@ import type { } from '@/models/Blocking.js';
 import type { MiUser } from '@/models/User.js';
 import type { MiGalleryPost } from '@/models/GalleryPost.js';
 import { bindThis } from '@/decorators.js';
+import { IdService } from '@/core/IdService.js';
 import { UserEntityService } from './UserEntityService.js';
 import { DriveFileEntityService } from './DriveFileEntityService.js';
 
@@ -26,6 +27,7 @@ export class GalleryPostEntityService {
 
 		private userEntityService: UserEntityService,
 		private driveFileEntityService: DriveFileEntityService,
+		private idService: IdService,
 	) {
 	}
 
@@ -39,7 +41,7 @@ export class GalleryPostEntityService {
 
 		return await awaitAll({
 			id: post.id,
-			createdAt: post.createdAt.toISOString(),
+			createdAt: this.idService.parse(post.id).date.toISOString(),
 			updatedAt: post.updatedAt.toISOString(),
 			userId: post.userId,
 			user: this.userEntityService.pack(post.user ?? post.userId, me),
diff --git a/packages/backend/src/core/entities/InviteCodeEntityService.ts b/packages/backend/src/core/entities/InviteCodeEntityService.ts
index 914eaafe68..0f15fb5ab2 100644
--- a/packages/backend/src/core/entities/InviteCodeEntityService.ts
+++ b/packages/backend/src/core/entities/InviteCodeEntityService.ts
@@ -11,6 +11,7 @@ import type { Packed } from '@/misc/json-schema.js';
 import type { MiUser } from '@/models/User.js';
 import type { MiRegistrationTicket } from '@/models/RegistrationTicket.js';
 import { bindThis } from '@/decorators.js';
+import { IdService } from '@/core/IdService.js';
 import { UserEntityService } from './UserEntityService.js';
 
 @Injectable()
@@ -20,6 +21,7 @@ export class InviteCodeEntityService {
 		private registrationTicketsRepository: RegistrationTicketsRepository,
 
 		private userEntityService: UserEntityService,
+		private idService: IdService,
 	) {
 	}
 
@@ -39,7 +41,7 @@ export class InviteCodeEntityService {
 			id: target.id,
 			code: target.code,
 			expiresAt: target.expiresAt ? target.expiresAt.toISOString() : null,
-			createdAt: target.createdAt.toISOString(),
+			createdAt: this.idService.parse(target.id).date.toISOString(),
 			createdBy: target.createdBy ? await this.userEntityService.pack(target.createdBy, me) : null,
 			usedBy: target.usedBy ? await this.userEntityService.pack(target.usedBy, me) : null,
 			usedAt: target.usedAt ? target.usedAt.toISOString() : null,
diff --git a/packages/backend/src/core/entities/ModerationLogEntityService.ts b/packages/backend/src/core/entities/ModerationLogEntityService.ts
index 83b024d83b..6729ca2671 100644
--- a/packages/backend/src/core/entities/ModerationLogEntityService.ts
+++ b/packages/backend/src/core/entities/ModerationLogEntityService.ts
@@ -10,6 +10,7 @@ import { awaitAll } from '@/misc/prelude/await-all.js';
 import type { } from '@/models/Blocking.js';
 import type { MiModerationLog } from '@/models/ModerationLog.js';
 import { bindThis } from '@/decorators.js';
+import { IdService } from '@/core/IdService.js';
 import { UserEntityService } from './UserEntityService.js';
 
 @Injectable()
@@ -19,6 +20,7 @@ export class ModerationLogEntityService {
 		private moderationLogsRepository: ModerationLogsRepository,
 
 		private userEntityService: UserEntityService,
+		private idService: IdService,
 	) {
 	}
 
@@ -30,7 +32,7 @@ export class ModerationLogEntityService {
 
 		return await awaitAll({
 			id: log.id,
-			createdAt: log.createdAt.toISOString(),
+			createdAt: this.idService.parse(log.id).date.toISOString(),
 			type: log.type,
 			info: log.info,
 			userId: log.userId,
diff --git a/packages/backend/src/core/entities/MutingEntityService.ts b/packages/backend/src/core/entities/MutingEntityService.ts
index e3d5d2e211..9d672169ba 100644
--- a/packages/backend/src/core/entities/MutingEntityService.ts
+++ b/packages/backend/src/core/entities/MutingEntityService.ts
@@ -12,6 +12,7 @@ import type { } from '@/models/Blocking.js';
 import type { MiUser } from '@/models/User.js';
 import type { MiMuting } from '@/models/Muting.js';
 import { bindThis } from '@/decorators.js';
+import { IdService } from '@/core/IdService.js';
 import { UserEntityService } from './UserEntityService.js';
 
 @Injectable()
@@ -21,6 +22,7 @@ export class MutingEntityService {
 		private mutingsRepository: MutingsRepository,
 
 		private userEntityService: UserEntityService,
+		private idService: IdService,
 	) {
 	}
 
@@ -33,7 +35,7 @@ export class MutingEntityService {
 
 		return await awaitAll({
 			id: muting.id,
-			createdAt: muting.createdAt.toISOString(),
+			createdAt: this.idService.parse(muting.id).date.toISOString(),
 			expiresAt: muting.expiresAt ? muting.expiresAt.toISOString() : null,
 			muteeId: muting.muteeId,
 			mutee: this.userEntityService.pack(muting.muteeId, me, {
diff --git a/packages/backend/src/core/entities/NoteEntityService.ts b/packages/backend/src/core/entities/NoteEntityService.ts
index f871ba50a8..674594296c 100644
--- a/packages/backend/src/core/entities/NoteEntityService.ts
+++ b/packages/backend/src/core/entities/NoteEntityService.ts
@@ -310,7 +310,7 @@ export class NoteEntityService implements OnModuleInit {
 
 		const packed: Packed<'Note'> = await awaitAll({
 			id: note.id,
-			createdAt: note.createdAt.toISOString(),
+			createdAt: this.idService.parse(note.id).date.toISOString(),
 			userId: note.userId,
 			user: this.userEntityService.pack(note.user ?? note.userId, me, {
 				detail: false,
@@ -386,7 +386,8 @@ export class NoteEntityService implements OnModuleInit {
 		if (meId) {
 			const renoteIds = notes.filter(n => n.renoteId != null).map(n => n.renoteId!);
 			// パフォーマンスのためノートが作成されてから2秒以上経っていない場合はリアクションを取得しない
-			const targets = [...notes.filter(n => n.createdAt.getTime() + 2000 < Date.now()).map(n => n.id), ...renoteIds];
+			const oldId = this.idService.gen(Date.now() - 2000);
+			const targets = [...notes.filter(n => n.id < oldId).map(n => n.id), ...renoteIds];
 			const myReactions = await this.noteReactionsRepository.findBy({
 				userId: meId,
 				noteId: In(targets),
diff --git a/packages/backend/src/core/entities/NoteFavoriteEntityService.ts b/packages/backend/src/core/entities/NoteFavoriteEntityService.ts
index 808c8c9f69..1c9aed413f 100644
--- a/packages/backend/src/core/entities/NoteFavoriteEntityService.ts
+++ b/packages/backend/src/core/entities/NoteFavoriteEntityService.ts
@@ -10,6 +10,7 @@ import type { } from '@/models/Blocking.js';
 import type { MiUser } from '@/models/User.js';
 import type { MiNoteFavorite } from '@/models/NoteFavorite.js';
 import { bindThis } from '@/decorators.js';
+import { IdService } from '@/core/IdService.js';
 import { NoteEntityService } from './NoteEntityService.js';
 
 @Injectable()
@@ -19,6 +20,7 @@ export class NoteFavoriteEntityService {
 		private noteFavoritesRepository: NoteFavoritesRepository,
 
 		private noteEntityService: NoteEntityService,
+		private idService: IdService,
 	) {
 	}
 
@@ -31,7 +33,7 @@ export class NoteFavoriteEntityService {
 
 		return {
 			id: favorite.id,
-			createdAt: favorite.createdAt.toISOString(),
+			createdAt: this.idService.parse(favorite.id).date.toISOString(),
 			noteId: favorite.noteId,
 			note: await this.noteEntityService.pack(favorite.note ?? favorite.noteId, me),
 		};
diff --git a/packages/backend/src/core/entities/NoteReactionEntityService.ts b/packages/backend/src/core/entities/NoteReactionEntityService.ts
index 9701f37fdb..f4aba3e543 100644
--- a/packages/backend/src/core/entities/NoteReactionEntityService.ts
+++ b/packages/backend/src/core/entities/NoteReactionEntityService.ts
@@ -8,6 +8,7 @@ import { DI } from '@/di-symbols.js';
 import type { NoteReactionsRepository } from '@/models/_.js';
 import type { Packed } from '@/misc/json-schema.js';
 import { bindThis } from '@/decorators.js';
+import { IdService } from '@/core/IdService.js';
 import type { OnModuleInit } from '@nestjs/common';
 import type { } from '@/models/Blocking.js';
 import type { MiUser } from '@/models/User.js';
@@ -22,6 +23,7 @@ export class NoteReactionEntityService implements OnModuleInit {
 	private userEntityService: UserEntityService;
 	private noteEntityService: NoteEntityService;
 	private reactionService: ReactionService;
+	private idService: IdService;
 
 	constructor(
 		private moduleRef: ModuleRef,
@@ -32,6 +34,7 @@ export class NoteReactionEntityService implements OnModuleInit {
 		//private userEntityService: UserEntityService,
 		//private noteEntityService: NoteEntityService,
 		//private reactionService: ReactionService,
+		//private idService: IdService,
 	) {
 	}
 
@@ -39,6 +42,7 @@ export class NoteReactionEntityService implements OnModuleInit {
 		this.userEntityService = this.moduleRef.get('UserEntityService');
 		this.noteEntityService = this.moduleRef.get('NoteEntityService');
 		this.reactionService = this.moduleRef.get('ReactionService');
+		this.idService = this.moduleRef.get('IdService');
 	}
 
 	@bindThis
@@ -57,7 +61,7 @@ export class NoteReactionEntityService implements OnModuleInit {
 
 		return {
 			id: reaction.id,
-			createdAt: reaction.createdAt.toISOString(),
+			createdAt: this.idService.parse(reaction.id).date.toISOString(),
 			user: await this.userEntityService.pack(reaction.user ?? reaction.userId, me),
 			type: this.reactionService.convertLegacyReaction(reaction.reaction),
 			...(opts.withNote ? {
diff --git a/packages/backend/src/core/entities/PageEntityService.ts b/packages/backend/src/core/entities/PageEntityService.ts
index e3a1e19ddd..f39ef949db 100644
--- a/packages/backend/src/core/entities/PageEntityService.ts
+++ b/packages/backend/src/core/entities/PageEntityService.ts
@@ -13,6 +13,7 @@ import type { MiUser } from '@/models/User.js';
 import type { MiPage } from '@/models/Page.js';
 import type { MiDriveFile } from '@/models/DriveFile.js';
 import { bindThis } from '@/decorators.js';
+import { IdService } from '@/core/IdService.js';
 import { UserEntityService } from './UserEntityService.js';
 import { DriveFileEntityService } from './DriveFileEntityService.js';
 
@@ -30,6 +31,7 @@ export class PageEntityService {
 
 		private userEntityService: UserEntityService,
 		private driveFileEntityService: DriveFileEntityService,
+		private idService: IdService,
 	) {
 	}
 
@@ -85,7 +87,7 @@ export class PageEntityService {
 
 		return await awaitAll({
 			id: page.id,
-			createdAt: page.createdAt.toISOString(),
+			createdAt: this.idService.parse(page.id).date.toISOString(),
 			updatedAt: page.updatedAt.toISOString(),
 			userId: page.userId,
 			user: this.userEntityService.pack(page.user ?? page.userId, me), // { detail: true } すると無限ループするので注意
diff --git a/packages/backend/src/core/entities/RenoteMutingEntityService.ts b/packages/backend/src/core/entities/RenoteMutingEntityService.ts
index 7111fab08a..3f9dc9180a 100644
--- a/packages/backend/src/core/entities/RenoteMutingEntityService.ts
+++ b/packages/backend/src/core/entities/RenoteMutingEntityService.ts
@@ -12,6 +12,7 @@ import type { } from '@/models/Blocking.js';
 import type { MiUser } from '@/models/User.js';
 import type { MiRenoteMuting } from '@/models/RenoteMuting.js';
 import { bindThis } from '@/decorators.js';
+import { IdService } from '@/core/IdService.js';
 import { UserEntityService } from './UserEntityService.js';
 
 @Injectable()
@@ -21,6 +22,7 @@ export class RenoteMutingEntityService {
 		private renoteMutingsRepository: RenoteMutingsRepository,
 
 		private userEntityService: UserEntityService,
+		private idService: IdService,
 	) {
 	}
 
@@ -33,7 +35,7 @@ export class RenoteMutingEntityService {
 
 		return await awaitAll({
 			id: muting.id,
-			createdAt: muting.createdAt.toISOString(),
+			createdAt: this.idService.parse(muting.id).date.toISOString(),
 			muteeId: muting.muteeId,
 			mutee: this.userEntityService.pack(muting.muteeId, me, {
 				detail: true,
diff --git a/packages/backend/src/core/entities/RoleEntityService.ts b/packages/backend/src/core/entities/RoleEntityService.ts
index 79375a7008..5563f9a1ac 100644
--- a/packages/backend/src/core/entities/RoleEntityService.ts
+++ b/packages/backend/src/core/entities/RoleEntityService.ts
@@ -12,6 +12,7 @@ import type { MiUser } from '@/models/User.js';
 import type { MiRole } from '@/models/Role.js';
 import { bindThis } from '@/decorators.js';
 import { DEFAULT_POLICIES } from '@/core/RoleService.js';
+import { IdService } from '@/core/IdService.js';
 
 @Injectable()
 export class RoleEntityService {
@@ -21,6 +22,8 @@ export class RoleEntityService {
 
 		@Inject(DI.roleAssignmentsRepository)
 		private roleAssignmentsRepository: RoleAssignmentsRepository,
+
+		private idService: IdService,
 	) {
 	}
 
@@ -51,7 +54,7 @@ export class RoleEntityService {
 
 		return await awaitAll({
 			id: role.id,
-			createdAt: role.createdAt.toISOString(),
+			createdAt: this.idService.parse(role.id).date.toISOString(),
 			updatedAt: role.updatedAt.toISOString(),
 			name: role.name,
 			description: role.description,
diff --git a/packages/backend/src/core/entities/UserEntityService.ts b/packages/backend/src/core/entities/UserEntityService.ts
index ee67634da5..212994feef 100644
--- a/packages/backend/src/core/entities/UserEntityService.ts
+++ b/packages/backend/src/core/entities/UserEntityService.ts
@@ -20,6 +20,7 @@ import { bindThis } from '@/decorators.js';
 import { RoleService } from '@/core/RoleService.js';
 import { ApPersonService } from '@/core/activitypub/models/ApPersonService.js';
 import { FederatedInstanceService } from '@/core/FederatedInstanceService.js';
+import { IdService } from '@/core/IdService.js';
 import type { OnModuleInit } from '@nestjs/common';
 import type { AnnouncementService } from '../AnnouncementService.js';
 import type { CustomEmojiService } from '../CustomEmojiService.js';
@@ -60,6 +61,7 @@ export class UserEntityService implements OnModuleInit {
 	private announcementService: AnnouncementService;
 	private roleService: RoleService;
 	private federatedInstanceService: FederatedInstanceService;
+	private idService: IdService;
 
 	constructor(
 		private moduleRef: ModuleRef,
@@ -111,13 +113,6 @@ export class UserEntityService implements OnModuleInit {
 
 		@Inject(DI.userMemosRepository)
 		private userMemosRepository: UserMemoRepository,
-
-		//private noteEntityService: NoteEntityService,
-		//private driveFileEntityService: DriveFileEntityService,
-		//private pageEntityService: PageEntityService,
-		//private customEmojiService: CustomEmojiService,
-		//private antennaService: AntennaService,
-		//private roleService: RoleService,
 	) {
 	}
 
@@ -130,6 +125,7 @@ export class UserEntityService implements OnModuleInit {
 		this.announcementService = this.moduleRef.get('AnnouncementService');
 		this.roleService = this.moduleRef.get('RoleService');
 		this.federatedInstanceService = this.moduleRef.get('FederatedInstanceService');
+		this.idService = this.moduleRef.get('IdService');
 	}
 
 	//#region Validators
@@ -364,7 +360,7 @@ export class UserEntityService implements OnModuleInit {
 					? Promise.all(user.alsoKnownAs.map(uri => this.apPersonService.fetchPerson(uri).then(user => user?.id).catch(() => null)))
 						.then(xs => xs.length === 0 ? null : xs.filter(x => x != null) as string[])
 					: null,
-				createdAt: user.createdAt.toISOString(),
+				createdAt: this.idService.parse(user.id).date.toISOString(),
 				updatedAt: user.updatedAt ? user.updatedAt.toISOString() : null,
 				lastFetchedAt: user.lastFetchedAt ? user.lastFetchedAt.toISOString() : null,
 				bannerUrl: user.bannerUrl,
diff --git a/packages/backend/src/core/entities/UserListEntityService.ts b/packages/backend/src/core/entities/UserListEntityService.ts
index 06b6e852b1..31ab7293da 100644
--- a/packages/backend/src/core/entities/UserListEntityService.ts
+++ b/packages/backend/src/core/entities/UserListEntityService.ts
@@ -10,6 +10,7 @@ import type { Packed } from '@/misc/json-schema.js';
 import type { } from '@/models/Blocking.js';
 import type { MiUserList } from '@/models/UserList.js';
 import { bindThis } from '@/decorators.js';
+import { IdService } from '@/core/IdService.js';
 import { UserEntityService } from './UserEntityService.js';
 
 @Injectable()
@@ -22,6 +23,7 @@ export class UserListEntityService {
 		private userListMembershipsRepository: UserListMembershipsRepository,
 
 		private userEntityService: UserEntityService,
+		private idService: IdService,
 	) {
 	}
 
@@ -37,7 +39,7 @@ export class UserListEntityService {
 
 		return {
 			id: userList.id,
-			createdAt: userList.createdAt.toISOString(),
+			createdAt: this.idService.parse(userList.id).date.toISOString(),
 			name: userList.name,
 			userIds: users.map(x => x.userId),
 			isPublic: userList.isPublic,
@@ -50,7 +52,7 @@ export class UserListEntityService {
 	) {
 		return Promise.all(memberships.map(async x => ({
 			id: x.id,
-			createdAt: x.createdAt.toISOString(),
+			createdAt: this.idService.parse(x.id).date.toISOString(),
 			userId: x.userId,
 			user: await this.userEntityService.pack(x.userId),
 			withReplies: x.withReplies,
diff --git a/packages/backend/src/misc/id/aid.ts b/packages/backend/src/misc/id/aid.ts
index ec8aa849c9..e7b59f262b 100644
--- a/packages/backend/src/misc/id/aid.ts
+++ b/packages/backend/src/misc/id/aid.ts
@@ -24,8 +24,7 @@ function getNoise(): string {
 	return counter.toString(36).padStart(2, '0').slice(-2);
 }
 
-export function genAid(date: Date): string {
-	const t = date.getTime();
+export function genAid(t: number): string {
 	if (isNaN(t)) throw new Error('Failed to create AID: Invalid Date');
 	counter++;
 	return getTime(t) + getNoise();
diff --git a/packages/backend/src/misc/id/aidx.ts b/packages/backend/src/misc/id/aidx.ts
index 5b031ea4c0..bed223225a 100644
--- a/packages/backend/src/misc/id/aidx.ts
+++ b/packages/backend/src/misc/id/aidx.ts
@@ -31,8 +31,7 @@ function getNoise(): string {
 	return counter.toString(36).padStart(NOISE_LENGTH, '0').slice(-NOISE_LENGTH);
 }
 
-export function genAidx(date: Date): string {
-	const t = date.getTime();
+export function genAidx(t: number): string {
 	if (isNaN(t)) throw new Error('Failed to create AIDX: Invalid Date');
 	counter++;
 	return getTime(t) + nodeId + getNoise();
diff --git a/packages/backend/src/misc/id/meid.ts b/packages/backend/src/misc/id/meid.ts
index 82cda37237..366738de05 100644
--- a/packages/backend/src/misc/id/meid.ts
+++ b/packages/backend/src/misc/id/meid.ts
@@ -29,8 +29,8 @@ function getRandom() {
 	return str;
 }
 
-export function genMeid(date: Date): string {
-	return getTime(date.getTime()) + getRandom();
+export function genMeid(t: number): string {
+	return getTime(t) + getRandom();
 }
 
 export function parseMeid(id: string): { date: Date; } {
diff --git a/packages/backend/src/misc/id/meidg.ts b/packages/backend/src/misc/id/meidg.ts
index fba7156718..426a46970b 100644
--- a/packages/backend/src/misc/id/meidg.ts
+++ b/packages/backend/src/misc/id/meidg.ts
@@ -29,8 +29,8 @@ function getRandom() {
 	return str;
 }
 
-export function genMeidg(date: Date): string {
-	return 'g' + getTime(date.getTime()) + getRandom();
+export function genMeidg(t: number): string {
+	return 'g' + getTime(t) + getRandom();
 }
 
 export function parseMeidg(id: string): { date: Date; } {
diff --git a/packages/backend/src/misc/id/object-id.ts b/packages/backend/src/misc/id/object-id.ts
index e3b6e8e433..49bd9591c0 100644
--- a/packages/backend/src/misc/id/object-id.ts
+++ b/packages/backend/src/misc/id/object-id.ts
@@ -29,8 +29,8 @@ function getRandom() {
 	return str;
 }
 
-export function genObjectId(date: Date): string {
-	return getTime(date.getTime()) + getRandom();
+export function genObjectId(t: number): string {
+	return getTime(t) + getRandom();
 }
 
 export function parseObjectId(id: string): { date: Date; } {
diff --git a/packages/backend/src/models/AbuseUserReport.ts b/packages/backend/src/models/AbuseUserReport.ts
index 2551af7cb6..593c44f66b 100644
--- a/packages/backend/src/models/AbuseUserReport.ts
+++ b/packages/backend/src/models/AbuseUserReport.ts
@@ -12,12 +12,6 @@ export class MiAbuseUserReport {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Index()
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the AbuseUserReport.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column(id())
 	public targetUserId: MiUser['id'];
diff --git a/packages/backend/src/models/AccessToken.ts b/packages/backend/src/models/AccessToken.ts
index 5a6269a729..452711eb8c 100644
--- a/packages/backend/src/models/AccessToken.ts
+++ b/packages/backend/src/models/AccessToken.ts
@@ -13,11 +13,6 @@ export class MiAccessToken {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the AccessToken.',
-	})
-	public createdAt: Date;
-
 	@Column('timestamp with time zone', {
 		nullable: true,
 	})
diff --git a/packages/backend/src/models/Ad.ts b/packages/backend/src/models/Ad.ts
index 6dfc9cb30e..b1d7d7d79e 100644
--- a/packages/backend/src/models/Ad.ts
+++ b/packages/backend/src/models/Ad.ts
@@ -11,12 +11,6 @@ export class MiAd {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Index()
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the Ad.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column('timestamp with time zone', {
 		comment: 'The expired date of the Ad.',
diff --git a/packages/backend/src/models/Announcement.ts b/packages/backend/src/models/Announcement.ts
index 34b092a8d4..05d5a086f1 100644
--- a/packages/backend/src/models/Announcement.ts
+++ b/packages/backend/src/models/Announcement.ts
@@ -12,12 +12,6 @@ export class MiAnnouncement {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Index()
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the Announcement.',
-	})
-	public createdAt: Date;
-
 	@Column('timestamp with time zone', {
 		comment: 'The updated date of the Announcement.',
 		nullable: true,
diff --git a/packages/backend/src/models/AnnouncementRead.ts b/packages/backend/src/models/AnnouncementRead.ts
index 3d6ec5652c..db09e65f50 100644
--- a/packages/backend/src/models/AnnouncementRead.ts
+++ b/packages/backend/src/models/AnnouncementRead.ts
@@ -14,11 +14,6 @@ export class MiAnnouncementRead {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the AnnouncementRead.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column(id())
 	public userId: MiUser['id'];
diff --git a/packages/backend/src/models/Antenna.ts b/packages/backend/src/models/Antenna.ts
index dc398b6dd2..0bc0084fc5 100644
--- a/packages/backend/src/models/Antenna.ts
+++ b/packages/backend/src/models/Antenna.ts
@@ -13,11 +13,6 @@ export class MiAntenna {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the Antenna.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column('timestamp with time zone')
 	public lastUsedAt: Date;
diff --git a/packages/backend/src/models/App.ts b/packages/backend/src/models/App.ts
index c599ef8be0..5c56a224a2 100644
--- a/packages/backend/src/models/App.ts
+++ b/packages/backend/src/models/App.ts
@@ -12,12 +12,6 @@ export class MiApp {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Index()
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the App.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column({
 		...id(),
diff --git a/packages/backend/src/models/AuthSession.ts b/packages/backend/src/models/AuthSession.ts
index d9de6b6979..81bed21211 100644
--- a/packages/backend/src/models/AuthSession.ts
+++ b/packages/backend/src/models/AuthSession.ts
@@ -13,11 +13,6 @@ export class MiAuthSession {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the AuthSession.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column('varchar', {
 		length: 128,
diff --git a/packages/backend/src/models/Blocking.ts b/packages/backend/src/models/Blocking.ts
index 1e3dd3a644..9bf7a63b6e 100644
--- a/packages/backend/src/models/Blocking.ts
+++ b/packages/backend/src/models/Blocking.ts
@@ -13,12 +13,6 @@ export class MiBlocking {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Index()
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the Blocking.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column({
 		...id(),
diff --git a/packages/backend/src/models/Channel.ts b/packages/backend/src/models/Channel.ts
index ae3886a657..f90f8c03d8 100644
--- a/packages/backend/src/models/Channel.ts
+++ b/packages/backend/src/models/Channel.ts
@@ -13,12 +13,6 @@ export class MiChannel {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Index()
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the Channel.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column('timestamp with time zone', {
 		nullable: true,
diff --git a/packages/backend/src/models/ChannelFavorite.ts b/packages/backend/src/models/ChannelFavorite.ts
index ab74aa5530..fc25ffe260 100644
--- a/packages/backend/src/models/ChannelFavorite.ts
+++ b/packages/backend/src/models/ChannelFavorite.ts
@@ -14,12 +14,6 @@ export class MiChannelFavorite {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Index()
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the ChannelFavorite.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column({
 		...id(),
diff --git a/packages/backend/src/models/ChannelFollowing.ts b/packages/backend/src/models/ChannelFollowing.ts
index c62a95332a..4dd391a082 100644
--- a/packages/backend/src/models/ChannelFollowing.ts
+++ b/packages/backend/src/models/ChannelFollowing.ts
@@ -14,12 +14,6 @@ export class MiChannelFollowing {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Index()
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the ChannelFollowing.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column({
 		...id(),
diff --git a/packages/backend/src/models/Clip.ts b/packages/backend/src/models/Clip.ts
index c60b2964e0..2483b0925a 100644
--- a/packages/backend/src/models/Clip.ts
+++ b/packages/backend/src/models/Clip.ts
@@ -12,11 +12,6 @@ export class MiClip {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the Clip.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column('timestamp with time zone', {
 		nullable: true,
diff --git a/packages/backend/src/models/ClipFavorite.ts b/packages/backend/src/models/ClipFavorite.ts
index 054764389b..aa949b3ea8 100644
--- a/packages/backend/src/models/ClipFavorite.ts
+++ b/packages/backend/src/models/ClipFavorite.ts
@@ -14,9 +14,6 @@ export class MiClipFavorite {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Column('timestamp with time zone')
-	public createdAt: Date;
-
 	@Index()
 	@Column(id())
 	public userId: MiUser['id'];
diff --git a/packages/backend/src/models/DriveFile.ts b/packages/backend/src/models/DriveFile.ts
index c12f0e0f02..24e6be9c90 100644
--- a/packages/backend/src/models/DriveFile.ts
+++ b/packages/backend/src/models/DriveFile.ts
@@ -14,12 +14,6 @@ export class MiDriveFile {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Index()
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the DriveFile.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column({
 		...id(),
diff --git a/packages/backend/src/models/DriveFolder.ts b/packages/backend/src/models/DriveFolder.ts
index 3e049136bd..18f6d17709 100644
--- a/packages/backend/src/models/DriveFolder.ts
+++ b/packages/backend/src/models/DriveFolder.ts
@@ -12,12 +12,6 @@ export class MiDriveFolder {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Index()
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the DriveFolder.',
-	})
-	public createdAt: Date;
-
 	@Column('varchar', {
 		length: 128,
 		comment: 'The name of the DriveFolder.',
diff --git a/packages/backend/src/models/Flash.ts b/packages/backend/src/models/Flash.ts
index 185063029d..ac880843b0 100644
--- a/packages/backend/src/models/Flash.ts
+++ b/packages/backend/src/models/Flash.ts
@@ -12,12 +12,6 @@ export class MiFlash {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Index()
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the Flash.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column('timestamp with time zone', {
 		comment: 'The updated date of the Flash.',
diff --git a/packages/backend/src/models/FlashLike.ts b/packages/backend/src/models/FlashLike.ts
index 7c66010ae6..ad7f4966b4 100644
--- a/packages/backend/src/models/FlashLike.ts
+++ b/packages/backend/src/models/FlashLike.ts
@@ -14,9 +14,6 @@ export class MiFlashLike {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Column('timestamp with time zone')
-	public createdAt: Date;
-
 	@Index()
 	@Column(id())
 	public userId: MiUser['id'];
diff --git a/packages/backend/src/models/FollowRequest.ts b/packages/backend/src/models/FollowRequest.ts
index 769b9a6cb5..1e907f3d68 100644
--- a/packages/backend/src/models/FollowRequest.ts
+++ b/packages/backend/src/models/FollowRequest.ts
@@ -13,11 +13,6 @@ export class MiFollowRequest {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the FollowRequest.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column({
 		...id(),
diff --git a/packages/backend/src/models/Following.ts b/packages/backend/src/models/Following.ts
index 607538b1e7..e320911a1d 100644
--- a/packages/backend/src/models/Following.ts
+++ b/packages/backend/src/models/Following.ts
@@ -14,12 +14,6 @@ export class MiFollowing {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Index()
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the Following.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column({
 		...id(),
diff --git a/packages/backend/src/models/GalleryLike.ts b/packages/backend/src/models/GalleryLike.ts
index b5f71764aa..84d4ce9c3e 100644
--- a/packages/backend/src/models/GalleryLike.ts
+++ b/packages/backend/src/models/GalleryLike.ts
@@ -14,9 +14,6 @@ export class MiGalleryLike {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Column('timestamp with time zone')
-	public createdAt: Date;
-
 	@Index()
 	@Column(id())
 	public userId: MiUser['id'];
diff --git a/packages/backend/src/models/GalleryPost.ts b/packages/backend/src/models/GalleryPost.ts
index 4c6063f32b..b72220caf9 100644
--- a/packages/backend/src/models/GalleryPost.ts
+++ b/packages/backend/src/models/GalleryPost.ts
@@ -13,12 +13,6 @@ export class MiGalleryPost {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Index()
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the GalleryPost.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column('timestamp with time zone', {
 		comment: 'The updated date of the GalleryPost.',
diff --git a/packages/backend/src/models/ModerationLog.ts b/packages/backend/src/models/ModerationLog.ts
index a12b6ab614..71b33c3e47 100644
--- a/packages/backend/src/models/ModerationLog.ts
+++ b/packages/backend/src/models/ModerationLog.ts
@@ -12,11 +12,6 @@ export class MiModerationLog {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the ModerationLog.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column(id())
 	public userId: MiUser['id'];
diff --git a/packages/backend/src/models/Muting.ts b/packages/backend/src/models/Muting.ts
index 2f06ca8e5e..a528e1e7d7 100644
--- a/packages/backend/src/models/Muting.ts
+++ b/packages/backend/src/models/Muting.ts
@@ -13,12 +13,6 @@ export class MiMuting {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Index()
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the Muting.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column('timestamp with time zone', {
 		nullable: true,
diff --git a/packages/backend/src/models/Note.ts b/packages/backend/src/models/Note.ts
index 3e2adf4d82..ac7f57d5d6 100644
--- a/packages/backend/src/models/Note.ts
+++ b/packages/backend/src/models/Note.ts
@@ -18,11 +18,6 @@ export class MiNote {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the Note.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column({
 		...id(),
diff --git a/packages/backend/src/models/NoteFavorite.ts b/packages/backend/src/models/NoteFavorite.ts
index 1171684bcf..364eaabd98 100644
--- a/packages/backend/src/models/NoteFavorite.ts
+++ b/packages/backend/src/models/NoteFavorite.ts
@@ -14,11 +14,6 @@ export class MiNoteFavorite {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the NoteFavorite.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column(id())
 	public userId: MiUser['id'];
diff --git a/packages/backend/src/models/NoteReaction.ts b/packages/backend/src/models/NoteReaction.ts
index 43323f8a43..ee3a447464 100644
--- a/packages/backend/src/models/NoteReaction.ts
+++ b/packages/backend/src/models/NoteReaction.ts
@@ -14,11 +14,6 @@ export class MiNoteReaction {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the NoteReaction.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column(id())
 	public userId: MiUser['id'];
diff --git a/packages/backend/src/models/NoteThreadMuting.ts b/packages/backend/src/models/NoteThreadMuting.ts
index 2d120e4c25..00311aa570 100644
--- a/packages/backend/src/models/NoteThreadMuting.ts
+++ b/packages/backend/src/models/NoteThreadMuting.ts
@@ -13,10 +13,6 @@ export class MiNoteThreadMuting {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Column('timestamp with time zone', {
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column({
 		...id(),
diff --git a/packages/backend/src/models/Page.ts b/packages/backend/src/models/Page.ts
index 3cb986f4ee..9cab875499 100644
--- a/packages/backend/src/models/Page.ts
+++ b/packages/backend/src/models/Page.ts
@@ -14,12 +14,6 @@ export class MiPage {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Index()
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the Page.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column('timestamp with time zone', {
 		comment: 'The updated date of the Page.',
diff --git a/packages/backend/src/models/PageLike.ts b/packages/backend/src/models/PageLike.ts
index 92adf9bcc2..b845f58b7d 100644
--- a/packages/backend/src/models/PageLike.ts
+++ b/packages/backend/src/models/PageLike.ts
@@ -14,9 +14,6 @@ export class MiPageLike {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Column('timestamp with time zone')
-	public createdAt: Date;
-
 	@Index()
 	@Column(id())
 	public userId: MiUser['id'];
diff --git a/packages/backend/src/models/PasswordResetRequest.ts b/packages/backend/src/models/PasswordResetRequest.ts
index 79f2e984b8..5be439511f 100644
--- a/packages/backend/src/models/PasswordResetRequest.ts
+++ b/packages/backend/src/models/PasswordResetRequest.ts
@@ -12,9 +12,6 @@ export class MiPasswordResetRequest {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Column('timestamp with time zone')
-	public createdAt: Date;
-
 	@Index({ unique: true })
 	@Column('varchar', {
 		length: 256,
diff --git a/packages/backend/src/models/PollVote.ts b/packages/backend/src/models/PollVote.ts
index 37cd55fc18..751be8a32b 100644
--- a/packages/backend/src/models/PollVote.ts
+++ b/packages/backend/src/models/PollVote.ts
@@ -14,12 +14,6 @@ export class MiPollVote {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Index()
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the PollVote.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column(id())
 	public userId: MiUser['id'];
diff --git a/packages/backend/src/models/PromoRead.ts b/packages/backend/src/models/PromoRead.ts
index 09ebfc8346..d9f3075416 100644
--- a/packages/backend/src/models/PromoRead.ts
+++ b/packages/backend/src/models/PromoRead.ts
@@ -14,11 +14,6 @@ export class MiPromoRead {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the PromoRead.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column(id())
 	public userId: MiUser['id'];
diff --git a/packages/backend/src/models/RegistrationTicket.ts b/packages/backend/src/models/RegistrationTicket.ts
index d94f465916..730cedffba 100644
--- a/packages/backend/src/models/RegistrationTicket.ts
+++ b/packages/backend/src/models/RegistrationTicket.ts
@@ -23,9 +23,6 @@ export class MiRegistrationTicket {
 	})
 	public expiresAt: Date | null;
 
-	@Column('timestamp with time zone')
-	public createdAt: Date;
-
 	@ManyToOne(type => MiUser, {
 		onDelete: 'CASCADE',
 	})
diff --git a/packages/backend/src/models/RegistryItem.ts b/packages/backend/src/models/RegistryItem.ts
index fdce57c467..60bdced957 100644
--- a/packages/backend/src/models/RegistryItem.ts
+++ b/packages/backend/src/models/RegistryItem.ts
@@ -13,11 +13,6 @@ export class MiRegistryItem {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the RegistryItem.',
-	})
-	public createdAt: Date;
-
 	@Column('timestamp with time zone', {
 		comment: 'The updated date of the RegistryItem.',
 	})
diff --git a/packages/backend/src/models/RenoteMuting.ts b/packages/backend/src/models/RenoteMuting.ts
index d2a36249dc..17df43ea31 100644
--- a/packages/backend/src/models/RenoteMuting.ts
+++ b/packages/backend/src/models/RenoteMuting.ts
@@ -13,12 +13,6 @@ export class MiRenoteMuting {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Index()
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the Muting.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column({
 		...id(),
diff --git a/packages/backend/src/models/Role.ts b/packages/backend/src/models/Role.ts
index df7541db3d..6976956e13 100644
--- a/packages/backend/src/models/Role.ts
+++ b/packages/backend/src/models/Role.ts
@@ -89,11 +89,6 @@ export class MiRole {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the Role.',
-	})
-	public createdAt: Date;
-
 	@Column('timestamp with time zone', {
 		comment: 'The updated date of the Role.',
 	})
diff --git a/packages/backend/src/models/RoleAssignment.ts b/packages/backend/src/models/RoleAssignment.ts
index 4e5322c60b..30c7e19f2a 100644
--- a/packages/backend/src/models/RoleAssignment.ts
+++ b/packages/backend/src/models/RoleAssignment.ts
@@ -14,11 +14,6 @@ export class MiRoleAssignment {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the RoleAssignment.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column({
 		...id(),
diff --git a/packages/backend/src/models/Signin.ts b/packages/backend/src/models/Signin.ts
index a8b1a45c53..656b44dfe0 100644
--- a/packages/backend/src/models/Signin.ts
+++ b/packages/backend/src/models/Signin.ts
@@ -12,11 +12,6 @@ export class MiSignin {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the Signin.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column(id())
 	public userId: MiUser['id'];
diff --git a/packages/backend/src/models/SwSubscription.ts b/packages/backend/src/models/SwSubscription.ts
index be1e4e3687..f685a8ff3e 100644
--- a/packages/backend/src/models/SwSubscription.ts
+++ b/packages/backend/src/models/SwSubscription.ts
@@ -12,9 +12,6 @@ export class MiSwSubscription {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Column('timestamp with time zone')
-	public createdAt: Date;
-
 	@Index()
 	@Column(id())
 	public userId: MiUser['id'];
diff --git a/packages/backend/src/models/User.ts b/packages/backend/src/models/User.ts
index 4d961c4290..796d7c8356 100644
--- a/packages/backend/src/models/User.ts
+++ b/packages/backend/src/models/User.ts
@@ -13,12 +13,6 @@ export class MiUser {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Index()
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the User.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column('timestamp with time zone', {
 		nullable: true,
diff --git a/packages/backend/src/models/UserList.ts b/packages/backend/src/models/UserList.ts
index 9af85af97e..7ad15419d7 100644
--- a/packages/backend/src/models/UserList.ts
+++ b/packages/backend/src/models/UserList.ts
@@ -12,11 +12,6 @@ export class MiUserList {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the UserList.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column({
 		...id(),
diff --git a/packages/backend/src/models/UserListFavorite.ts b/packages/backend/src/models/UserListFavorite.ts
index d0b054b932..a18ed9253a 100644
--- a/packages/backend/src/models/UserListFavorite.ts
+++ b/packages/backend/src/models/UserListFavorite.ts
@@ -14,9 +14,6 @@ export class MiUserListFavorite {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Column('timestamp with time zone')
-	public createdAt: Date;
-
 	@Index()
 	@Column(id())
 	public userId: MiUser['id'];
diff --git a/packages/backend/src/models/UserListMembership.ts b/packages/backend/src/models/UserListMembership.ts
index f57f9ac33d..fa8287f17a 100644
--- a/packages/backend/src/models/UserListMembership.ts
+++ b/packages/backend/src/models/UserListMembership.ts
@@ -14,11 +14,6 @@ export class MiUserListMembership {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the UserListMembership.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column({
 		...id(),
diff --git a/packages/backend/src/models/UserNotePining.ts b/packages/backend/src/models/UserNotePining.ts
index 1d50a5068e..ae5977aa56 100644
--- a/packages/backend/src/models/UserNotePining.ts
+++ b/packages/backend/src/models/UserNotePining.ts
@@ -14,11 +14,6 @@ export class MiUserNotePining {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the UserNotePinings.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column(id())
 	public userId: MiUser['id'];
diff --git a/packages/backend/src/models/UserPending.ts b/packages/backend/src/models/UserPending.ts
index b15ededa14..8b1f8f617f 100644
--- a/packages/backend/src/models/UserPending.ts
+++ b/packages/backend/src/models/UserPending.ts
@@ -11,9 +11,6 @@ export class MiUserPending {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Column('timestamp with time zone')
-	public createdAt: Date;
-
 	@Index({ unique: true })
 	@Column('varchar', {
 		length: 128,
diff --git a/packages/backend/src/models/Webhook.ts b/packages/backend/src/models/Webhook.ts
index 5b009c18a6..ec4e13cc76 100644
--- a/packages/backend/src/models/Webhook.ts
+++ b/packages/backend/src/models/Webhook.ts
@@ -14,11 +14,6 @@ export class MiWebhook {
 	@PrimaryColumn(id())
 	public id: string;
 
-	@Column('timestamp with time zone', {
-		comment: 'The created date of the Antenna.',
-	})
-	public createdAt: Date;
-
 	@Index()
 	@Column({
 		...id(),
diff --git a/packages/backend/src/queue/processors/AggregateRetentionProcessorService.ts b/packages/backend/src/queue/processors/AggregateRetentionProcessorService.ts
index 5aac3f19e8..9f49d85c7f 100644
--- a/packages/backend/src/queue/processors/AggregateRetentionProcessorService.ts
+++ b/packages/backend/src/queue/processors/AggregateRetentionProcessorService.ts
@@ -47,13 +47,13 @@ export class AggregateRetentionProcessorService {
 		// 今日登録したユーザーを全て取得
 		const targetUsers = await this.usersRepository.findBy({
 			host: IsNull(),
-			createdAt: MoreThan(new Date(Date.now() - (1000 * 60 * 60 * 24))),
+			id: MoreThan(this.idService.gen(Date.now() - (1000 * 60 * 60 * 24))),
 		});
 		const targetUserIds = targetUsers.map(u => u.id);
 
 		try {
 			await this.retentionAggregationsRepository.insert({
-				id: this.idService.genId(),
+				id: this.idService.gen(),
 				createdAt: now,
 				updatedAt: now,
 				dateKey,
diff --git a/packages/backend/src/queue/processors/ExportFavoritesProcessorService.ts b/packages/backend/src/queue/processors/ExportFavoritesProcessorService.ts
index 7248c7a649..af2a3434a9 100644
--- a/packages/backend/src/queue/processors/ExportFavoritesProcessorService.ts
+++ b/packages/backend/src/queue/processors/ExportFavoritesProcessorService.ts
@@ -15,6 +15,7 @@ import { createTemp } from '@/misc/create-temp.js';
 import type { MiPoll } from '@/models/Poll.js';
 import type { MiNote } from '@/models/Note.js';
 import { bindThis } from '@/decorators.js';
+import { IdService } from '@/core/IdService.js';
 import { QueueLoggerService } from '../QueueLoggerService.js';
 import type * as Bull from 'bullmq';
 import type { DbJobDataWithUser } from '../types.js';
@@ -35,6 +36,7 @@ export class ExportFavoritesProcessorService {
 
 		private driveService: DriveService,
 		private queueLoggerService: QueueLoggerService,
+		private idService: IdService,
 	) {
 		this.logger = this.queueLoggerService.logger.createSubLogger('export-favorites');
 	}
@@ -99,7 +101,7 @@ export class ExportFavoritesProcessorService {
 					if (favorite.note.hasPoll) {
 						poll = await this.pollsRepository.findOneByOrFail({ noteId: favorite.note.id });
 					}
-					const content = JSON.stringify(serialize(favorite, poll));
+					const content = JSON.stringify(this.serialize(favorite, poll));
 					const isFirst = exportedFavoritesCount === 0;
 					await write(isFirst ? content : ',\n' + content);
 					exportedFavoritesCount++;
@@ -125,34 +127,34 @@ export class ExportFavoritesProcessorService {
 			cleanup();
 		}
 	}
-}
 
-function serialize(favorite: MiNoteFavorite & { note: MiNote & { user: MiUser } }, poll: MiPoll | null = null): Record<string, unknown> {
-	return {
-		id: favorite.id,
-		createdAt: favorite.createdAt,
-		note: {
-			id: favorite.note.id,
-			text: favorite.note.text,
-			createdAt: favorite.note.createdAt,
-			fileIds: favorite.note.fileIds,
-			replyId: favorite.note.replyId,
-			renoteId: favorite.note.renoteId,
-			poll: poll,
-			cw: favorite.note.cw,
-			visibility: favorite.note.visibility,
-			visibleUserIds: favorite.note.visibleUserIds,
-			localOnly: favorite.note.localOnly,
-			reactionAcceptance: favorite.note.reactionAcceptance,
-			uri: favorite.note.uri,
-			url: favorite.note.url,
-			user: {
-				id: favorite.note.user.id,
-				name: favorite.note.user.name,
-				username: favorite.note.user.username,
-				host: favorite.note.user.host,
-				uri: favorite.note.user.uri,
+	private serialize(favorite: MiNoteFavorite & { note: MiNote & { user: MiUser } }, poll: MiPoll | null = null): Record<string, unknown> {
+		return {
+			id: favorite.id,
+			createdAt: this.idService.parse(favorite.id).date.toISOString(),
+			note: {
+				id: favorite.note.id,
+				text: favorite.note.text,
+				createdAt: this.idService.parse(favorite.note.id).date.toISOString(),
+				fileIds: favorite.note.fileIds,
+				replyId: favorite.note.replyId,
+				renoteId: favorite.note.renoteId,
+				poll: poll,
+				cw: favorite.note.cw,
+				visibility: favorite.note.visibility,
+				visibleUserIds: favorite.note.visibleUserIds,
+				localOnly: favorite.note.localOnly,
+				reactionAcceptance: favorite.note.reactionAcceptance,
+				uri: favorite.note.uri,
+				url: favorite.note.url,
+				user: {
+					id: favorite.note.user.id,
+					name: favorite.note.user.name,
+					username: favorite.note.user.username,
+					host: favorite.note.user.host,
+					uri: favorite.note.user.uri,
+				},
 			},
-		},
-	};
+		};
+	}
 }
diff --git a/packages/backend/src/queue/processors/ExportNotesProcessorService.ts b/packages/backend/src/queue/processors/ExportNotesProcessorService.ts
index e0bc80e190..cd4ccb0b07 100644
--- a/packages/backend/src/queue/processors/ExportNotesProcessorService.ts
+++ b/packages/backend/src/queue/processors/ExportNotesProcessorService.ts
@@ -17,6 +17,7 @@ import type { MiNote } from '@/models/Note.js';
 import { bindThis } from '@/decorators.js';
 import { DriveFileEntityService } from '@/core/entities/DriveFileEntityService.js';
 import { Packed } from '@/misc/json-schema.js';
+import { IdService } from '@/core/IdService.js';
 import { QueueLoggerService } from '../QueueLoggerService.js';
 import type * as Bull from 'bullmq';
 import type { DbJobDataWithUser } from '../types.js';
@@ -37,8 +38,8 @@ export class ExportNotesProcessorService {
 
 		private driveService: DriveService,
 		private queueLoggerService: QueueLoggerService,
-
 		private driveFileEntityService: DriveFileEntityService,
+		private idService: IdService,
 	) {
 		this.logger = this.queueLoggerService.logger.createSubLogger('export-notes');
 	}
@@ -103,7 +104,7 @@ export class ExportNotesProcessorService {
 						poll = await this.pollsRepository.findOneByOrFail({ noteId: note.id });
 					}
 					const files = await this.driveFileEntityService.packManyByIds(note.fileIds);
-					const content = JSON.stringify(serialize(note, poll, files));
+					const content = JSON.stringify(this.serialize(note, poll, files));
 					const isFirst = exportedNotesCount === 0;
 					await write(isFirst ? content : ',\n' + content);
 					exportedNotesCount++;
@@ -129,22 +130,22 @@ export class ExportNotesProcessorService {
 			cleanup();
 		}
 	}
-}
 
-function serialize(note: MiNote, poll: MiPoll | null = null, files: Packed<'DriveFile'>[]): Record<string, unknown> {
-	return {
-		id: note.id,
-		text: note.text,
-		createdAt: note.createdAt,
-		fileIds: note.fileIds,
-		files: files,
-		replyId: note.replyId,
-		renoteId: note.renoteId,
-		poll: poll,
-		cw: note.cw,
-		visibility: note.visibility,
-		visibleUserIds: note.visibleUserIds,
-		localOnly: note.localOnly,
-		reactionAcceptance: note.reactionAcceptance,
-	};
+	private serialize(note: MiNote, poll: MiPoll | null = null, files: Packed<'DriveFile'>[]): Record<string, unknown> {
+		return {
+			id: note.id,
+			text: note.text,
+			createdAt: this.idService.parse(note.id).date.toISOString(),
+			fileIds: note.fileIds,
+			files: files,
+			replyId: note.replyId,
+			renoteId: note.renoteId,
+			poll: poll,
+			cw: note.cw,
+			visibility: note.visibility,
+			visibleUserIds: note.visibleUserIds,
+			localOnly: note.localOnly,
+			reactionAcceptance: note.reactionAcceptance,
+		};
+	}
 }
diff --git a/packages/backend/src/queue/processors/ImportAntennasProcessorService.ts b/packages/backend/src/queue/processors/ImportAntennasProcessorService.ts
index 7c95bccaff..3e93b7b505 100644
--- a/packages/backend/src/queue/processors/ImportAntennasProcessorService.ts
+++ b/packages/backend/src/queue/processors/ImportAntennasProcessorService.ts
@@ -76,8 +76,7 @@ export class ImportAntennasProcessorService {
 					continue;
 				}
 				const result = await this.antennasRepository.insert({
-					id: this.idService.genId(),
-					createdAt: now,
+					id: this.idService.gen(now.getTime()),
 					lastUsedAt: now,
 					userId: job.data.user.id,
 					name: antenna.name,
diff --git a/packages/backend/src/queue/processors/ImportUserListsProcessorService.ts b/packages/backend/src/queue/processors/ImportUserListsProcessorService.ts
index 9be36a9d0d..5dd3fbe887 100644
--- a/packages/backend/src/queue/processors/ImportUserListsProcessorService.ts
+++ b/packages/backend/src/queue/processors/ImportUserListsProcessorService.ts
@@ -80,8 +80,7 @@ export class ImportUserListsProcessorService {
 
 				if (list == null) {
 					list = await this.userListsRepository.insert({
-						id: this.idService.genId(),
-						createdAt: new Date(),
+						id: this.idService.gen(),
 						userId: user.id,
 						name: listName,
 					}).then(x => this.userListsRepository.findOneByOrFail(x.identifiers[0]));
diff --git a/packages/backend/src/server/api/SigninApiService.ts b/packages/backend/src/server/api/SigninApiService.ts
index 150f3f24d4..f3115690fe 100644
--- a/packages/backend/src/server/api/SigninApiService.ts
+++ b/packages/backend/src/server/api/SigninApiService.ts
@@ -128,8 +128,7 @@ export class SigninApiService {
 		const fail = async (status?: number, failure?: { id: string }) => {
 			// Append signin history
 			await this.signinsRepository.insert({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				userId: user.id,
 				ip: request.ip,
 				headers: request.headers as any,
diff --git a/packages/backend/src/server/api/SigninService.ts b/packages/backend/src/server/api/SigninService.ts
index cebba8c8ee..98e9027006 100644
--- a/packages/backend/src/server/api/SigninService.ts
+++ b/packages/backend/src/server/api/SigninService.ts
@@ -30,8 +30,7 @@ export class SigninService {
 		setImmediate(async () => {
 			// Append signin history
 			const record = await this.signinsRepository.insert({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				userId: user.id,
 				ip: request.ip,
 				headers: request.headers as any,
diff --git a/packages/backend/src/server/api/SignupApiService.ts b/packages/backend/src/server/api/SignupApiService.ts
index 431df581b5..d2c4440116 100644
--- a/packages/backend/src/server/api/SignupApiService.ts
+++ b/packages/backend/src/server/api/SignupApiService.ts
@@ -164,8 +164,7 @@ export class SignupApiService {
 			const hash = await bcrypt.hash(password, salt);
 
 			const pendingUser = await this.userPendingsRepository.insert({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				code,
 				email: emailAddress!,
 				username: username,
diff --git a/packages/backend/src/server/api/endpoints/admin/ad/create.ts b/packages/backend/src/server/api/endpoints/admin/ad/create.ts
index e48dffecf4..17f792639b 100644
--- a/packages/backend/src/server/api/endpoints/admin/ad/create.ts
+++ b/packages/backend/src/server/api/endpoints/admin/ad/create.ts
@@ -44,8 +44,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 	) {
 		super(meta, paramDef, async (ps, me) => {
 			const ad = await this.adsRepository.insert({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				expiresAt: new Date(ps.expiresAt),
 				startsAt: new Date(ps.startsAt),
 				dayOfWeek: ps.dayOfWeek,
diff --git a/packages/backend/src/server/api/endpoints/admin/announcements/create.ts b/packages/backend/src/server/api/endpoints/admin/announcements/create.ts
index 262b36b9a4..253a29cf5a 100644
--- a/packages/backend/src/server/api/endpoints/admin/announcements/create.ts
+++ b/packages/backend/src/server/api/endpoints/admin/announcements/create.ts
@@ -71,7 +71,6 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 	) {
 		super(meta, paramDef, async (ps, me) => {
 			const { raw, packed } = await this.announcementService.create({
-				createdAt: new Date(),
 				updatedAt: null,
 				title: ps.title,
 				text: ps.text,
diff --git a/packages/backend/src/server/api/endpoints/admin/announcements/list.ts b/packages/backend/src/server/api/endpoints/admin/announcements/list.ts
index c82e702eef..fefc379c00 100644
--- a/packages/backend/src/server/api/endpoints/admin/announcements/list.ts
+++ b/packages/backend/src/server/api/endpoints/admin/announcements/list.ts
@@ -9,6 +9,7 @@ import type { MiAnnouncement } from '@/models/Announcement.js';
 import { Endpoint } from '@/server/api/endpoint-base.js';
 import { QueryService } from '@/core/QueryService.js';
 import { DI } from '@/di-symbols.js';
+import { IdService } from '@/core/IdService.js';
 
 export const meta = {
 	tags: ['admin'],
@@ -81,6 +82,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 		private announcementReadsRepository: AnnouncementReadsRepository,
 
 		private queryService: QueryService,
+		private idService: IdService,
 	) {
 		super(meta, paramDef, async (ps, me) => {
 			const query = this.queryService.makePaginationQuery(this.announcementsRepository.createQueryBuilder('announcement'), ps.sinceId, ps.untilId);
@@ -102,7 +104,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 
 			return announcements.map(announcement => ({
 				id: announcement.id,
-				createdAt: announcement.createdAt.toISOString(),
+				createdAt: this.idService.parse(announcement.id).date.toISOString(),
 				updatedAt: announcement.updatedAt?.toISOString() ?? null,
 				title: announcement.title,
 				text: announcement.text,
diff --git a/packages/backend/src/server/api/endpoints/admin/drive/show-file.ts b/packages/backend/src/server/api/endpoints/admin/drive/show-file.ts
index 7fb5342f8d..4e5320007e 100644
--- a/packages/backend/src/server/api/endpoints/admin/drive/show-file.ts
+++ b/packages/backend/src/server/api/endpoints/admin/drive/show-file.ts
@@ -8,6 +8,7 @@ import type { DriveFilesRepository, UsersRepository } from '@/models/_.js';
 import { Endpoint } from '@/server/api/endpoint-base.js';
 import { DI } from '@/di-symbols.js';
 import { RoleService } from '@/core/RoleService.js';
+import { IdService } from '@/core/IdService.js';
 import { ApiError } from '../../../error.js';
 
 export const meta = {
@@ -163,6 +164,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 		private usersRepository: UsersRepository,
 
 		private roleService: RoleService,
+		private idService: IdService,
 	) {
 		super(meta, paramDef, async (ps, me) => {
 			const file = ps.fileId ? await this.driveFilesRepository.findOneBy({ id: ps.fileId }) : await this.driveFilesRepository.findOne({
@@ -212,7 +214,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 				type: file.type,
 				name: file.name,
 				md5: file.md5,
-				createdAt: file.createdAt.toISOString(),
+				createdAt: this.idService.parse(file.id).date.toISOString(),
 				requestIp: iAmModerator ? file.requestIp : null,
 				requestHeaders: iAmModerator && !ownerIsModerator ? file.requestHeaders : null,
 			};
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/copy.ts b/packages/backend/src/server/api/endpoints/admin/emoji/copy.ts
index c5f986ff02..a65e4e7624 100644
--- a/packages/backend/src/server/api/endpoints/admin/emoji/copy.ts
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/copy.ts
@@ -79,7 +79,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 			}
 
 			const copied = await this.emojisRepository.insert({
-				id: this.idService.genId(),
+				id: this.idService.gen(),
 				updatedAt: new Date(),
 				name: emoji.name,
 				host: null,
diff --git a/packages/backend/src/server/api/endpoints/admin/get-user-ips.ts b/packages/backend/src/server/api/endpoints/admin/get-user-ips.ts
index cf94c998fa..7b807e848b 100644
--- a/packages/backend/src/server/api/endpoints/admin/get-user-ips.ts
+++ b/packages/backend/src/server/api/endpoints/admin/get-user-ips.ts
@@ -7,6 +7,7 @@ import { Inject, Injectable } from '@nestjs/common';
 import type { UserIpsRepository } from '@/models/_.js';
 import { Endpoint } from '@/server/api/endpoint-base.js';
 import { DI } from '@/di-symbols.js';
+import { IdService } from '@/core/IdService.js';
 
 export const meta = {
 	tags: ['admin'],
@@ -28,17 +29,19 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 	constructor(
 		@Inject(DI.userIpsRepository)
 		private userIpsRepository: UserIpsRepository,
+
+		private idService: IdService,
 	) {
 		super(meta, paramDef, async (ps, me) => {
 			const ips = await this.userIpsRepository.find({
 				where: { userId: ps.userId },
-				order: { createdAt: 'DESC' },
+				order: { id: 'DESC' },
 				take: 30,
 			});
 
 			return ips.map(x => ({
 				ip: x.ip,
-				createdAt: x.createdAt.toISOString(),
+				createdAt: this.idService.parse(x.id).date.toISOString(),
 			}));
 		});
 	}
diff --git a/packages/backend/src/server/api/endpoints/admin/invite/create.ts b/packages/backend/src/server/api/endpoints/admin/invite/create.ts
index 2cc5ab6e35..4a22fd4824 100644
--- a/packages/backend/src/server/api/endpoints/admin/invite/create.ts
+++ b/packages/backend/src/server/api/endpoints/admin/invite/create.ts
@@ -72,8 +72,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 
 			for (let i = 0; i < ps.count; i++) {
 				ticketsPromises.push(this.registrationTicketsRepository.insert({
-					id: this.idService.genId(),
-					createdAt: new Date(),
+					id: this.idService.gen(),
 					expiresAt: ps.expiresAt ? new Date(ps.expiresAt) : null,
 					code: generateInviteCode(),
 				}).then(x => this.registrationTicketsRepository.findOneByOrFail(x.identifiers[0])));
diff --git a/packages/backend/src/server/api/endpoints/admin/roles/users.ts b/packages/backend/src/server/api/endpoints/admin/roles/users.ts
index ef5627bc9a..b7f9aa0495 100644
--- a/packages/backend/src/server/api/endpoints/admin/roles/users.ts
+++ b/packages/backend/src/server/api/endpoints/admin/roles/users.ts
@@ -10,6 +10,7 @@ import { Endpoint } from '@/server/api/endpoint-base.js';
 import { QueryService } from '@/core/QueryService.js';
 import { DI } from '@/di-symbols.js';
 import { UserEntityService } from '@/core/entities/UserEntityService.js';
+import { IdService } from '@/core/IdService.js';
 import { ApiError } from '../../../error.js';
 
 export const meta = {
@@ -49,6 +50,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 
 		private queryService: QueryService,
 		private userEntityService: UserEntityService,
+		private idService: IdService,
 	) {
 		super(meta, paramDef, async (ps, me) => {
 			const role = await this.rolesRepository.findOneBy({
@@ -74,7 +76,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 
 			return await Promise.all(assigns.map(async assign => ({
 				id: assign.id,
-				createdAt: assign.createdAt,
+				createdAt: this.idService.parse(assign.id).date.toISOString(),
 				user: await this.userEntityService.pack(assign.user!, me, { detail: true }),
 				expiresAt: assign.expiresAt,
 			})));
diff --git a/packages/backend/src/server/api/endpoints/admin/show-user.ts b/packages/backend/src/server/api/endpoints/admin/show-user.ts
index 0731413d05..f550c4fd28 100644
--- a/packages/backend/src/server/api/endpoints/admin/show-user.ts
+++ b/packages/backend/src/server/api/endpoints/admin/show-user.ts
@@ -9,6 +9,7 @@ import { Endpoint } from '@/server/api/endpoint-base.js';
 import { DI } from '@/di-symbols.js';
 import { RoleService } from '@/core/RoleService.js';
 import { RoleEntityService } from '@/core/entities/RoleEntityService.js';
+import { IdService } from '@/core/IdService.js';
 
 export const meta = {
 	tags: ['admin'],
@@ -44,6 +45,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 
 		private roleService: RoleService,
 		private roleEntityService: RoleEntityService,
+		private idService: IdService,
 	) {
 		super(meta, paramDef, async (ps, me) => {
 			const [user, profile] = await Promise.all([
@@ -92,7 +94,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 				policies: await this.roleService.getUserPolicies(user.id),
 				roles: await this.roleEntityService.packMany(roles, me),
 				roleAssigns: roleAssigns.map(a => ({
-					createdAt: a.createdAt.toISOString(),
+					createdAt: this.idService.parse(a.id).date.toISOString(),
 					expiresAt: a.expiresAt ? a.expiresAt.toISOString() : null,
 					roleId: a.roleId,
 				})),
diff --git a/packages/backend/src/server/api/endpoints/antennas/create.ts b/packages/backend/src/server/api/endpoints/antennas/create.ts
index 15fca4904d..687893398e 100644
--- a/packages/backend/src/server/api/endpoints/antennas/create.ts
+++ b/packages/backend/src/server/api/endpoints/antennas/create.ts
@@ -112,8 +112,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 			const now = new Date();
 
 			const antenna = await this.antennasRepository.insert({
-				id: this.idService.genId(),
-				createdAt: now,
+				id: this.idService.gen(now.getTime()),
 				lastUsedAt: now,
 				userId: me.id,
 				name: ps.name,
diff --git a/packages/backend/src/server/api/endpoints/antennas/notes.ts b/packages/backend/src/server/api/endpoints/antennas/notes.ts
index 6d69971e30..ff96411f3b 100644
--- a/packages/backend/src/server/api/endpoints/antennas/notes.ts
+++ b/packages/backend/src/server/api/endpoints/antennas/notes.ts
@@ -73,8 +73,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 		private redisTimelineService: RedisTimelineService,
 	) {
 		super(meta, paramDef, async (ps, me) => {
-			const untilId = ps.untilId ?? (ps.untilDate ? this.idService.genId(new Date(ps.untilDate!)) : null);
-			const sinceId = ps.sinceId ?? (ps.sinceDate ? this.idService.genId(new Date(ps.sinceDate!)) : null);
+			const untilId = ps.untilId ?? (ps.untilDate ? this.idService.gen(ps.untilDate!) : null);
+			const sinceId = ps.sinceId ?? (ps.sinceDate ? this.idService.gen(ps.sinceDate!) : null);
 
 			const antenna = await this.antennasRepository.findOneBy({
 				id: ps.antennaId,
diff --git a/packages/backend/src/server/api/endpoints/app/create.ts b/packages/backend/src/server/api/endpoints/app/create.ts
index cb00221506..f89d9823ba 100644
--- a/packages/backend/src/server/api/endpoints/app/create.ts
+++ b/packages/backend/src/server/api/endpoints/app/create.ts
@@ -55,8 +55,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 
 			// Create account
 			const app = await this.appsRepository.insert({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				userId: me ? me.id : null,
 				name: ps.name,
 				description: ps.description,
diff --git a/packages/backend/src/server/api/endpoints/auth/accept.ts b/packages/backend/src/server/api/endpoints/auth/accept.ts
index 1b1893fd94..e0baeb3565 100644
--- a/packages/backend/src/server/api/endpoints/auth/accept.ts
+++ b/packages/backend/src/server/api/endpoints/auth/accept.ts
@@ -80,8 +80,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 				const now = new Date();
 
 				await this.accessTokensRepository.insert({
-					id: this.idService.genId(),
-					createdAt: now,
+					id: this.idService.gen(now.getTime()),
 					lastUsedAt: now,
 					appId: session.appId,
 					userId: me.id,
diff --git a/packages/backend/src/server/api/endpoints/auth/session/generate.ts b/packages/backend/src/server/api/endpoints/auth/session/generate.ts
index 8b6a2c213d..6e474c59e0 100644
--- a/packages/backend/src/server/api/endpoints/auth/session/generate.ts
+++ b/packages/backend/src/server/api/endpoints/auth/session/generate.ts
@@ -79,8 +79,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 
 			// Create session token document
 			const doc = await this.authSessionsRepository.insert({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				appId: app.id,
 				token: token,
 			}).then(x => this.authSessionsRepository.findOneByOrFail(x.identifiers[0]));
diff --git a/packages/backend/src/server/api/endpoints/channels/create.ts b/packages/backend/src/server/api/endpoints/channels/create.ts
index e72120e156..3ba411d28c 100644
--- a/packages/backend/src/server/api/endpoints/channels/create.ts
+++ b/packages/backend/src/server/api/endpoints/channels/create.ts
@@ -80,8 +80,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 			}
 
 			const channel = await this.channelsRepository.insert({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				userId: me.id,
 				name: ps.name,
 				description: ps.description ?? null,
diff --git a/packages/backend/src/server/api/endpoints/channels/favorite.ts b/packages/backend/src/server/api/endpoints/channels/favorite.ts
index 1f78a86dd4..c175718919 100644
--- a/packages/backend/src/server/api/endpoints/channels/favorite.ts
+++ b/packages/backend/src/server/api/endpoints/channels/favorite.ts
@@ -57,8 +57,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 			}
 
 			await this.channelFavoritesRepository.insert({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				userId: me.id,
 				channelId: channel.id,
 			});
diff --git a/packages/backend/src/server/api/endpoints/channels/follow.ts b/packages/backend/src/server/api/endpoints/channels/follow.ts
index 5a43e8be1b..76ec6be805 100644
--- a/packages/backend/src/server/api/endpoints/channels/follow.ts
+++ b/packages/backend/src/server/api/endpoints/channels/follow.ts
@@ -57,8 +57,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 			}
 
 			await this.channelFollowingsRepository.insert({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				followerId: me.id,
 				followeeId: channel.id,
 			});
diff --git a/packages/backend/src/server/api/endpoints/channels/timeline.ts b/packages/backend/src/server/api/endpoints/channels/timeline.ts
index 2dfcf659d7..9c39d0ed86 100644
--- a/packages/backend/src/server/api/endpoints/channels/timeline.ts
+++ b/packages/backend/src/server/api/endpoints/channels/timeline.ts
@@ -74,8 +74,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 		private activeUsersChart: ActiveUsersChart,
 	) {
 		super(meta, paramDef, async (ps, me) => {
-			const untilId = ps.untilId ?? (ps.untilDate ? this.idService.genId(new Date(ps.untilDate!)) : null);
-			const sinceId = ps.sinceId ?? (ps.sinceDate ? this.idService.genId(new Date(ps.sinceDate!)) : null);
+			const untilId = ps.untilId ?? (ps.untilDate ? this.idService.gen(ps.untilDate!) : null);
+			const sinceId = ps.sinceId ?? (ps.sinceDate ? this.idService.gen(ps.sinceDate!) : null);
 			const isRangeSpecified = untilId != null && sinceId != null;
 
 			const channel = await this.channelsRepository.findOneBy({
diff --git a/packages/backend/src/server/api/endpoints/clips/favorite.ts b/packages/backend/src/server/api/endpoints/clips/favorite.ts
index 6cd34f0a54..015b2cfa85 100644
--- a/packages/backend/src/server/api/endpoints/clips/favorite.ts
+++ b/packages/backend/src/server/api/endpoints/clips/favorite.ts
@@ -74,8 +74,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 			}
 
 			await this.clipFavoritesRepository.insert({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				clipId: clip.id,
 				userId: me.id,
 			});
diff --git a/packages/backend/src/server/api/endpoints/drive/folders/create.ts b/packages/backend/src/server/api/endpoints/drive/folders/create.ts
index bc3a9bbe21..d18199f19b 100644
--- a/packages/backend/src/server/api/endpoints/drive/folders/create.ts
+++ b/packages/backend/src/server/api/endpoints/drive/folders/create.ts
@@ -76,8 +76,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 
 			// Create folder
 			const folder = await this.driveFoldersRepository.insert({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				name: ps.name,
 				parentId: parent !== null ? parent.id : null,
 				userId: me.id,
diff --git a/packages/backend/src/server/api/endpoints/flash/create.ts b/packages/backend/src/server/api/endpoints/flash/create.ts
index b46660d218..4fa65ac9aa 100644
--- a/packages/backend/src/server/api/endpoints/flash/create.ts
+++ b/packages/backend/src/server/api/endpoints/flash/create.ts
@@ -53,9 +53,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 	) {
 		super(meta, paramDef, async (ps, me) => {
 			const flash = await this.flashsRepository.insert({
-				id: this.idService.genId(),
+				id: this.idService.gen(),
 				userId: me.id,
-				createdAt: new Date(),
 				updatedAt: new Date(),
 				title: ps.title,
 				summary: ps.summary,
diff --git a/packages/backend/src/server/api/endpoints/flash/like.ts b/packages/backend/src/server/api/endpoints/flash/like.ts
index a90e5f653a..1003249c0c 100644
--- a/packages/backend/src/server/api/endpoints/flash/like.ts
+++ b/packages/backend/src/server/api/endpoints/flash/like.ts
@@ -83,8 +83,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 
 			// Create like
 			await this.flashLikesRepository.insert({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				flashId: flash.id,
 				userId: me.id,
 			});
diff --git a/packages/backend/src/server/api/endpoints/gallery/posts/create.ts b/packages/backend/src/server/api/endpoints/gallery/posts/create.ts
index 94701712de..71e0ad4141 100644
--- a/packages/backend/src/server/api/endpoints/gallery/posts/create.ts
+++ b/packages/backend/src/server/api/endpoints/gallery/posts/create.ts
@@ -76,8 +76,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 			}
 
 			const post = await this.galleryPostsRepository.insert(new MiGalleryPost({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				updatedAt: new Date(),
 				title: ps.title,
 				description: ps.description,
diff --git a/packages/backend/src/server/api/endpoints/gallery/posts/like.ts b/packages/backend/src/server/api/endpoints/gallery/posts/like.ts
index c557054066..561b2492ab 100644
--- a/packages/backend/src/server/api/endpoints/gallery/posts/like.ts
+++ b/packages/backend/src/server/api/endpoints/gallery/posts/like.ts
@@ -83,8 +83,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 
 			// Create like
 			await this.galleryLikesRepository.insert({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				postId: post.id,
 				userId: me.id,
 			});
diff --git a/packages/backend/src/server/api/endpoints/i/apps.ts b/packages/backend/src/server/api/endpoints/i/apps.ts
index daa3e536a4..09f6540a77 100644
--- a/packages/backend/src/server/api/endpoints/i/apps.ts
+++ b/packages/backend/src/server/api/endpoints/i/apps.ts
@@ -7,6 +7,7 @@ import { Inject, Injectable } from '@nestjs/common';
 import { Endpoint } from '@/server/api/endpoint-base.js';
 import type { AccessTokensRepository } from '@/models/_.js';
 import { DI } from '@/di-symbols.js';
+import { IdService } from '@/core/IdService.js';
 
 export const meta = {
 	requireCredential: true,
@@ -27,6 +28,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 	constructor(
 		@Inject(DI.accessTokensRepository)
 		private accessTokensRepository: AccessTokensRepository,
+
+		private idService: IdService,
 	) {
 		super(meta, paramDef, async (ps, me) => {
 			const query = this.accessTokensRepository.createQueryBuilder('token')
@@ -34,8 +37,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 				.leftJoinAndSelect('token.app', 'app');
 
 			switch (ps.sort) {
-				case '+createdAt': query.orderBy('token.createdAt', 'DESC'); break;
-				case '-createdAt': query.orderBy('token.createdAt', 'ASC'); break;
+				case '+createdAt': query.orderBy('token.id', 'DESC'); break;
+				case '-createdAt': query.orderBy('token.id', 'ASC'); break;
 				case '+lastUsedAt': query.orderBy('token.lastUsedAt', 'DESC'); break;
 				case '-lastUsedAt': query.orderBy('token.lastUsedAt', 'ASC'); break;
 				default: query.orderBy('token.id', 'ASC'); break;
@@ -46,7 +49,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 			return await Promise.all(tokens.map(token => ({
 				id: token.id,
 				name: token.name ?? token.app?.name,
-				createdAt: token.createdAt,
+				createdAt: this.idService.parse(token.id).date.toISOString(),
 				lastUsedAt: token.lastUsedAt,
 				permission: token.permission,
 			})));
diff --git a/packages/backend/src/server/api/endpoints/i/registry/set.ts b/packages/backend/src/server/api/endpoints/i/registry/set.ts
index c074b152df..6203e7aa8b 100644
--- a/packages/backend/src/server/api/endpoints/i/registry/set.ts
+++ b/packages/backend/src/server/api/endpoints/i/registry/set.ts
@@ -53,8 +53,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 				});
 			} else {
 				await this.registryItemsRepository.insert({
-					id: this.idService.genId(),
-					createdAt: new Date(),
+					id: this.idService.gen(),
 					updatedAt: new Date(),
 					userId: me.id,
 					domain: null,
diff --git a/packages/backend/src/server/api/endpoints/i/webhooks/create.ts b/packages/backend/src/server/api/endpoints/i/webhooks/create.ts
index 48eaeff406..f00dba4a85 100644
--- a/packages/backend/src/server/api/endpoints/i/webhooks/create.ts
+++ b/packages/backend/src/server/api/endpoints/i/webhooks/create.ts
@@ -63,8 +63,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 			}
 
 			const webhook = await this.webhooksRepository.insert({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				userId: me.id,
 				name: ps.name,
 				url: ps.url,
diff --git a/packages/backend/src/server/api/endpoints/invite/create.ts b/packages/backend/src/server/api/endpoints/invite/create.ts
index 7361ab616c..94836283fa 100644
--- a/packages/backend/src/server/api/endpoints/invite/create.ts
+++ b/packages/backend/src/server/api/endpoints/invite/create.ts
@@ -62,7 +62,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 
 			if (policies.inviteLimit) {
 				const count = await this.registrationTicketsRepository.countBy({
-					createdAt: MoreThan(new Date(Date.now() - (policies.inviteLimitCycle * 1000 * 60))),
+					id: MoreThan(this.idService.gen(Date.now() - (policies.inviteLimitCycle * 1000 * 60))),
 					createdById: me.id,
 				});
 
@@ -72,8 +72,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 			}
 
 			const ticket = await this.registrationTicketsRepository.insert({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				createdBy: me,
 				createdById: me.id,
 				expiresAt: policies.inviteExpirationTime ? new Date(Date.now() + (policies.inviteExpirationTime * 1000 * 60)) : null,
diff --git a/packages/backend/src/server/api/endpoints/invite/limit.ts b/packages/backend/src/server/api/endpoints/invite/limit.ts
index 43b94e4f06..1f4190c948 100644
--- a/packages/backend/src/server/api/endpoints/invite/limit.ts
+++ b/packages/backend/src/server/api/endpoints/invite/limit.ts
@@ -9,6 +9,7 @@ import { Endpoint } from '@/server/api/endpoint-base.js';
 import type { RegistrationTicketsRepository } from '@/models/_.js';
 import { RoleService } from '@/core/RoleService.js';
 import { DI } from '@/di-symbols.js';
+import { IdService } from '@/core/IdService.js';
 
 export const meta = {
 	tags: ['meta'],
@@ -41,12 +42,13 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 		private registrationTicketsRepository: RegistrationTicketsRepository,
 
 		private roleService: RoleService,
+		private idService: IdService,
 	) {
 		super(meta, paramDef, async (ps, me) => {
 			const policies = await this.roleService.getUserPolicies(me.id);
 
 			const count = policies.inviteLimit ? await this.registrationTicketsRepository.countBy({
-				createdAt: MoreThan(new Date(Date.now() - (policies.inviteExpirationTime * 60 * 1000))),
+				id: MoreThan(this.idService.gen(Date.now() - (policies.inviteExpirationTime * 60 * 1000))),
 				createdById: me.id,
 			}) : null;
 
diff --git a/packages/backend/src/server/api/endpoints/miauth/gen-token.ts b/packages/backend/src/server/api/endpoints/miauth/gen-token.ts
index e40656cb6d..cac8f41f8e 100644
--- a/packages/backend/src/server/api/endpoints/miauth/gen-token.ts
+++ b/packages/backend/src/server/api/endpoints/miauth/gen-token.ts
@@ -59,8 +59,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 
 			// Insert access token doc
 			await this.accessTokensRepository.insert({
-				id: this.idService.genId(),
-				createdAt: now,
+				id: this.idService.gen(now.getTime()),
 				lastUsedAt: now,
 				session: ps.session,
 				userId: me.id,
diff --git a/packages/backend/src/server/api/endpoints/notes/favorites/create.ts b/packages/backend/src/server/api/endpoints/notes/favorites/create.ts
index cc648e22a8..ed3dce7f35 100644
--- a/packages/backend/src/server/api/endpoints/notes/favorites/create.ts
+++ b/packages/backend/src/server/api/endpoints/notes/favorites/create.ts
@@ -80,8 +80,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 
 			// Create favorite
 			await this.noteFavoritesRepository.insert({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				noteId: note.id,
 				userId: me.id,
 			});
diff --git a/packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts b/packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts
index 8ac5f1b038..378529e30d 100644
--- a/packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts
+++ b/packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts
@@ -77,8 +77,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 		private redisTimelineService: RedisTimelineService,
 	) {
 		super(meta, paramDef, async (ps, me) => {
-			const untilId = ps.untilId ?? (ps.untilDate ? this.idService.genId(new Date(ps.untilDate!)) : null);
-			const sinceId = ps.sinceId ?? (ps.sinceDate ? this.idService.genId(new Date(ps.sinceDate!)) : null);
+			const untilId = ps.untilId ?? (ps.untilDate ? this.idService.gen(ps.untilDate!) : null);
+			const sinceId = ps.sinceId ?? (ps.sinceDate ? this.idService.gen(ps.sinceDate!) : null);
 
 			const policies = await this.roleService.getUserPolicies(me.id);
 			if (!policies.ltlAvailable) {
diff --git a/packages/backend/src/server/api/endpoints/notes/local-timeline.ts b/packages/backend/src/server/api/endpoints/notes/local-timeline.ts
index d10c3bedbf..f69e60ab54 100644
--- a/packages/backend/src/server/api/endpoints/notes/local-timeline.ts
+++ b/packages/backend/src/server/api/endpoints/notes/local-timeline.ts
@@ -73,8 +73,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 		private redisTimelineService: RedisTimelineService,
 	) {
 		super(meta, paramDef, async (ps, me) => {
-			const untilId = ps.untilId ?? (ps.untilDate ? this.idService.genId(new Date(ps.untilDate!)) : null);
-			const sinceId = ps.sinceId ?? (ps.sinceDate ? this.idService.genId(new Date(ps.sinceDate!)) : null);
+			const untilId = ps.untilId ?? (ps.untilDate ? this.idService.gen(ps.untilDate!) : null);
+			const sinceId = ps.sinceId ?? (ps.sinceDate ? this.idService.gen(ps.sinceDate!) : null);
 
 			const policies = await this.roleService.getUserPolicies(me ? me.id : null);
 			if (!policies.ltlAvailable) {
diff --git a/packages/backend/src/server/api/endpoints/notes/polls/recommendation.ts b/packages/backend/src/server/api/endpoints/notes/polls/recommendation.ts
index 986201e950..af7ff8bdcd 100644
--- a/packages/backend/src/server/api/endpoints/notes/polls/recommendation.ts
+++ b/packages/backend/src/server/api/endpoints/notes/polls/recommendation.ts
@@ -98,7 +98,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 					id: In(polls.map(poll => poll.noteId)),
 				},
 				order: {
-					createdAt: 'DESC',
+					id: 'DESC',
 				},
 			});
 
diff --git a/packages/backend/src/server/api/endpoints/notes/polls/vote.ts b/packages/backend/src/server/api/endpoints/notes/polls/vote.ts
index a58bf09b85..734c3f0e63 100644
--- a/packages/backend/src/server/api/endpoints/notes/polls/vote.ts
+++ b/packages/backend/src/server/api/endpoints/notes/polls/vote.ts
@@ -145,8 +145,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 
 			// Create vote
 			const vote = await this.pollVotesRepository.insert({
-				id: this.idService.genId(),
-				createdAt,
+				id: this.idService.gen(createdAt.getTime()),
 				noteId: note.id,
 				userId: me.id,
 				choice: ps.choice,
diff --git a/packages/backend/src/server/api/endpoints/notes/thread-muting/create.ts b/packages/backend/src/server/api/endpoints/notes/thread-muting/create.ts
index 449a838604..b2cdaa00ac 100644
--- a/packages/backend/src/server/api/endpoints/notes/thread-muting/create.ts
+++ b/packages/backend/src/server/api/endpoints/notes/thread-muting/create.ts
@@ -72,8 +72,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 			await this.noteReadService.read(me.id, mutedNotes);
 
 			await this.noteThreadMutingsRepository.insert({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				threadId: note.threadId ?? note.id,
 				userId: me.id,
 			});
diff --git a/packages/backend/src/server/api/endpoints/notes/timeline.ts b/packages/backend/src/server/api/endpoints/notes/timeline.ts
index 760d52c9db..8f13b3a4ba 100644
--- a/packages/backend/src/server/api/endpoints/notes/timeline.ts
+++ b/packages/backend/src/server/api/endpoints/notes/timeline.ts
@@ -66,8 +66,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 		private redisTimelineService: RedisTimelineService,
 	) {
 		super(meta, paramDef, async (ps, me) => {
-			const untilId = ps.untilId ?? (ps.untilDate ? this.idService.genId(new Date(ps.untilDate!)) : null);
-			const sinceId = ps.sinceId ?? (ps.sinceDate ? this.idService.genId(new Date(ps.sinceDate!)) : null);
+			const untilId = ps.untilId ?? (ps.untilDate ? this.idService.gen(ps.untilDate!) : null);
+			const sinceId = ps.sinceId ?? (ps.sinceDate ? this.idService.gen(ps.sinceDate!) : null);
 
 			const [
 				followings,
diff --git a/packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts b/packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts
index f7ee58264e..b8007e78fd 100644
--- a/packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts
+++ b/packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts
@@ -83,8 +83,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 		private redisTimelineService: RedisTimelineService,
 	) {
 		super(meta, paramDef, async (ps, me) => {
-			const untilId = ps.untilId ?? (ps.untilDate ? this.idService.genId(new Date(ps.untilDate!)) : null);
-			const sinceId = ps.sinceId ?? (ps.sinceDate ? this.idService.genId(new Date(ps.sinceDate!)) : null);
+			const untilId = ps.untilId ?? (ps.untilDate ? this.idService.gen(ps.untilDate!) : null);
+			const sinceId = ps.sinceId ?? (ps.sinceDate ? this.idService.gen(ps.sinceDate!) : null);
 
 			const list = await this.userListsRepository.findOneBy({
 				id: ps.listId,
diff --git a/packages/backend/src/server/api/endpoints/pages/create.ts b/packages/backend/src/server/api/endpoints/pages/create.ts
index c0e8fab16c..4c2ef516e5 100644
--- a/packages/backend/src/server/api/endpoints/pages/create.ts
+++ b/packages/backend/src/server/api/endpoints/pages/create.ts
@@ -103,8 +103,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 			});
 
 			const page = await this.pagesRepository.insert(new MiPage({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				updatedAt: new Date(),
 				title: ps.title,
 				name: ps.name,
diff --git a/packages/backend/src/server/api/endpoints/pages/like.ts b/packages/backend/src/server/api/endpoints/pages/like.ts
index 6c69cad9d5..8c18982b50 100644
--- a/packages/backend/src/server/api/endpoints/pages/like.ts
+++ b/packages/backend/src/server/api/endpoints/pages/like.ts
@@ -83,8 +83,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 
 			// Create like
 			await this.pageLikesRepository.insert({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				pageId: page.id,
 				userId: me.id,
 			});
diff --git a/packages/backend/src/server/api/endpoints/promo/read.ts b/packages/backend/src/server/api/endpoints/promo/read.ts
index b197756acc..7d07c92178 100644
--- a/packages/backend/src/server/api/endpoints/promo/read.ts
+++ b/packages/backend/src/server/api/endpoints/promo/read.ts
@@ -60,8 +60,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 			}
 
 			await this.promoReadsRepository.insert({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				noteId: note.id,
 				userId: me.id,
 			});
diff --git a/packages/backend/src/server/api/endpoints/renote-mute/create.ts b/packages/backend/src/server/api/endpoints/renote-mute/create.ts
index 3c9d266e21..7ff7b5de3a 100644
--- a/packages/backend/src/server/api/endpoints/renote-mute/create.ts
+++ b/packages/backend/src/server/api/endpoints/renote-mute/create.ts
@@ -90,8 +90,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 
 			// Create mute
 			await this.renoteMutingsRepository.insert({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				muterId: muter.id,
 				muteeId: mutee.id,
 			} as MiRenoteMuting);
diff --git a/packages/backend/src/server/api/endpoints/request-reset-password.ts b/packages/backend/src/server/api/endpoints/request-reset-password.ts
index adb160c58b..f13710e1dd 100644
--- a/packages/backend/src/server/api/endpoints/request-reset-password.ts
+++ b/packages/backend/src/server/api/endpoints/request-reset-password.ts
@@ -84,8 +84,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 			const token = secureRndstr(64, { chars: L_CHARS });
 
 			await this.passwordResetRequestsRepository.insert({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				userId: profile.userId,
 				token,
 			});
diff --git a/packages/backend/src/server/api/endpoints/reset-password.ts b/packages/backend/src/server/api/endpoints/reset-password.ts
index 1858c922a0..3a6dc14bcd 100644
--- a/packages/backend/src/server/api/endpoints/reset-password.ts
+++ b/packages/backend/src/server/api/endpoints/reset-password.ts
@@ -8,6 +8,7 @@ import { Inject, Injectable } from '@nestjs/common';
 import type { UserProfilesRepository, PasswordResetRequestsRepository } from '@/models/_.js';
 import { Endpoint } from '@/server/api/endpoint-base.js';
 import { DI } from '@/di-symbols.js';
+import { IdService } from '@/core/IdService.js';
 
 export const meta = {
 	tags: ['reset password'],
@@ -38,6 +39,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 
 		@Inject(DI.userProfilesRepository)
 		private userProfilesRepository: UserProfilesRepository,
+
+		private idService: IdService,
 	) {
 		super(meta, paramDef, async (ps, me) => {
 			const req = await this.passwordResetRequestsRepository.findOneByOrFail({
@@ -45,7 +48,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 			});
 
 			// 発行してから30分以上経過していたら無効
-			if (Date.now() - req.createdAt.getTime() > 1000 * 60 * 30) {
+			if (Date.now() - this.idService.parse(req.id).date.getTime() > 1000 * 60 * 30) {
 				throw new Error(); // TODO
 			}
 
diff --git a/packages/backend/src/server/api/endpoints/roles/notes.ts b/packages/backend/src/server/api/endpoints/roles/notes.ts
index 0db51abc55..e6e1daaa51 100644
--- a/packages/backend/src/server/api/endpoints/roles/notes.ts
+++ b/packages/backend/src/server/api/endpoints/roles/notes.ts
@@ -69,8 +69,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 		private redisTimelineService: RedisTimelineService,
 	) {
 		super(meta, paramDef, async (ps, me) => {
-			const untilId = ps.untilId ?? (ps.untilDate ? this.idService.genId(new Date(ps.untilDate!)) : null);
-			const sinceId = ps.sinceId ?? (ps.sinceDate ? this.idService.genId(new Date(ps.sinceDate!)) : null);
+			const untilId = ps.untilId ?? (ps.untilDate ? this.idService.gen(ps.untilDate!) : null);
+			const sinceId = ps.sinceId ?? (ps.sinceDate ? this.idService.gen(ps.sinceDate!) : null);
 
 			const role = await this.rolesRepository.findOneBy({
 				id: ps.roleId,
diff --git a/packages/backend/src/server/api/endpoints/sw/register.ts b/packages/backend/src/server/api/endpoints/sw/register.ts
index 5cfbeab73f..9ab062326d 100644
--- a/packages/backend/src/server/api/endpoints/sw/register.ts
+++ b/packages/backend/src/server/api/endpoints/sw/register.ts
@@ -88,8 +88,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 			}
 
 			await this.swSubscriptionsRepository.insert({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				userId: me.id,
 				endpoint: ps.endpoint,
 				auth: ps.auth,
diff --git a/packages/backend/src/server/api/endpoints/users/lists/create-from-public.ts b/packages/backend/src/server/api/endpoints/users/lists/create-from-public.ts
index f2f6c4303a..4eb37c3e43 100644
--- a/packages/backend/src/server/api/endpoints/users/lists/create-from-public.ts
+++ b/packages/backend/src/server/api/endpoints/users/lists/create-from-public.ts
@@ -104,8 +104,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 			}
 
 			const userList = await this.userListsRepository.insert({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				userId: me.id,
 				name: ps.name,
 			} as MiUserList).then(x => this.userListsRepository.findOneByOrFail(x.identifiers[0]));
diff --git a/packages/backend/src/server/api/endpoints/users/lists/create.ts b/packages/backend/src/server/api/endpoints/users/lists/create.ts
index 60b2b3f17e..e86e4c0ded 100644
--- a/packages/backend/src/server/api/endpoints/users/lists/create.ts
+++ b/packages/backend/src/server/api/endpoints/users/lists/create.ts
@@ -66,8 +66,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 			}
 
 			const userList = await this.userListsRepository.insert({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				userId: me.id,
 				name: ps.name,
 			} as MiUserList).then(x => this.userListsRepository.findOneByOrFail(x.identifiers[0]));
diff --git a/packages/backend/src/server/api/endpoints/users/lists/favorite.ts b/packages/backend/src/server/api/endpoints/users/lists/favorite.ts
index 1707afee60..2ecf0a1256 100644
--- a/packages/backend/src/server/api/endpoints/users/lists/favorite.ts
+++ b/packages/backend/src/server/api/endpoints/users/lists/favorite.ts
@@ -69,8 +69,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
 			}
 
 			await this.userListFavoritesRepository.insert({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				userId: me.id,
 				userListId: ps.listId,
 			});
diff --git a/packages/backend/src/server/api/endpoints/users/notes.ts b/packages/backend/src/server/api/endpoints/users/notes.ts
index df0951ce74..4f3d61ce07 100644
--- a/packages/backend/src/server/api/endpoints/users/notes.ts
+++ b/packages/backend/src/server/api/endpoints/users/notes.ts
@@ -74,8 +74,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 		private redisTimelineService: RedisTimelineService,
 	) {
 		super(meta, paramDef, async (ps, me) => {
-			const untilId = ps.untilId ?? (ps.untilDate ? this.idService.genId(new Date(ps.untilDate!)) : null);
-			const sinceId = ps.sinceId ?? (ps.sinceDate ? this.idService.genId(new Date(ps.sinceDate!)) : null);
+			const untilId = ps.untilId ?? (ps.untilDate ? this.idService.gen(ps.untilDate!) : null);
+			const sinceId = ps.sinceId ?? (ps.sinceDate ? this.idService.gen(ps.sinceDate!) : null);
 			const isRangeSpecified = untilId != null && sinceId != null;
 			const isSelf = me && (me.id === ps.userId);
 
diff --git a/packages/backend/src/server/api/endpoints/users/report-abuse.ts b/packages/backend/src/server/api/endpoints/users/report-abuse.ts
index 50aa6fa09e..3bcf44cc42 100644
--- a/packages/backend/src/server/api/endpoints/users/report-abuse.ts
+++ b/packages/backend/src/server/api/endpoints/users/report-abuse.ts
@@ -82,8 +82,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 			}
 
 			const report = await this.abuseUserReportsRepository.insert({
-				id: this.idService.genId(),
-				createdAt: new Date(),
+				id: this.idService.gen(),
 				targetUserId: user.id,
 				targetUserHost: user.host,
 				reporterId: me.id,
diff --git a/packages/backend/src/server/api/endpoints/users/update-memo.ts b/packages/backend/src/server/api/endpoints/users/update-memo.ts
index 194d488052..b3f67815ef 100644
--- a/packages/backend/src/server/api/endpoints/users/update-memo.ts
+++ b/packages/backend/src/server/api/endpoints/users/update-memo.ts
@@ -72,7 +72,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 
 			if (!previousMemo) {
 				await this.userMemosRepository.insert({
-					id: this.idService.genId(),
+					id: this.idService.gen(),
 					userId: me.id,
 					targetUserId: target.id,
 					memo: ps.memo,
diff --git a/packages/backend/src/server/oauth/OAuth2ProviderService.ts b/packages/backend/src/server/oauth/OAuth2ProviderService.ts
index c3a78561c2..4fa7b800e8 100644
--- a/packages/backend/src/server/oauth/OAuth2ProviderService.ts
+++ b/packages/backend/src/server/oauth/OAuth2ProviderService.ts
@@ -325,8 +325,7 @@ export class OAuth2ProviderService {
 
 				// NOTE: we don't have a setup for automatic token expiration
 				await accessTokensRepository.insert({
-					id: idService.genId(),
-					createdAt: now,
+					id: idService.gen(now.getTime()),
 					lastUsedAt: now,
 					userId: granted.userId,
 					token: accessToken,
diff --git a/packages/backend/src/server/web/FeedService.ts b/packages/backend/src/server/web/FeedService.ts
index 78551e800b..b547630298 100644
--- a/packages/backend/src/server/web/FeedService.ts
+++ b/packages/backend/src/server/web/FeedService.ts
@@ -13,6 +13,7 @@ import type { MiUser } from '@/models/User.js';
 import { UserEntityService } from '@/core/entities/UserEntityService.js';
 import { DriveFileEntityService } from '@/core/entities/DriveFileEntityService.js';
 import { bindThis } from '@/decorators.js';
+import { IdService } from '@/core/IdService.js';
 
 @Injectable()
 export class FeedService {
@@ -31,6 +32,7 @@ export class FeedService {
 
 		private userEntityService: UserEntityService,
 		private driveFileEntityService: DriveFileEntityService,
+		private idService: IdService,
 	) {
 	}
 
@@ -49,14 +51,14 @@ export class FeedService {
 				renoteId: IsNull(),
 				visibility: In(['public', 'home']),
 			},
-			order: { createdAt: -1 },
+			order: { id: -1 },
 			take: 20,
 		});
 
 		const feed = new Feed({
 			id: author.link,
 			title: `${author.name} (@${user.username}@${this.config.host})`,
-			updated: notes[0].createdAt,
+			updated: this.idService.parse(notes[0].id).date,
 			generator: 'Misskey',
 			description: `${user.notesCount} Notes, ${profile.ffVisibility === 'public' ? user.followingCount : '?'} Following, ${profile.ffVisibility === 'public' ? user.followersCount : '?'} Followers${profile.description ? ` · ${profile.description}` : ''}`,
 			link: author.link,
@@ -78,7 +80,7 @@ export class FeedService {
 			feed.addItem({
 				title: `New note by ${author.name}`,
 				link: `${this.config.url}/notes/${note.id}`,
-				date: note.createdAt,
+				date: this.idService.parse(note.id).date,
 				description: note.cw ?? undefined,
 				content: note.text ?? undefined,
 				image: file ? this.driveFileEntityService.getPublicUrl(file) ?? undefined : undefined,
diff --git a/packages/backend/test/e2e/streaming.ts b/packages/backend/test/e2e/streaming.ts
index 77de144882..5a83bbb7da 100644
--- a/packages/backend/test/e2e/streaming.ts
+++ b/packages/backend/test/e2e/streaming.ts
@@ -18,7 +18,6 @@ describe('Streaming', () => {
 	const follow = async (follower: any, followee: any) => {
 		await Followings.save({
 			id: 'a',
-			createdAt: new Date(),
 			followerId: follower.id,
 			followeeId: followee.id,
 			followerHost: follower.host,
diff --git a/packages/backend/test/unit/AnnouncementService.ts b/packages/backend/test/unit/AnnouncementService.ts
index 8f61d91ba9..5fe41d1962 100644
--- a/packages/backend/test/unit/AnnouncementService.ts
+++ b/packages/backend/test/unit/AnnouncementService.ts
@@ -36,7 +36,6 @@ describe('AnnouncementService', () => {
 		const un = secureRndstr(16);
 		return usersRepository.insert({
 			id: genAidx(new Date()),
-			createdAt: new Date(),
 			username: un,
 			usernameLower: un,
 			...data,
@@ -44,10 +43,9 @@ describe('AnnouncementService', () => {
 			.then(x => usersRepository.findOneByOrFail(x.identifiers[0]));
 	}
 
-	function createAnnouncement(data: Partial<MiAnnouncement> = {}) {
+	function createAnnouncement(data: Partial<MiAnnouncement & { createdAt: Date }> = {}) {
 		return announcementsRepository.insert({
-			id: genAidx(new Date()),
-			createdAt: new Date(),
+			id: genAidx(data.createdAt ?? new Date()),
 			updatedAt: null,
 			title: 'Title',
 			text: 'Text',
diff --git a/packages/backend/test/unit/RoleService.ts b/packages/backend/test/unit/RoleService.ts
index c6a14702ae..41a2e49ed0 100644
--- a/packages/backend/test/unit/RoleService.ts
+++ b/packages/backend/test/unit/RoleService.ts
@@ -38,7 +38,6 @@ describe('RoleService', () => {
 		const un = secureRndstr(16);
 		return usersRepository.insert({
 			id: genAidx(new Date()),
-			createdAt: new Date(),
 			username: un,
 			usernameLower: un,
 			...data,
@@ -49,7 +48,6 @@ describe('RoleService', () => {
 	function createRole(data: Partial<MiRole> = {}) {
 		return rolesRepository.insert({
 			id: genAidx(new Date()),
-			createdAt: new Date(),
 			updatedAt: new Date(),
 			lastUsedAt: new Date(),
 			description: '',