Back to list
crowi

crowi-migration

by crowi

Crowi - The Markdown Wiki - Empower the team with sharing your knowledge

1,097🍴 166📅 Jan 21, 2026

SKILL.md


name: crowi-migration description: | Crowi 2.0 移行ワークフロー。Express/Swig から Next.js + ts-rest への移行時に自動適用。 キーワード: migrate, 移行, Express, Swig, legacy, 旧実装 globs:

  • "lib/routes/**"
  • "lib/views/**"
  • "client/components/**"

Crowi 2.0 Migration Skill

アーキテクチャ

crowi/
├── apps/
│   ├── crowi-api/          # Fastify + ts-rest (port 3300)
│   └── crowi-web/          # Next.js 16 (port 3301)
├── packages/
│   ├── api-contract/       # ts-rest 契約定義
│   └── shared/             # 共有型
└── lib/                    # 旧実装(参照元)
    ├── routes/             # Express ルート
    ├── views/              # Swig テンプレート
    └── models/             # Mongoose モデル

移行パターン

Express Route → Fastify + ts-rest

// Before: lib/routes/page.js
router.get('/pages', async (req, res) => {
  const pages = await Page.find();
  res.render('page/list', { pages });
});

// After: packages/api-contract/src/page.ts
export const pageContract = c.router({
  listPages: {
    method: 'GET',
    path: '/pages',
    responses: { 200: z.object({ pages: z.array(PageSchema) }) },
  },
});

// After: apps/crowi-api/src/routes/page.ts
listPages: async () => {
  const pages = await Page.find();
  return { status: 200, body: { pages } };
},

Swig Template → Next.js Page

// Before: lib/views/page/list.html
{% for page in pages %}
  <div>{{ page.path }}</div>
{% endfor %}

// After: apps/crowi-web/app/(main)/pages/page.tsx
'use client';
export default function PagesPage() {
  const { data } = useQuery(['pages'], () => client.page.listPages());
  return data?.body.pages.map(page => <div key={page._id}>{page.path}</div>);
}

サブエージェント

Agent役割ツール
migration-planner計画立案Read, Grep, Glob
migration-implementer実装Read, Write, Edit, Bash
migration-reviewerレビューRead, Grep, Bash
migration-committerコミット・PRRead, Bash

ワークフロー

/migrate {task-name}

planner → implementer → reviewer ─┬→ committer
                          ↑       │
                          └───────┘ (NEEDS_WORK)

タスク管理

  • キュー: .claude/migration-state/queue.json
  • タスク: .claude/migration-state/tasks/{task-id}.json
  • ステータス: PLANNEDREVIEWAPPROVEDCOMMITTED

技術スタック

  • API: Fastify v5, ts-rest, MongoDB/Mongoose, JWT
  • Web: Next.js 16, React 19, Tailwind v4, shadcn/ui
  • 共通: TypeScript 5.x strict, pnpm, Turborepo

Crowi テーマ

--crowi-primary: #43676b;
--crowi-header: #263a3c;
--crowi-sidebar: #f8f9fa;

Score

Total Score

85/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

+10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 1000以上

+15
最近の活動

1ヶ月以内に更新

+10
フォーク

10回以上フォークされている

+5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

+5

Reviews

💬

Reviews coming soon