<aside> 💡 追記(2022/12/3)

6.にて示していた、マイグレーションファイルの保存場所に誤りがありました。

誤:./migration/1663059152853-de-groundpolis.js 正:./packages/backend/migration/1663059152853-de-groundpolis.js

誤った手順で作業してしまった管理者さん向けの対応手順を追加しました。ご確認お願いします。

誤った手順の修復方法

</aside>

GroundpolisからMisskeyに移行する手順を示します。

1.Misskeyのソースコードを取得

git remote set-url origin <https://github.com/misskey-dev/misskey>
git fetch origin
git reset --hard origin/master

2.マイグレーションファイルを削除

いくつかのマイグレーションファイルがGroundpolisと競合しているため削除します。処理がダブっているものなので、削除しても問題ありません。

3.起動中のGroundpolisインスタンスを停止

4.ビルド済みファイルを削除

rm -rf node_modules built

5.パッケージ取得およびビルド

yarn install
NODE_ENV=production yarn build

6.追加のマイグレーションファイルを保存

以下のファイルを./packages/backend/migration/1663059152853-de-groundpolis.jsに保存します。

このファイルは、Groundpolis特有のデータをMisskeyに適合する形に変更するためのマイグレーションファイルです。

export class deGroundpolis1663059152853 {
	name = 'deGroundpolis1663059152853'

	async up(queryRunner) {
			// さよなら、公開範囲「ログインユーザー公開範囲」
			await queryRunner.query(`UPDATE "note" SET "visibility"='followers' WHERE "visibility"='users'`);

			// リモートフォロワーとローカル フラグがついていたら、ローカル投稿に変換する
			await queryRunner.query(`UPDATE "note" SET "localOnly"=TRUE WHERE "remoteFollowersOnly"=TRUE`);

			// FF表示するかどうかのフラグがGPとMisskeyで違うので、変換
			queryRunner.query(`SELECT "id" FROM "user" WHERE "hideFF"=TRUE and "host" IS NULL`)
			.then(users => Promise.all(users.map(user => {
				return queryRunner.query(`UPDATE "user_profile" SET "ffVisibility"='private' WHERE "userId"=$1`, [user.id]);
			})));

			// 「リノートのみミュート」を削除し、意図しないミュートを回避
			queryRunner.query(`DELETE FROM muting WHERE "isRenoteOnly"=TRUE`);
	}

	async down(queryRunner) {
    // なにもしない
  }

}

7.マイグレーションを実行