From 5b9f3701f58ca00c151498d16b6a839a91ba8643 Mon Sep 17 00:00:00 2001
From: Akihiko Odaki <nekomanma@pixiv.co.jp>
Date: Mon, 2 Apr 2018 12:58:53 +0900
Subject: [PATCH] Abolish common and misc directories

---
 src/client/app/ch/tags/channel.tag                   |  2 +-
 .../app/common/scripts/compose-notification.ts       |  4 ++--
 .../app/common/views/components/autocomplete.vue     |  2 +-
 .../views/components/messaging-room.message.vue      |  4 ++--
 src/client/app/common/views/components/messaging.vue |  2 +-
 .../app/common/views/components/othello.game.vue     |  2 +-
 .../app/common/views/components/othello.room.vue     |  2 +-
 src/client/app/common/views/components/post-html.ts  |  4 ++--
 .../app/common/views/components/welcome-timeline.vue |  2 +-
 .../app/desktop/views/components/friends-maker.vue   |  2 +-
 .../views/components/messaging-room-window.vue       |  2 +-
 .../app/desktop/views/components/notifications.vue   |  4 ++--
 .../app/desktop/views/components/post-detail.sub.vue |  2 +-
 .../app/desktop/views/components/post-detail.vue     |  4 ++--
 .../app/desktop/views/components/post-preview.vue    |  2 +-
 .../app/desktop/views/components/posts.post.sub.vue  |  2 +-
 .../app/desktop/views/components/posts.post.vue      |  4 ++--
 .../app/desktop/views/components/settings.mute.vue   |  2 +-
 .../app/desktop/views/components/user-preview.vue    |  4 ++--
 .../app/desktop/views/components/users-list.item.vue |  2 +-
 src/client/app/desktop/views/pages/home.vue          |  2 +-
 .../app/desktop/views/pages/messaging-room.vue       |  2 +-
 .../views/pages/user/user.followers-you-know.vue     |  2 +-
 .../app/desktop/views/pages/user/user.friends.vue    |  2 +-
 .../app/desktop/views/pages/user/user.header.vue     |  2 +-
 src/client/app/desktop/views/pages/user/user.vue     |  2 +-
 src/client/app/desktop/views/pages/welcome.vue       |  2 +-
 .../desktop/views/widgets/channel.channel.post.vue   |  2 +-
 src/client/app/desktop/views/widgets/polls.vue       |  2 +-
 src/client/app/desktop/views/widgets/trends.vue      |  2 +-
 src/client/app/desktop/views/widgets/users.vue       |  2 +-
 src/client/app/mobile/api/post.ts                    |  2 +-
 .../mobile/views/components/notification-preview.vue |  2 +-
 .../app/mobile/views/components/notification.vue     |  4 ++--
 src/client/app/mobile/views/components/post-card.vue |  4 ++--
 .../app/mobile/views/components/post-detail.sub.vue  |  2 +-
 .../app/mobile/views/components/post-detail.vue      |  4 ++--
 .../app/mobile/views/components/post-preview.vue     |  2 +-
 src/client/app/mobile/views/components/post.sub.vue  |  2 +-
 src/client/app/mobile/views/components/post.vue      |  4 ++--
 src/client/app/mobile/views/components/user-card.vue |  2 +-
 .../app/mobile/views/components/user-preview.vue     |  2 +-
 src/client/app/mobile/views/pages/followers.vue      |  2 +-
 src/client/app/mobile/views/pages/following.vue      |  2 +-
 src/client/app/mobile/views/pages/home.vue           |  2 +-
 src/client/app/mobile/views/pages/messaging-room.vue |  2 +-
 src/client/app/mobile/views/pages/messaging.vue      |  2 +-
 src/client/app/mobile/views/pages/user.vue           |  4 ++--
 .../views/pages/user/home.followers-you-know.vue     |  2 +-
 .../app/mobile/views/pages/user/home.photos.vue      |  2 +-
 src/{common => }/drive/add-file.ts                   | 12 ++++++------
 src/{common => }/drive/upload-from-url.ts            |  2 +-
 src/{common => }/event.ts                            |  2 +-
 src/{misc => }/get-notification-summary.ts           |  0
 src/{misc => }/get-post-summary.ts                   |  0
 src/{misc => }/get-reaction-emoji.ts                 |  0
 src/{common => }/notify.ts                           |  6 +++---
 src/{misc => }/othello/ai/back.ts                    |  2 +-
 src/{misc => }/othello/ai/front.ts                   |  2 +-
 src/{misc => }/othello/ai/index.ts                   |  0
 src/{misc => }/othello/core.ts                       |  0
 src/{misc => }/othello/maps.ts                       |  0
 src/processor/http/follow.ts                         |  4 ++--
 src/{common => }/push-sw.ts                          |  4 ++--
 src/remote/activitypub/create.ts                     |  2 +-
 src/server/activitypub/inbox.ts                      |  2 +-
 src/server/activitypub/post.ts                       |  2 +-
 src/server/activitypub/with-user.ts                  |  2 +-
 src/server/api/bot/core.ts                           |  8 ++++----
 src/server/api/bot/interfaces/line.ts                |  6 +++---
 src/server/api/common/read-messaging-message.ts      |  6 +++---
 src/server/api/common/read-notification.ts           |  2 +-
 src/server/api/endpoints/drive/files/create.ts       |  2 +-
 src/server/api/endpoints/drive/files/update.ts       |  2 +-
 .../api/endpoints/drive/files/upload_from_url.ts     |  2 +-
 src/server/api/endpoints/drive/folders/create.ts     |  2 +-
 src/server/api/endpoints/drive/folders/update.ts     |  2 +-
 src/server/api/endpoints/following/delete.ts         |  2 +-
 src/server/api/endpoints/i/regenerate_token.ts       |  2 +-
 src/server/api/endpoints/i/update.ts                 |  2 +-
 src/server/api/endpoints/i/update_client_setting.ts  |  2 +-
 src/server/api/endpoints/i/update_home.ts            |  2 +-
 src/server/api/endpoints/i/update_mobile_home.ts     |  2 +-
 .../api/endpoints/messaging/messages/create.ts       |  8 ++++----
 .../api/endpoints/notifications/mark_as_read_all.ts  |  2 +-
 src/server/api/endpoints/othello/games/show.ts       |  2 +-
 src/server/api/endpoints/othello/match.ts            |  4 ++--
 src/server/api/endpoints/posts/create.ts             | 12 ++++++------
 src/server/api/endpoints/posts/polls/vote.ts         |  4 ++--
 src/server/api/endpoints/posts/reactions/create.ts   |  4 ++--
 src/server/api/limitter.ts                           |  2 +-
 src/server/api/private/signin.ts                     |  2 +-
 src/server/api/service/twitter.ts                    |  2 +-
 src/server/api/stream/othello-game.ts                |  6 +++---
 src/server/api/stream/othello.ts                     |  2 +-
 src/server/webfinger.ts                              |  2 +-
 src/{common => }/text/html.ts                        |  0
 .../text/parse/core/syntax-highlighter.ts            |  0
 src/{common => }/text/parse/elements/bold.ts         |  0
 src/{common => }/text/parse/elements/code.ts         |  0
 src/{common => }/text/parse/elements/emoji.ts        |  0
 src/{common => }/text/parse/elements/hashtag.ts      |  0
 src/{common => }/text/parse/elements/inline-code.ts  |  0
 src/{common => }/text/parse/elements/link.ts         |  0
 src/{common => }/text/parse/elements/mention.ts      |  2 +-
 src/{common => }/text/parse/elements/quote.ts        |  0
 src/{common => }/text/parse/elements/url.ts          |  0
 src/{common => }/text/parse/index.ts                 |  0
 src/{misc => }/user/get-acct.ts                      |  0
 src/{misc => }/user/get-summary.ts                   |  2 +-
 src/{misc => }/user/parse-acct.ts                    |  0
 111 files changed, 133 insertions(+), 133 deletions(-)
 rename src/{common => }/drive/add-file.ts (96%)
 rename src/{common => }/drive/upload-from-url.ts (93%)
 rename src/{common => }/event.ts (98%)
 rename src/{misc => }/get-notification-summary.ts (100%)
 rename src/{misc => }/get-post-summary.ts (100%)
 rename src/{misc => }/get-reaction-emoji.ts (100%)
 rename src/{common => }/notify.ts (90%)
 rename src/{misc => }/othello/ai/back.ts (99%)
 rename src/{misc => }/othello/ai/front.ts (99%)
 rename src/{misc => }/othello/ai/index.ts (100%)
 rename src/{misc => }/othello/core.ts (100%)
 rename src/{misc => }/othello/maps.ts (100%)
 rename src/{common => }/push-sw.ts (93%)
 rename src/{common => }/text/html.ts (100%)
 rename src/{common => }/text/parse/core/syntax-highlighter.ts (100%)
 rename src/{common => }/text/parse/elements/bold.ts (100%)
 rename src/{common => }/text/parse/elements/code.ts (100%)
 rename src/{common => }/text/parse/elements/emoji.ts (100%)
 rename src/{common => }/text/parse/elements/hashtag.ts (100%)
 rename src/{common => }/text/parse/elements/inline-code.ts (100%)
 rename src/{common => }/text/parse/elements/link.ts (100%)
 rename src/{common => }/text/parse/elements/mention.ts (83%)
 rename src/{common => }/text/parse/elements/quote.ts (100%)
 rename src/{common => }/text/parse/elements/url.ts (100%)
 rename src/{common => }/text/parse/index.ts (100%)
 rename src/{misc => }/user/get-acct.ts (100%)
 rename src/{misc => }/user/get-summary.ts (90%)
 rename src/{misc => }/user/parse-acct.ts (100%)

diff --git a/src/client/app/ch/tags/channel.tag b/src/client/app/ch/tags/channel.tag
index 70e494aed..0c139ba26 100644
--- a/src/client/app/ch/tags/channel.tag
+++ b/src/client/app/ch/tags/channel.tag
@@ -229,7 +229,7 @@
 
 	</style>
 	<script lang="typescript">
-		import getAcct from '../../../../misc/user/get-acct';
+		import getAcct from '../../../../user/get-acct';
 
 		this.post = this.opts.post;
 		this.form = this.opts.form;
diff --git a/src/client/app/common/scripts/compose-notification.ts b/src/client/app/common/scripts/compose-notification.ts
index 56fbcb94f..4030d61ac 100644
--- a/src/client/app/common/scripts/compose-notification.ts
+++ b/src/client/app/common/scripts/compose-notification.ts
@@ -1,5 +1,5 @@
-import getPostSummary from '../../../../misc/get-post-summary';
-import getReactionEmoji from '../../../../misc/get-reaction-emoji';
+import getPostSummary from '../../../../get-post-summary';
+import getReactionEmoji from '../../../../get-reaction-emoji';
 
 type Notification = {
 	title: string;
diff --git a/src/client/app/common/views/components/autocomplete.vue b/src/client/app/common/views/components/autocomplete.vue
index edba47058..7bcfc07e9 100644
--- a/src/client/app/common/views/components/autocomplete.vue
+++ b/src/client/app/common/views/components/autocomplete.vue
@@ -21,7 +21,7 @@
 import Vue from 'vue';
 import * as emojilib from 'emojilib';
 import contains from '../../../common/scripts/contains';
-import getAcct from '../../../../../misc/user/get-acct';
+import getAcct from '../../../../../user/get-acct';
 
 const lib = Object.entries(emojilib.lib).filter((x: any) => {
 	return x[1].category != 'flags';
diff --git a/src/client/app/common/views/components/messaging-room.message.vue b/src/client/app/common/views/components/messaging-room.message.vue
index cad6825f3..3de8321f8 100644
--- a/src/client/app/common/views/components/messaging-room.message.vue
+++ b/src/client/app/common/views/components/messaging-room.message.vue
@@ -34,8 +34,8 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getAcct from '../../../../../misc/user/get-acct';
-import parse from '../../../../../common/text/parse';
+import getAcct from '../../../../../user/get-acct';
+import parse from '../../../../../text/parse';
 
 export default Vue.extend({
 	props: {
diff --git a/src/client/app/common/views/components/messaging.vue b/src/client/app/common/views/components/messaging.vue
index f6709d02b..bde2b2b90 100644
--- a/src/client/app/common/views/components/messaging.vue
+++ b/src/client/app/common/views/components/messaging.vue
@@ -51,7 +51,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getAcct from '../../../../../misc/user/get-acct';
+import getAcct from '../../../../../user/get-acct';
 
 export default Vue.extend({
 	props: {
diff --git a/src/client/app/common/views/components/othello.game.vue b/src/client/app/common/views/components/othello.game.vue
index aa5798d71..b9d946de9 100644
--- a/src/client/app/common/views/components/othello.game.vue
+++ b/src/client/app/common/views/components/othello.game.vue
@@ -43,7 +43,7 @@
 <script lang="ts">
 import Vue from 'vue';
 import * as CRC32 from 'crc-32';
-import Othello, { Color } from '../../../../../misc/othello/core';
+import Othello, { Color } from '../../../../../othello/core';
 import { url } from '../../../config';
 
 export default Vue.extend({
diff --git a/src/client/app/common/views/components/othello.room.vue b/src/client/app/common/views/components/othello.room.vue
index eb1d3a0c6..86368b3cc 100644
--- a/src/client/app/common/views/components/othello.room.vue
+++ b/src/client/app/common/views/components/othello.room.vue
@@ -94,7 +94,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import * as maps from '../../../../../misc/othello/maps';
+import * as maps from '../../../../../othello/maps';
 
 export default Vue.extend({
 	props: ['game', 'connection'],
diff --git a/src/client/app/common/views/components/post-html.ts b/src/client/app/common/views/components/post-html.ts
index 5670ce036..4018a966e 100644
--- a/src/client/app/common/views/components/post-html.ts
+++ b/src/client/app/common/views/components/post-html.ts
@@ -1,7 +1,7 @@
 import Vue from 'vue';
 import * as emojilib from 'emojilib';
-import parse from '../../../../../common/text/parse';
-import getAcct from '../../../../../misc/user/get-acct';
+import parse from '../../../../../text/parse';
+import getAcct from '../../../../../user/get-acct';
 import { url } from '../../../config';
 import MkUrl from './url.vue';
 
diff --git a/src/client/app/common/views/components/welcome-timeline.vue b/src/client/app/common/views/components/welcome-timeline.vue
index 036a77b1c..94b7f5889 100644
--- a/src/client/app/common/views/components/welcome-timeline.vue
+++ b/src/client/app/common/views/components/welcome-timeline.vue
@@ -24,7 +24,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getAcct from '../../../../../misc/user/get-acct';
+import getAcct from '../../../../../user/get-acct';
 
 export default Vue.extend({
 	data() {
diff --git a/src/client/app/desktop/views/components/friends-maker.vue b/src/client/app/desktop/views/components/friends-maker.vue
index 68ecc6ad4..bfa7503d2 100644
--- a/src/client/app/desktop/views/components/friends-maker.vue
+++ b/src/client/app/desktop/views/components/friends-maker.vue
@@ -22,7 +22,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getAcct from '../../../../../misc/user/get-acct';
+import getAcct from '../../../../../user/get-acct';
 
 export default Vue.extend({
 	data() {
diff --git a/src/client/app/desktop/views/components/messaging-room-window.vue b/src/client/app/desktop/views/components/messaging-room-window.vue
index 610642204..88eb28578 100644
--- a/src/client/app/desktop/views/components/messaging-room-window.vue
+++ b/src/client/app/desktop/views/components/messaging-room-window.vue
@@ -8,7 +8,7 @@
 <script lang="ts">
 import Vue from 'vue';
 import { url } from '../../../config';
-import getAcct from '../../../../../misc/user/get-acct';
+import getAcct from '../../../../../user/get-acct';
 
 export default Vue.extend({
 	props: ['user'],
diff --git a/src/client/app/desktop/views/components/notifications.vue b/src/client/app/desktop/views/components/notifications.vue
index 79b16d048..8c4102494 100644
--- a/src/client/app/desktop/views/components/notifications.vue
+++ b/src/client/app/desktop/views/components/notifications.vue
@@ -102,8 +102,8 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getAcct from '../../../../../misc/user/get-acct';
-import getPostSummary from '../../../../../misc/get-post-summary';
+import getAcct from '../../../../../user/get-acct';
+import getPostSummary from '../../../../../get-post-summary';
 
 export default Vue.extend({
 	data() {
diff --git a/src/client/app/desktop/views/components/post-detail.sub.vue b/src/client/app/desktop/views/components/post-detail.sub.vue
index 6fc569ada..2719fee9d 100644
--- a/src/client/app/desktop/views/components/post-detail.sub.vue
+++ b/src/client/app/desktop/views/components/post-detail.sub.vue
@@ -28,7 +28,7 @@
 <script lang="ts">
 import Vue from 'vue';
 import dateStringify from '../../../common/scripts/date-stringify';
-import getAcct from '../../../../../misc/user/get-acct';
+import getAcct from '../../../../../user/get-acct';
 
 export default Vue.extend({
 	props: ['post'],
diff --git a/src/client/app/desktop/views/components/post-detail.vue b/src/client/app/desktop/views/components/post-detail.vue
index 309c88e70..5911a267f 100644
--- a/src/client/app/desktop/views/components/post-detail.vue
+++ b/src/client/app/desktop/views/components/post-detail.vue
@@ -78,8 +78,8 @@
 <script lang="ts">
 import Vue from 'vue';
 import dateStringify from '../../../common/scripts/date-stringify';
-import getAcct from '../../../../../misc/user/get-acct';
-import parse from '../../../../../common/text/parse';
+import getAcct from '../../../../../user/get-acct';
+import parse from '../../../../../text/parse';
 
 import MkPostFormWindow from './post-form-window.vue';
 import MkRepostFormWindow from './repost-form-window.vue';
diff --git a/src/client/app/desktop/views/components/post-preview.vue b/src/client/app/desktop/views/components/post-preview.vue
index eb62e4a63..e27f0b4cc 100644
--- a/src/client/app/desktop/views/components/post-preview.vue
+++ b/src/client/app/desktop/views/components/post-preview.vue
@@ -21,7 +21,7 @@
 <script lang="ts">
 import Vue from 'vue';
 import dateStringify from '../../../common/scripts/date-stringify';
-import getAcct from '../../../../../misc/user/get-acct';
+import getAcct from '../../../../../user/get-acct';
 
 export default Vue.extend({
 	props: ['post'],
diff --git a/src/client/app/desktop/views/components/posts.post.sub.vue b/src/client/app/desktop/views/components/posts.post.sub.vue
index d3af0fef6..16f5c4bee 100644
--- a/src/client/app/desktop/views/components/posts.post.sub.vue
+++ b/src/client/app/desktop/views/components/posts.post.sub.vue
@@ -21,7 +21,7 @@
 <script lang="ts">
 import Vue from 'vue';
 import dateStringify from '../../../common/scripts/date-stringify';
-import getAcct from '../../../../../misc/user/get-acct';
+import getAcct from '../../../../../user/get-acct';
 
 export default Vue.extend({
 	props: ['post'],
diff --git a/src/client/app/desktop/views/components/posts.post.vue b/src/client/app/desktop/views/components/posts.post.vue
index 1325e3e4f..b32ebe944 100644
--- a/src/client/app/desktop/views/components/posts.post.vue
+++ b/src/client/app/desktop/views/components/posts.post.vue
@@ -85,8 +85,8 @@
 <script lang="ts">
 import Vue from 'vue';
 import dateStringify from '../../../common/scripts/date-stringify';
-import getAcct from '../../../../../misc/user/get-acct';
-import parse from '../../../../../common/text/parse';
+import getAcct from '../../../../../user/get-acct';
+import parse from '../../../../../text/parse';
 
 import MkPostFormWindow from './post-form-window.vue';
 import MkRepostFormWindow from './repost-form-window.vue';
diff --git a/src/client/app/desktop/views/components/settings.mute.vue b/src/client/app/desktop/views/components/settings.mute.vue
index ce8f4b273..5c8c86222 100644
--- a/src/client/app/desktop/views/components/settings.mute.vue
+++ b/src/client/app/desktop/views/components/settings.mute.vue
@@ -13,7 +13,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getAcct from '../../../../../misc/user/get-acct';
+import getAcct from '../../../../../user/get-acct';
 
 export default Vue.extend({
 	data() {
diff --git a/src/client/app/desktop/views/components/user-preview.vue b/src/client/app/desktop/views/components/user-preview.vue
index 595926a81..cad7d455f 100644
--- a/src/client/app/desktop/views/components/user-preview.vue
+++ b/src/client/app/desktop/views/components/user-preview.vue
@@ -29,8 +29,8 @@
 <script lang="ts">
 import Vue from 'vue';
 import * as anime from 'animejs';
-import getAcct from '../../../../../misc/user/get-acct';
-import parseAcct from '../../../../../misc/user/parse-acct';
+import getAcct from '../../../../../user/get-acct';
+import parseAcct from '../../../../../user/parse-acct';
 
 export default Vue.extend({
 	props: {
diff --git a/src/client/app/desktop/views/components/users-list.item.vue b/src/client/app/desktop/views/components/users-list.item.vue
index 1c40c247b..a25d68c44 100644
--- a/src/client/app/desktop/views/components/users-list.item.vue
+++ b/src/client/app/desktop/views/components/users-list.item.vue
@@ -19,7 +19,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getAcct from '../../../../../misc/user/get-acct';
+import getAcct from '../../../../../user/get-acct';
 
 export default Vue.extend({
 	props: ['user'],
diff --git a/src/client/app/desktop/views/pages/home.vue b/src/client/app/desktop/views/pages/home.vue
index fa7c19510..ad9e2bc9d 100644
--- a/src/client/app/desktop/views/pages/home.vue
+++ b/src/client/app/desktop/views/pages/home.vue
@@ -7,7 +7,7 @@
 <script lang="ts">
 import Vue from 'vue';
 import Progress from '../../../common/scripts/loading';
-import getPostSummary from '../../../../../misc/get-post-summary';
+import getPostSummary from '../../../../../get-post-summary';
 
 export default Vue.extend({
 	props: {
diff --git a/src/client/app/desktop/views/pages/messaging-room.vue b/src/client/app/desktop/views/pages/messaging-room.vue
index 244b0c904..b3d0ff149 100644
--- a/src/client/app/desktop/views/pages/messaging-room.vue
+++ b/src/client/app/desktop/views/pages/messaging-room.vue
@@ -7,7 +7,7 @@
 <script lang="ts">
 import Vue from 'vue';
 import Progress from '../../../common/scripts/loading';
-import parseAcct from '../../../../../misc/user/parse-acct';
+import parseAcct from '../../../../../user/parse-acct';
 
 export default Vue.extend({
 	data() {
diff --git a/src/client/app/desktop/views/pages/user/user.followers-you-know.vue b/src/client/app/desktop/views/pages/user/user.followers-you-know.vue
index e898b62a0..a8bc67d3a 100644
--- a/src/client/app/desktop/views/pages/user/user.followers-you-know.vue
+++ b/src/client/app/desktop/views/pages/user/user.followers-you-know.vue
@@ -13,7 +13,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getAcct from '../../../../../../misc/user/get-acct';
+import getAcct from '../../../../../../user/get-acct';
 
 export default Vue.extend({
 	props: ['user'],
diff --git a/src/client/app/desktop/views/pages/user/user.friends.vue b/src/client/app/desktop/views/pages/user/user.friends.vue
index b13eb528a..6710e3793 100644
--- a/src/client/app/desktop/views/pages/user/user.friends.vue
+++ b/src/client/app/desktop/views/pages/user/user.friends.vue
@@ -20,7 +20,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getAcct from '../../../../../../misc/user/get-acct';
+import getAcct from '../../../../../../user/get-acct';
 
 export default Vue.extend({
 	props: ['user'],
diff --git a/src/client/app/desktop/views/pages/user/user.header.vue b/src/client/app/desktop/views/pages/user/user.header.vue
index 32e425f86..7b051224d 100644
--- a/src/client/app/desktop/views/pages/user/user.header.vue
+++ b/src/client/app/desktop/views/pages/user/user.header.vue
@@ -22,7 +22,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getAcct from '../../../../../../misc/user/get-acct';
+import getAcct from '../../../../../../user/get-acct';
 
 export default Vue.extend({
 	props: ['user'],
diff --git a/src/client/app/desktop/views/pages/user/user.vue b/src/client/app/desktop/views/pages/user/user.vue
index 6e68171a6..54d675bbd 100644
--- a/src/client/app/desktop/views/pages/user/user.vue
+++ b/src/client/app/desktop/views/pages/user/user.vue
@@ -9,7 +9,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import parseAcct from '../../../../../../misc/user/parse-acct';
+import parseAcct from '../../../../../../user/parse-acct';
 import Progress from '../../../../common/scripts/loading';
 import XHeader from './user.header.vue';
 import XHome from './user.home.vue';
diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue
index 93bb59765..1e1c49019 100644
--- a/src/client/app/desktop/views/pages/welcome.vue
+++ b/src/client/app/desktop/views/pages/welcome.vue
@@ -43,7 +43,7 @@
 <script lang="ts">
 import Vue from 'vue';
 import { docsUrl, copyright, lang } from '../../../config';
-import getAcct from '../../../../../misc/user/get-acct';
+import getAcct from '../../../../../user/get-acct';
 
 const shares = [
 	'Everything!',
diff --git a/src/client/app/desktop/views/widgets/channel.channel.post.vue b/src/client/app/desktop/views/widgets/channel.channel.post.vue
index 255d9a5e6..587371a76 100644
--- a/src/client/app/desktop/views/widgets/channel.channel.post.vue
+++ b/src/client/app/desktop/views/widgets/channel.channel.post.vue
@@ -19,7 +19,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getAcct from '../../../../../misc/user/get-acct';
+import getAcct from '../../../../../user/get-acct';
 
 export default Vue.extend({
 	props: ['post'],
diff --git a/src/client/app/desktop/views/widgets/polls.vue b/src/client/app/desktop/views/widgets/polls.vue
index fd242a04b..ad7101e0d 100644
--- a/src/client/app/desktop/views/widgets/polls.vue
+++ b/src/client/app/desktop/views/widgets/polls.vue
@@ -16,7 +16,7 @@
 
 <script lang="ts">
 import define from '../../../common/define-widget';
-import getAcct from '../../../../../misc/user/get-acct';
+import getAcct from '../../../../../user/get-acct';
 
 export default define({
 	name: 'polls',
diff --git a/src/client/app/desktop/views/widgets/trends.vue b/src/client/app/desktop/views/widgets/trends.vue
index 6b22c123b..be62faa42 100644
--- a/src/client/app/desktop/views/widgets/trends.vue
+++ b/src/client/app/desktop/views/widgets/trends.vue
@@ -15,7 +15,7 @@
 
 <script lang="ts">
 import define from '../../../common/define-widget';
-import getAcct from '../../../../../misc/user/get-acct';
+import getAcct from '../../../../../user/get-acct';
 
 export default define({
 	name: 'trends',
diff --git a/src/client/app/desktop/views/widgets/users.vue b/src/client/app/desktop/views/widgets/users.vue
index 102739bd0..c4643f485 100644
--- a/src/client/app/desktop/views/widgets/users.vue
+++ b/src/client/app/desktop/views/widgets/users.vue
@@ -23,7 +23,7 @@
 
 <script lang="ts">
 import define from '../../../common/define-widget';
-import getAcct from '../../../../../misc/user/get-acct';
+import getAcct from '../../../../../user/get-acct';
 
 const limit = 3;
 
diff --git a/src/client/app/mobile/api/post.ts b/src/client/app/mobile/api/post.ts
index 8090bbef2..6580cbf4b 100644
--- a/src/client/app/mobile/api/post.ts
+++ b/src/client/app/mobile/api/post.ts
@@ -1,6 +1,6 @@
 import PostForm from '../views/components/post-form.vue';
 //import RepostForm from '../views/components/repost-form.vue';
-import getPostSummary from '../../../../misc/get-post-summary';
+import getPostSummary from '../../../../get-post-summary';
 
 export default (os) => (opts) => {
 	const o = opts || {};
diff --git a/src/client/app/mobile/views/components/notification-preview.vue b/src/client/app/mobile/views/components/notification-preview.vue
index 2a06d399c..e7e1f75a8 100644
--- a/src/client/app/mobile/views/components/notification-preview.vue
+++ b/src/client/app/mobile/views/components/notification-preview.vue
@@ -59,7 +59,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getPostSummary from '../../../../../misc/get-post-summary';
+import getPostSummary from '../../../../../get-post-summary';
 
 export default Vue.extend({
 	props: ['notification'],
diff --git a/src/client/app/mobile/views/components/notification.vue b/src/client/app/mobile/views/components/notification.vue
index 93b1e8416..d92b01944 100644
--- a/src/client/app/mobile/views/components/notification.vue
+++ b/src/client/app/mobile/views/components/notification.vue
@@ -78,8 +78,8 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getPostSummary from '../../../../../misc/get-post-summary';
-import getAcct from '../../../../../misc/user/get-acct';
+import getPostSummary from '../../../../../get-post-summary';
+import getAcct from '../../../../../user/get-acct';
 
 export default Vue.extend({
 	props: ['notification'],
diff --git a/src/client/app/mobile/views/components/post-card.vue b/src/client/app/mobile/views/components/post-card.vue
index 3f5beb9e0..893e4c307 100644
--- a/src/client/app/mobile/views/components/post-card.vue
+++ b/src/client/app/mobile/views/components/post-card.vue
@@ -14,8 +14,8 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import summary from '../../../../../misc/get-post-summary';
-import getAcct from '../../../../../misc/user/get-acct';
+import summary from '../../../../../get-post-summary';
+import getAcct from '../../../../../user/get-acct';
 
 export default Vue.extend({
 	props: ['post'],
diff --git a/src/client/app/mobile/views/components/post-detail.sub.vue b/src/client/app/mobile/views/components/post-detail.sub.vue
index 1fca0881d..c8e06e26f 100644
--- a/src/client/app/mobile/views/components/post-detail.sub.vue
+++ b/src/client/app/mobile/views/components/post-detail.sub.vue
@@ -20,7 +20,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getAcct from '../../../../../misc/user/get-acct';
+import getAcct from '../../../../../user/get-acct';
 
 export default Vue.extend({
 	props: ['post'],
diff --git a/src/client/app/mobile/views/components/post-detail.vue b/src/client/app/mobile/views/components/post-detail.vue
index a8ebb3b01..4a293562e 100644
--- a/src/client/app/mobile/views/components/post-detail.vue
+++ b/src/client/app/mobile/views/components/post-detail.vue
@@ -80,8 +80,8 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getAcct from '../../../../../misc/user/get-acct';
-import parse from '../../../../../common/text/parse';
+import getAcct from '../../../../../user/get-acct';
+import parse from '../../../../../text/parse';
 
 import MkPostMenu from '../../../common/views/components/post-menu.vue';
 import MkReactionPicker from '../../../common/views/components/reaction-picker.vue';
diff --git a/src/client/app/mobile/views/components/post-preview.vue b/src/client/app/mobile/views/components/post-preview.vue
index 05dd4a004..b6916edb4 100644
--- a/src/client/app/mobile/views/components/post-preview.vue
+++ b/src/client/app/mobile/views/components/post-preview.vue
@@ -20,7 +20,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getAcct from '../../../../../misc/user/get-acct';
+import getAcct from '../../../../../user/get-acct';
 
 export default Vue.extend({
 	props: ['post'],
diff --git a/src/client/app/mobile/views/components/post.sub.vue b/src/client/app/mobile/views/components/post.sub.vue
index cbd2fad88..7f132b0a4 100644
--- a/src/client/app/mobile/views/components/post.sub.vue
+++ b/src/client/app/mobile/views/components/post.sub.vue
@@ -20,7 +20,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getAcct from '../../../../../misc/user/get-acct';
+import getAcct from '../../../../../user/get-acct';
 
 export default Vue.extend({
 	props: ['post'],
diff --git a/src/client/app/mobile/views/components/post.vue b/src/client/app/mobile/views/components/post.vue
index 6cf24ed6a..7cfb97425 100644
--- a/src/client/app/mobile/views/components/post.vue
+++ b/src/client/app/mobile/views/components/post.vue
@@ -77,8 +77,8 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getAcct from '../../../../../misc/user/get-acct';
-import parse from '../../../../../common/text/parse';
+import getAcct from '../../../../../user/get-acct';
+import parse from '../../../../../text/parse';
 
 import MkPostMenu from '../../../common/views/components/post-menu.vue';
 import MkReactionPicker from '../../../common/views/components/reaction-picker.vue';
diff --git a/src/client/app/mobile/views/components/user-card.vue b/src/client/app/mobile/views/components/user-card.vue
index fb1b12ce5..542ad2031 100644
--- a/src/client/app/mobile/views/components/user-card.vue
+++ b/src/client/app/mobile/views/components/user-card.vue
@@ -13,7 +13,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getAcct from '../../../../../misc/user/get-acct';
+import getAcct from '../../../../../user/get-acct';
 
 export default Vue.extend({
 	props: ['user'],
diff --git a/src/client/app/mobile/views/components/user-preview.vue b/src/client/app/mobile/views/components/user-preview.vue
index 4bb830381..51c32b9fd 100644
--- a/src/client/app/mobile/views/components/user-preview.vue
+++ b/src/client/app/mobile/views/components/user-preview.vue
@@ -17,7 +17,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getAcct from '../../../../../misc/user/get-acct';
+import getAcct from '../../../../../user/get-acct';
 
 export default Vue.extend({
 	props: ['user'],
diff --git a/src/client/app/mobile/views/pages/followers.vue b/src/client/app/mobile/views/pages/followers.vue
index 28e866efb..2e984508d 100644
--- a/src/client/app/mobile/views/pages/followers.vue
+++ b/src/client/app/mobile/views/pages/followers.vue
@@ -19,7 +19,7 @@
 <script lang="ts">
 import Vue from 'vue';
 import Progress from '../../../common/scripts/loading';
-import parseAcct from '../../../../../misc/user/parse-acct';
+import parseAcct from '../../../../../user/parse-acct';
 
 export default Vue.extend({
 	data() {
diff --git a/src/client/app/mobile/views/pages/following.vue b/src/client/app/mobile/views/pages/following.vue
index 7ee3b8628..f5c7223a1 100644
--- a/src/client/app/mobile/views/pages/following.vue
+++ b/src/client/app/mobile/views/pages/following.vue
@@ -19,7 +19,7 @@
 <script lang="ts">
 import Vue from 'vue';
 import Progress from '../../../common/scripts/loading';
-import parseAcct from '../../../../../misc/user/parse-acct';
+import parseAcct from '../../../../../user/parse-acct';
 
 export default Vue.extend({
 	data() {
diff --git a/src/client/app/mobile/views/pages/home.vue b/src/client/app/mobile/views/pages/home.vue
index f76fdbe19..b2edf5956 100644
--- a/src/client/app/mobile/views/pages/home.vue
+++ b/src/client/app/mobile/views/pages/home.vue
@@ -64,7 +64,7 @@ import Vue from 'vue';
 import * as XDraggable from 'vuedraggable';
 import * as uuid from 'uuid';
 import Progress from '../../../common/scripts/loading';
-import getPostSummary from '../../../../../misc/get-post-summary';
+import getPostSummary from '../../../../../get-post-summary';
 
 export default Vue.extend({
 	components: {
diff --git a/src/client/app/mobile/views/pages/messaging-room.vue b/src/client/app/mobile/views/pages/messaging-room.vue
index 400f5016e..14f12a99b 100644
--- a/src/client/app/mobile/views/pages/messaging-room.vue
+++ b/src/client/app/mobile/views/pages/messaging-room.vue
@@ -10,7 +10,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import parseAcct from '../../../../../misc/user/parse-acct';
+import parseAcct from '../../../../../user/parse-acct';
 
 export default Vue.extend({
 	data() {
diff --git a/src/client/app/mobile/views/pages/messaging.vue b/src/client/app/mobile/views/pages/messaging.vue
index 7ded67cdf..f3f6f9f9b 100644
--- a/src/client/app/mobile/views/pages/messaging.vue
+++ b/src/client/app/mobile/views/pages/messaging.vue
@@ -7,7 +7,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getAcct from '../../../../../misc/user/get-acct';
+import getAcct from '../../../../../user/get-acct';
 
 export default Vue.extend({
 	mounted() {
diff --git a/src/client/app/mobile/views/pages/user.vue b/src/client/app/mobile/views/pages/user.vue
index 01eb408e6..2d8f9f8ec 100644
--- a/src/client/app/mobile/views/pages/user.vue
+++ b/src/client/app/mobile/views/pages/user.vue
@@ -60,8 +60,8 @@
 <script lang="ts">
 import Vue from 'vue';
 import * as age from 's-age';
-import getAcct from '../../../../../misc/user/get-acct';
-import getAcct from '../../../../../misc/user/parse-acct';
+import getAcct from '../../../../../user/get-acct';
+import getAcct from '../../../../../user/parse-acct';
 import Progress from '../../../common/scripts/loading';
 import XHome from './user/home.vue';
 
diff --git a/src/client/app/mobile/views/pages/user/home.followers-you-know.vue b/src/client/app/mobile/views/pages/user/home.followers-you-know.vue
index 8dc4fbb85..04d8538f7 100644
--- a/src/client/app/mobile/views/pages/user/home.followers-you-know.vue
+++ b/src/client/app/mobile/views/pages/user/home.followers-you-know.vue
@@ -12,7 +12,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getAcct from '../../../../../../misc/user/get-acct';
+import getAcct from '../../../../../../user/get-acct';
 
 export default Vue.extend({
 	props: ['user'],
diff --git a/src/client/app/mobile/views/pages/user/home.photos.vue b/src/client/app/mobile/views/pages/user/home.photos.vue
index cc3527037..491660711 100644
--- a/src/client/app/mobile/views/pages/user/home.photos.vue
+++ b/src/client/app/mobile/views/pages/user/home.photos.vue
@@ -14,7 +14,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getAcct from '../../../../../../misc/user/get-acct';
+import getAcct from '../../../../../../user/get-acct';
 
 export default Vue.extend({
 	props: ['user'],
diff --git a/src/common/drive/add-file.ts b/src/drive/add-file.ts
similarity index 96%
rename from src/common/drive/add-file.ts
rename to src/drive/add-file.ts
index af85a23d2..f356af00d 100644
--- a/src/common/drive/add-file.ts
+++ b/src/drive/add-file.ts
@@ -10,12 +10,12 @@ import * as debug from 'debug';
 import fileType = require('file-type');
 import prominence = require('prominence');
 
-import DriveFile, { getGridFSBucket } from '../../models/drive-file';
-import DriveFolder from '../../models/drive-folder';
-import { pack } from '../../models/drive-file';
+import DriveFile, { getGridFSBucket } from '../models/drive-file';
+import DriveFolder from '../models/drive-folder';
+import { pack } from '../models/drive-file';
 import event, { publishDriveStream } from '../event';
-import getAcct from '../../misc/user/get-acct';
-import config from '../../conf';
+import getAcct from '../user/get-acct';
+import config from '../conf';
 
 const gm = _gm.subClass({
 	imageMagick: true
@@ -290,7 +290,7 @@ export default (user: any, file: string | stream.Readable, ...args) => new Promi
 
 			// Register to search database
 			if (config.elasticsearch.enable) {
-				const es = require('../../db/elasticsearch');
+				const es = require('../db/elasticsearch');
 				es.index({
 					index: 'misskey',
 					type: 'drive_file',
diff --git a/src/common/drive/upload-from-url.ts b/src/drive/upload-from-url.ts
similarity index 93%
rename from src/common/drive/upload-from-url.ts
rename to src/drive/upload-from-url.ts
index 5dd969593..7ff16e9e4 100644
--- a/src/common/drive/upload-from-url.ts
+++ b/src/drive/upload-from-url.ts
@@ -1,5 +1,5 @@
 import * as URL from 'url';
-import { IDriveFile, validateFileName } from '../../models/drive-file';
+import { IDriveFile, validateFileName } from '../models/drive-file';
 import create from './add-file';
 import * as debug from 'debug';
 import * as tmp from 'tmp';
diff --git a/src/common/event.ts b/src/event.ts
similarity index 98%
rename from src/common/event.ts
rename to src/event.ts
index 53520f11c..df79f0c90 100644
--- a/src/common/event.ts
+++ b/src/event.ts
@@ -1,7 +1,7 @@
 import * as mongo from 'mongodb';
 import * as redis from 'redis';
 import swPush from './push-sw';
-import config from '../conf';
+import config from './conf';
 
 type ID = string | mongo.ObjectID;
 
diff --git a/src/misc/get-notification-summary.ts b/src/get-notification-summary.ts
similarity index 100%
rename from src/misc/get-notification-summary.ts
rename to src/get-notification-summary.ts
diff --git a/src/misc/get-post-summary.ts b/src/get-post-summary.ts
similarity index 100%
rename from src/misc/get-post-summary.ts
rename to src/get-post-summary.ts
diff --git a/src/misc/get-reaction-emoji.ts b/src/get-reaction-emoji.ts
similarity index 100%
rename from src/misc/get-reaction-emoji.ts
rename to src/get-reaction-emoji.ts
diff --git a/src/common/notify.ts b/src/notify.ts
similarity index 90%
rename from src/common/notify.ts
rename to src/notify.ts
index fc65820d3..228317b88 100644
--- a/src/common/notify.ts
+++ b/src/notify.ts
@@ -1,8 +1,8 @@
 import * as mongo from 'mongodb';
-import Notification from '../models/notification';
-import Mute from '../models/mute';
+import Notification from './models/notification';
+import Mute from './models/mute';
 import event from './event';
-import { pack } from '../models/notification';
+import { pack } from './models/notification';
 
 export default (
 	notifiee: mongo.ObjectID,
diff --git a/src/misc/othello/ai/back.ts b/src/othello/ai/back.ts
similarity index 99%
rename from src/misc/othello/ai/back.ts
rename to src/othello/ai/back.ts
index 0950adaa9..a67f6fe83 100644
--- a/src/misc/othello/ai/back.ts
+++ b/src/othello/ai/back.ts
@@ -8,7 +8,7 @@
 
 import * as request from 'request-promise-native';
 import Othello, { Color } from '../core';
-import conf from '../../../conf';
+import conf from '../../conf';
 
 let game;
 let form;
diff --git a/src/misc/othello/ai/front.ts b/src/othello/ai/front.ts
similarity index 99%
rename from src/misc/othello/ai/front.ts
rename to src/othello/ai/front.ts
index e5496132f..3414d6434 100644
--- a/src/misc/othello/ai/front.ts
+++ b/src/othello/ai/front.ts
@@ -10,7 +10,7 @@ import * as childProcess from 'child_process';
 const WebSocket = require('ws');
 import * as ReconnectingWebSocket from 'reconnecting-websocket';
 import * as request from 'request-promise-native';
-import conf from '../../../conf';
+import conf from '../../conf';
 
 // 設定 ////////////////////////////////////////////////////////
 
diff --git a/src/misc/othello/ai/index.ts b/src/othello/ai/index.ts
similarity index 100%
rename from src/misc/othello/ai/index.ts
rename to src/othello/ai/index.ts
diff --git a/src/misc/othello/core.ts b/src/othello/core.ts
similarity index 100%
rename from src/misc/othello/core.ts
rename to src/othello/core.ts
diff --git a/src/misc/othello/maps.ts b/src/othello/maps.ts
similarity index 100%
rename from src/misc/othello/maps.ts
rename to src/othello/maps.ts
diff --git a/src/processor/http/follow.ts b/src/processor/http/follow.ts
index 4804657fd..e81b410cb 100644
--- a/src/processor/http/follow.ts
+++ b/src/processor/http/follow.ts
@@ -3,8 +3,8 @@ import { sign } from 'http-signature';
 import { URL } from 'url';
 import User, { isLocalUser, pack as packUser, ILocalUser } from '../../models/user';
 import Following from '../../models/following';
-import event from '../../common/event';
-import notify from '../../common/notify';
+import event from '../../event';
+import notify from '../../notify';
 import context from '../../remote/activitypub/renderer/context';
 import render from '../../remote/activitypub/renderer/follow';
 import config from '../../conf';
diff --git a/src/common/push-sw.ts b/src/push-sw.ts
similarity index 93%
rename from src/common/push-sw.ts
rename to src/push-sw.ts
index 44c328e83..5b5ec5207 100644
--- a/src/common/push-sw.ts
+++ b/src/push-sw.ts
@@ -1,7 +1,7 @@
 const push = require('web-push');
 import * as mongo from 'mongodb';
-import Subscription from '../models/sw-subscription';
-import config from '../conf';
+import Subscription from './models/sw-subscription';
+import config from './conf';
 
 if (config.sw) {
 	// アプリケーションの連絡先と、サーバーサイドの鍵ペアの情報を登録
diff --git a/src/remote/activitypub/create.ts b/src/remote/activitypub/create.ts
index e610232f5..6d135685e 100644
--- a/src/remote/activitypub/create.ts
+++ b/src/remote/activitypub/create.ts
@@ -2,7 +2,7 @@ import { JSDOM } from 'jsdom';
 import config from '../../conf';
 import Post from '../../models/post';
 import RemoteUserObject, { IRemoteUserObject } from '../../models/remote-user-object';
-import uploadFromUrl from '../../common/drive/upload-from-url';
+import uploadFromUrl from '../../drive/upload-from-url';
 import Resolver from './resolver';
 const createDOMPurify = require('dompurify');
 
diff --git a/src/server/activitypub/inbox.ts b/src/server/activitypub/inbox.ts
index 31a47e276..865797fae 100644
--- a/src/server/activitypub/inbox.ts
+++ b/src/server/activitypub/inbox.ts
@@ -3,7 +3,7 @@ import * as express from 'express';
 import { parseRequest, verifySignature } from 'http-signature';
 import User, { IRemoteUser } from '../../models/user';
 import queue from '../../queue';
-import parseAcct from '../../misc/user/parse-acct';
+import parseAcct from '../../user/parse-acct';
 
 const app = express();
 app.disable('x-powered-by');
diff --git a/src/server/activitypub/post.ts b/src/server/activitypub/post.ts
index ecbf9671f..2962a9b96 100644
--- a/src/server/activitypub/post.ts
+++ b/src/server/activitypub/post.ts
@@ -1,7 +1,7 @@
 import * as express from 'express';
 import context from '../../remote/activitypub/renderer/context';
 import render from '../../remote/activitypub/renderer/note';
-import parseAcct from '../../misc/user/parse-acct';
+import parseAcct from '../../user/parse-acct';
 import Post from '../../models/post';
 import User from '../../models/user';
 
diff --git a/src/server/activitypub/with-user.ts b/src/server/activitypub/with-user.ts
index 18f2e50ff..b4090786b 100644
--- a/src/server/activitypub/with-user.ts
+++ b/src/server/activitypub/with-user.ts
@@ -1,4 +1,4 @@
-import parseAcct from '../../misc/user/parse-acct';
+import parseAcct from '../../user/parse-acct';
 import User from '../../models/user';
 
 export default (redirect, respond) => async (req, res, next) => {
diff --git a/src/server/api/bot/core.ts b/src/server/api/bot/core.ts
index 0faf9b4e4..3beec33d1 100644
--- a/src/server/api/bot/core.ts
+++ b/src/server/api/bot/core.ts
@@ -3,10 +3,10 @@ import * as bcrypt from 'bcryptjs';
 
 import User, { IUser, init as initUser, ILocalUser } from '../../../models/user';
 
-import getPostSummary from '../../../misc/get-post-summary';
-import getUserSummary from '../../../misc/user/get-summary';
-import parseAcct from '../../../misc/user/parse-acct';
-import getNotificationSummary from '../../../misc/get-notification-summary';
+import getPostSummary from '../../../get-post-summary';
+import getUserSummary from '../../../user/get-summary';
+import parseAcct from '../../../user/parse-acct';
+import getNotificationSummary from '../../../get-notification-summary';
 
 const hmm = [
 	'?',
diff --git a/src/server/api/bot/interfaces/line.ts b/src/server/api/bot/interfaces/line.ts
index a6e70a138..847b13aa7 100644
--- a/src/server/api/bot/interfaces/line.ts
+++ b/src/server/api/bot/interfaces/line.ts
@@ -7,9 +7,9 @@ import config from '../../../../conf';
 import BotCore from '../core';
 import _redis from '../../../../db/redis';
 import prominence = require('prominence');
-import getAcct from '../../../../misc/user/get-acct';
-import parseAcct from '../../../../misc/user/parse-acct';
-import getPostSummary from '../../../../misc/get-post-summary';
+import getAcct from '../../../../user/get-acct';
+import parseAcct from '../../../../user/parse-acct';
+import getPostSummary from '../../../../get-post-summary';
 
 const redis = prominence(_redis);
 
diff --git a/src/server/api/common/read-messaging-message.ts b/src/server/api/common/read-messaging-message.ts
index 127ea1865..755cf1f50 100644
--- a/src/server/api/common/read-messaging-message.ts
+++ b/src/server/api/common/read-messaging-message.ts
@@ -1,9 +1,9 @@
 import * as mongo from 'mongodb';
 import Message from '../../../models/messaging-message';
 import { IMessagingMessage as IMessage } from '../../../models/messaging-message';
-import publishUserStream from '../../../common/event';
-import { publishMessagingStream } from '../../../common/event';
-import { publishMessagingIndexStream } from '../../../common/event';
+import publishUserStream from '../../../event';
+import { publishMessagingStream } from '../../../event';
+import { publishMessagingIndexStream } from '../../../event';
 
 /**
  * Mark as read message(s)
diff --git a/src/server/api/common/read-notification.ts b/src/server/api/common/read-notification.ts
index 9b2012182..b51c0ca00 100644
--- a/src/server/api/common/read-notification.ts
+++ b/src/server/api/common/read-notification.ts
@@ -1,6 +1,6 @@
 import * as mongo from 'mongodb';
 import { default as Notification, INotification } from '../../../models/notification';
-import publishUserStream from '../../../common/event';
+import publishUserStream from '../../../event';
 
 /**
  * Mark as read notification(s)
diff --git a/src/server/api/endpoints/drive/files/create.ts b/src/server/api/endpoints/drive/files/create.ts
index cf4e35cd1..10ced1d8b 100644
--- a/src/server/api/endpoints/drive/files/create.ts
+++ b/src/server/api/endpoints/drive/files/create.ts
@@ -3,7 +3,7 @@
  */
 import $ from 'cafy';
 import { validateFileName, pack } from '../../../../../models/drive-file';
-import create from '../../../../../common/drive/add-file';
+import create from '../../../../../drive/add-file';
 
 /**
  * Create a file
diff --git a/src/server/api/endpoints/drive/files/update.ts b/src/server/api/endpoints/drive/files/update.ts
index 5d0b915f9..85bd2110f 100644
--- a/src/server/api/endpoints/drive/files/update.ts
+++ b/src/server/api/endpoints/drive/files/update.ts
@@ -4,7 +4,7 @@
 import $ from 'cafy';
 import DriveFolder from '../../../../../models/drive-folder';
 import DriveFile, { validateFileName, pack } from '../../../../../models/drive-file';
-import { publishDriveStream } from '../../../../../common/event';
+import { publishDriveStream } from '../../../../../event';
 
 /**
  * Update a file
diff --git a/src/server/api/endpoints/drive/files/upload_from_url.ts b/src/server/api/endpoints/drive/files/upload_from_url.ts
index ceb751a14..acb67b2e0 100644
--- a/src/server/api/endpoints/drive/files/upload_from_url.ts
+++ b/src/server/api/endpoints/drive/files/upload_from_url.ts
@@ -3,7 +3,7 @@
  */
 import $ from 'cafy';
 import { pack } from '../../../../../models/drive-file';
-import uploadFromUrl from '../../../../../common/drive/upload-from-url';
+import uploadFromUrl from '../../../../../drive/upload-from-url';
 
 /**
  * Create a file from a URL
diff --git a/src/server/api/endpoints/drive/folders/create.ts b/src/server/api/endpoints/drive/folders/create.ts
index bd3b0a0b1..d9d39a918 100644
--- a/src/server/api/endpoints/drive/folders/create.ts
+++ b/src/server/api/endpoints/drive/folders/create.ts
@@ -3,7 +3,7 @@
  */
 import $ from 'cafy';
 import DriveFolder, { isValidFolderName, pack } from '../../../../../models/drive-folder';
-import { publishDriveStream } from '../../../../../common/event';
+import { publishDriveStream } from '../../../../../event';
 
 /**
  * Create drive folder
diff --git a/src/server/api/endpoints/drive/folders/update.ts b/src/server/api/endpoints/drive/folders/update.ts
index 5ac81e5b5..1cea05d71 100644
--- a/src/server/api/endpoints/drive/folders/update.ts
+++ b/src/server/api/endpoints/drive/folders/update.ts
@@ -3,7 +3,7 @@
  */
 import $ from 'cafy';
 import DriveFolder, { isValidFolderName, pack } from '../../../../../models/drive-folder';
-import { publishDriveStream } from '../../../../../common/event';
+import { publishDriveStream } from '../../../../../event';
 
 /**
  * Update a folder
diff --git a/src/server/api/endpoints/following/delete.ts b/src/server/api/endpoints/following/delete.ts
index ecca27d57..77a6cebee 100644
--- a/src/server/api/endpoints/following/delete.ts
+++ b/src/server/api/endpoints/following/delete.ts
@@ -4,7 +4,7 @@
 import $ from 'cafy';
 import User, { pack as packUser } from '../../../../models/user';
 import Following from '../../../../models/following';
-import event from '../../../../common/event';
+import event from '../../../../event';
 
 /**
  * Unfollow a user
diff --git a/src/server/api/endpoints/i/regenerate_token.ts b/src/server/api/endpoints/i/regenerate_token.ts
index 0af622fd9..d7cb69784 100644
--- a/src/server/api/endpoints/i/regenerate_token.ts
+++ b/src/server/api/endpoints/i/regenerate_token.ts
@@ -4,7 +4,7 @@
 import $ from 'cafy';
 import * as bcrypt from 'bcryptjs';
 import User from '../../../../models/user';
-import event from '../../../../common/event';
+import event from '../../../../event';
 import generateUserToken from '../../common/generate-native-user-token';
 
 /**
diff --git a/src/server/api/endpoints/i/update.ts b/src/server/api/endpoints/i/update.ts
index b465e763e..76ceede8d 100644
--- a/src/server/api/endpoints/i/update.ts
+++ b/src/server/api/endpoints/i/update.ts
@@ -3,7 +3,7 @@
  */
 import $ from 'cafy';
 import User, { isValidName, isValidDescription, isValidLocation, isValidBirthday, pack } from '../../../../models/user';
-import event from '../../../../common/event';
+import event from '../../../../event';
 import config from '../../../../conf';
 
 /**
diff --git a/src/server/api/endpoints/i/update_client_setting.ts b/src/server/api/endpoints/i/update_client_setting.ts
index 79789e664..263ac6d07 100644
--- a/src/server/api/endpoints/i/update_client_setting.ts
+++ b/src/server/api/endpoints/i/update_client_setting.ts
@@ -3,7 +3,7 @@
  */
 import $ from 'cafy';
 import User, { pack } from '../../../../models/user';
-import event from '../../../../common/event';
+import event from '../../../../event';
 
 /**
  * Update myself
diff --git a/src/server/api/endpoints/i/update_home.ts b/src/server/api/endpoints/i/update_home.ts
index 437f51d6f..227b8dd5a 100644
--- a/src/server/api/endpoints/i/update_home.ts
+++ b/src/server/api/endpoints/i/update_home.ts
@@ -3,7 +3,7 @@
  */
 import $ from 'cafy';
 import User from '../../../../models/user';
-import event from '../../../../common/event';
+import event from '../../../../event';
 
 module.exports = async (params, user) => new Promise(async (res, rej) => {
 	// Get 'home' parameter
diff --git a/src/server/api/endpoints/i/update_mobile_home.ts b/src/server/api/endpoints/i/update_mobile_home.ts
index 783ca09d1..007eb2eab 100644
--- a/src/server/api/endpoints/i/update_mobile_home.ts
+++ b/src/server/api/endpoints/i/update_mobile_home.ts
@@ -3,7 +3,7 @@
  */
 import $ from 'cafy';
 import User from '../../../../models/user';
-import event from '../../../../common/event';
+import event from '../../../../event';
 
 module.exports = async (params, user) => new Promise(async (res, rej) => {
 	// Get 'home' parameter
diff --git a/src/server/api/endpoints/messaging/messages/create.ts b/src/server/api/endpoints/messaging/messages/create.ts
index b2b6c971d..e0ec1f216 100644
--- a/src/server/api/endpoints/messaging/messages/create.ts
+++ b/src/server/api/endpoints/messaging/messages/create.ts
@@ -9,10 +9,10 @@ import User from '../../../../../models/user';
 import Mute from '../../../../../models/mute';
 import DriveFile from '../../../../../models/drive-file';
 import { pack } from '../../../../../models/messaging-message';
-import publishUserStream from '../../../../../common/event';
-import { publishMessagingStream, publishMessagingIndexStream, pushSw } from '../../../../../common/event';
-import html from '../../../../../common/text/html';
-import parse from '../../../../../common/text/parse';
+import publishUserStream from '../../../../../event';
+import { publishMessagingStream, publishMessagingIndexStream, pushSw } from '../../../../../event';
+import html from '../../../../../text/html';
+import parse from '../../../../../text/parse';
 import config from '../../../../../conf';
 
 /**
diff --git a/src/server/api/endpoints/notifications/mark_as_read_all.ts b/src/server/api/endpoints/notifications/mark_as_read_all.ts
index f9bc6ebf7..3ba00a907 100644
--- a/src/server/api/endpoints/notifications/mark_as_read_all.ts
+++ b/src/server/api/endpoints/notifications/mark_as_read_all.ts
@@ -2,7 +2,7 @@
  * Module dependencies
  */
 import Notification from '../../../../models/notification';
-import event from '../../../../common/event';
+import event from '../../../../event';
 
 /**
  * Mark as read all notifications
diff --git a/src/server/api/endpoints/othello/games/show.ts b/src/server/api/endpoints/othello/games/show.ts
index 0b1c9bc35..dd886936d 100644
--- a/src/server/api/endpoints/othello/games/show.ts
+++ b/src/server/api/endpoints/othello/games/show.ts
@@ -1,6 +1,6 @@
 import $ from 'cafy';
 import OthelloGame, { pack } from '../../../../../models/othello-game';
-import Othello from '../../../../../misc/othello/core';
+import Othello from '../../../../../othello/core';
 
 module.exports = (params, user) => new Promise(async (res, rej) => {
 	// Get 'gameId' parameter
diff --git a/src/server/api/endpoints/othello/match.ts b/src/server/api/endpoints/othello/match.ts
index d9c46aae1..1fc46ab90 100644
--- a/src/server/api/endpoints/othello/match.ts
+++ b/src/server/api/endpoints/othello/match.ts
@@ -2,8 +2,8 @@ import $ from 'cafy';
 import Matching, { pack as packMatching } from '../../../../models/othello-matching';
 import OthelloGame, { pack as packGame } from '../../../../models/othello-game';
 import User from '../../../../models/user';
-import publishUserStream, { publishOthelloStream } from '../../../../common/event';
-import { eighteight } from '../../../../misc/othello/maps';
+import publishUserStream, { publishOthelloStream } from '../../../../event';
+import { eighteight } from '../../../../othello/maps';
 
 module.exports = (params, user) => new Promise(async (res, rej) => {
 	// Get 'userId' parameter
diff --git a/src/server/api/endpoints/posts/create.ts b/src/server/api/endpoints/posts/create.ts
index c2e790a24..e74ac7582 100644
--- a/src/server/api/endpoints/posts/create.ts
+++ b/src/server/api/endpoints/posts/create.ts
@@ -3,8 +3,8 @@
  */
 import $ from 'cafy';
 import deepEqual = require('deep-equal');
-import html from '../../../../common/text/html';
-import parse from '../../../../common/text/parse';
+import html from '../../../../text/html';
+import parse from '../../../../text/parse';
 import Post, { IPost, isValidText, isValidCw } from '../../../../models/post';
 import User, { ILocalUser } from '../../../../models/user';
 import Channel, { IChannel } from '../../../../models/channel';
@@ -15,10 +15,10 @@ import Watching from '../../../../models/post-watching';
 import ChannelWatching from '../../../../models/channel-watching';
 import { pack } from '../../../../models/post';
 import watch from '../../common/watch-post';
-import event, { pushSw, publishChannelStream } from '../../../../common/event';
-import notify from '../../../../common/notify';
-import getAcct from '../../../../misc/user/get-acct';
-import parseAcct from '../../../../misc/user/parse-acct';
+import event, { pushSw, publishChannelStream } from '../../../../event';
+import notify from '../../../../notify';
+import getAcct from '../../../../user/get-acct';
+import parseAcct from '../../../../user/parse-acct';
 import config from '../../../../conf';
 
 /**
diff --git a/src/server/api/endpoints/posts/polls/vote.ts b/src/server/api/endpoints/posts/polls/vote.ts
index 59b1f099f..be1fd7b5d 100644
--- a/src/server/api/endpoints/posts/polls/vote.ts
+++ b/src/server/api/endpoints/posts/polls/vote.ts
@@ -6,8 +6,8 @@ import Vote from '../../../../../models/poll-vote';
 import Post from '../../../../../models/post';
 import Watching from '../../../../../models/post-watching';
 import watch from '../../../common/watch-post';
-import { publishPostStream } from '../../../../../common/event';
-import notify from '../../../../../common/notify';
+import { publishPostStream } from '../../../../../event';
+import notify from '../../../../../notify';
 
 /**
  * Vote poll of a post
diff --git a/src/server/api/endpoints/posts/reactions/create.ts b/src/server/api/endpoints/posts/reactions/create.ts
index 441d56383..408b2483a 100644
--- a/src/server/api/endpoints/posts/reactions/create.ts
+++ b/src/server/api/endpoints/posts/reactions/create.ts
@@ -7,8 +7,8 @@ import Post, { pack as packPost } from '../../../../../models/post';
 import { pack as packUser } from '../../../../../models/user';
 import Watching from '../../../../../models/post-watching';
 import watch from '../../../common/watch-post';
-import { publishPostStream, pushSw } from '../../../../../common/event';
-import notify from '../../../../../common/notify';
+import { publishPostStream, pushSw } from '../../../../../event';
+import notify from '../../../../../notify';
 
 /**
  * React to a post
diff --git a/src/server/api/limitter.ts b/src/server/api/limitter.ts
index 93e03f5e4..81016457d 100644
--- a/src/server/api/limitter.ts
+++ b/src/server/api/limitter.ts
@@ -3,7 +3,7 @@ import * as debug from 'debug';
 import limiterDB from '../../db/redis';
 import { Endpoint } from './endpoints';
 import { IAuthContext } from './authenticate';
-import getAcct from '../../misc/user/get-acct';
+import getAcct from '../../user/get-acct';
 
 const log = debug('misskey:limitter');
 
diff --git a/src/server/api/private/signin.ts b/src/server/api/private/signin.ts
index 4ad5097e5..99ba51b41 100644
--- a/src/server/api/private/signin.ts
+++ b/src/server/api/private/signin.ts
@@ -3,7 +3,7 @@ import * as bcrypt from 'bcryptjs';
 import * as speakeasy from 'speakeasy';
 import User, { ILocalUser } from '../../../models/user';
 import Signin, { pack } from '../../../models/signin';
-import event from '../../../common/event';
+import event from '../../../event';
 import signin from '../common/signin';
 import config from '../../../conf';
 
diff --git a/src/server/api/service/twitter.ts b/src/server/api/service/twitter.ts
index 73822b0bd..61a1d5639 100644
--- a/src/server/api/service/twitter.ts
+++ b/src/server/api/service/twitter.ts
@@ -6,7 +6,7 @@ import * as uuid from 'uuid';
 import autwh from 'autwh';
 import redis from '../../../db/redis';
 import User, { pack } from '../../../models/user';
-import event from '../../../common/event';
+import event from '../../../event';
 import config from '../../../conf';
 import signin from '../common/signin';
 
diff --git a/src/server/api/stream/othello-game.ts b/src/server/api/stream/othello-game.ts
index 00367a824..6eb610331 100644
--- a/src/server/api/stream/othello-game.ts
+++ b/src/server/api/stream/othello-game.ts
@@ -2,9 +2,9 @@ import * as websocket from 'websocket';
 import * as redis from 'redis';
 import * as CRC32 from 'crc-32';
 import OthelloGame, { pack } from '../../../models/othello-game';
-import { publishOthelloGameStream } from '../../../common/event';
-import Othello from '../../../misc/othello/core';
-import * as maps from '../../../misc/othello/maps';
+import { publishOthelloGameStream } from '../../../event';
+import Othello from '../../../othello/core';
+import * as maps from '../../../othello/maps';
 import { ParsedUrlQuery } from 'querystring';
 
 export default function(request: websocket.request, connection: websocket.connection, subscriber: redis.RedisClient, user?: any): void {
diff --git a/src/server/api/stream/othello.ts b/src/server/api/stream/othello.ts
index 1cf9a1494..4c292056d 100644
--- a/src/server/api/stream/othello.ts
+++ b/src/server/api/stream/othello.ts
@@ -2,7 +2,7 @@ import * as mongo from 'mongodb';
 import * as websocket from 'websocket';
 import * as redis from 'redis';
 import Matching, { pack } from '../../../models/othello-matching';
-import publishUserStream from '../../../common/event';
+import publishUserStream from '../../../event';
 
 export default function(request: websocket.request, connection: websocket.connection, subscriber: redis.RedisClient, user: any): void {
 	// Subscribe othello stream
diff --git a/src/server/webfinger.ts b/src/server/webfinger.ts
index 41aeb5642..7a28b1bec 100644
--- a/src/server/webfinger.ts
+++ b/src/server/webfinger.ts
@@ -1,5 +1,5 @@
 import config from '../conf';
-import parseAcct from '../misc/user/parse-acct';
+import parseAcct from '../user/parse-acct';
 import User from '../models/user';
 const express = require('express');
 
diff --git a/src/common/text/html.ts b/src/text/html.ts
similarity index 100%
rename from src/common/text/html.ts
rename to src/text/html.ts
diff --git a/src/common/text/parse/core/syntax-highlighter.ts b/src/text/parse/core/syntax-highlighter.ts
similarity index 100%
rename from src/common/text/parse/core/syntax-highlighter.ts
rename to src/text/parse/core/syntax-highlighter.ts
diff --git a/src/common/text/parse/elements/bold.ts b/src/text/parse/elements/bold.ts
similarity index 100%
rename from src/common/text/parse/elements/bold.ts
rename to src/text/parse/elements/bold.ts
diff --git a/src/common/text/parse/elements/code.ts b/src/text/parse/elements/code.ts
similarity index 100%
rename from src/common/text/parse/elements/code.ts
rename to src/text/parse/elements/code.ts
diff --git a/src/common/text/parse/elements/emoji.ts b/src/text/parse/elements/emoji.ts
similarity index 100%
rename from src/common/text/parse/elements/emoji.ts
rename to src/text/parse/elements/emoji.ts
diff --git a/src/common/text/parse/elements/hashtag.ts b/src/text/parse/elements/hashtag.ts
similarity index 100%
rename from src/common/text/parse/elements/hashtag.ts
rename to src/text/parse/elements/hashtag.ts
diff --git a/src/common/text/parse/elements/inline-code.ts b/src/text/parse/elements/inline-code.ts
similarity index 100%
rename from src/common/text/parse/elements/inline-code.ts
rename to src/text/parse/elements/inline-code.ts
diff --git a/src/common/text/parse/elements/link.ts b/src/text/parse/elements/link.ts
similarity index 100%
rename from src/common/text/parse/elements/link.ts
rename to src/text/parse/elements/link.ts
diff --git a/src/common/text/parse/elements/mention.ts b/src/text/parse/elements/mention.ts
similarity index 83%
rename from src/common/text/parse/elements/mention.ts
rename to src/text/parse/elements/mention.ts
index 3c81979d0..732554d8b 100644
--- a/src/common/text/parse/elements/mention.ts
+++ b/src/text/parse/elements/mention.ts
@@ -1,7 +1,7 @@
 /**
  * Mention
  */
-import parseAcct from '../../../../misc/user/parse-acct';
+import parseAcct from '../../../user/parse-acct';
 
 module.exports = text => {
 	const match = text.match(/^(?:@[a-zA-Z0-9\-]+){1,2}/);
diff --git a/src/common/text/parse/elements/quote.ts b/src/text/parse/elements/quote.ts
similarity index 100%
rename from src/common/text/parse/elements/quote.ts
rename to src/text/parse/elements/quote.ts
diff --git a/src/common/text/parse/elements/url.ts b/src/text/parse/elements/url.ts
similarity index 100%
rename from src/common/text/parse/elements/url.ts
rename to src/text/parse/elements/url.ts
diff --git a/src/common/text/parse/index.ts b/src/text/parse/index.ts
similarity index 100%
rename from src/common/text/parse/index.ts
rename to src/text/parse/index.ts
diff --git a/src/misc/user/get-acct.ts b/src/user/get-acct.ts
similarity index 100%
rename from src/misc/user/get-acct.ts
rename to src/user/get-acct.ts
diff --git a/src/misc/user/get-summary.ts b/src/user/get-summary.ts
similarity index 90%
rename from src/misc/user/get-summary.ts
rename to src/user/get-summary.ts
index 2c71d3eae..822081702 100644
--- a/src/misc/user/get-summary.ts
+++ b/src/user/get-summary.ts
@@ -1,4 +1,4 @@
-import { IUser, isLocalUser } from '../../models/user';
+import { IUser, isLocalUser } from '../models/user';
 import getAcct from './get-acct';
 
 /**
diff --git a/src/misc/user/parse-acct.ts b/src/user/parse-acct.ts
similarity index 100%
rename from src/misc/user/parse-acct.ts
rename to src/user/parse-acct.ts