هندسة المشاريع المعقدة مع الذكاء الاصطناعي

أنماط Monorepo مع مساعدة الذكاء الاصطناعي

5 دقيقة للقراءة

لماذا Monorepos للتطوير بمساعدة الذكاء الاصطناعي؟

Monorepos توفر لمساعدي الذكاء الاصطناعي مزايا حاسمة:

  1. سياق كامل: الذكاء الاصطناعي يمكنه رؤية جميع الحزم وعلاقاتها
  2. أنماط متسقة: التكوينات المشتركة تعني أسلوب كود متسق
  3. أمان الأنواع: أنواع مشتركة عبر الحزم
  4. تغييرات ذرية: تعديل حزم متعددة في commit واحد

هيكل Monorepo للذكاء الاصطناعي

تخطيط الدليل الأمثل

my-monorepo/
├── apps/
│   ├── web/                 # واجهة Next.js
│   ├── api/                 # خادم Node.js
│   └── admin/               # لوحة تحكم الإدارة
├── packages/
│   ├── ui/                  # مكونات React المشتركة
│   ├── database/            # مخطط Prisma والعميل
│   ├── types/               # أنواع TypeScript المشتركة
│   ├── utils/               # الأدوات المشتركة
│   └── config/              # التكوينات المشتركة (ESLint, TS)
├── turbo.json
├── package.json
└── .claude/
    └── context.md           # توثيق سياق الذكاء الاصطناعي

ملف سياق الذكاء الاصطناعي

أنشئ ملف سياق يساعد الذكاء الاصطناعي على فهم monorepo الخاص بك:

<!-- .claude/context.md -->

# سياق Monorepo

## علاقات الحزم
- `apps/web` يعتمد على: `packages/ui`, `packages/types`, `packages/utils`
- `apps/api` يعتمد على: `packages/database`, `packages/types`, `packages/utils`
- `packages/ui` يعتمد على: `packages/types`
- `packages/database` يعتمد على: `packages/types`

## أوامر التطوير
- `pnpm dev` - تشغيل جميع التطبيقات
- `pnpm build` - بناء جميع الحزم
- `pnpm test` - تشغيل جميع الاختبارات
- `turbo run build --filter=web` - بناء تطبيق محدد

## إضافة مكونات جديدة
1. المكونات المشتركة تذهب في `packages/ui`
2. المكونات الخاصة بالتطبيق تذهب في `apps/[app]/components`
3. جميع المكونات يجب أن تُصدَّر من index.ts

## اتفاقيات الأنواع
- أنواع استجابة API في `packages/types/api.ts`
- نماذج قاعدة البيانات في `packages/types/models.ts`
- الأدوات المشتركة في `packages/types/utils.ts`

إنشاء الحزم بمساعدة الذكاء الاصطناعي

إنشاء حزمة مشتركة جديدة

claude "أنشئ حزمة مشتركة جديدة 'packages/email' لـ
إرسال رسائل البريد الإلكتروني المعاملاتية. ضمّن:
1. إعداد الحزمة مع tsconfig مناسب
2. تجريد خدمة البريد الإلكتروني
3. موفري SendGrid و Resend
4. تعريفات الأنواع
5. تكوين التصدير"

Claude Code يولد الحزمة الكاملة:

// packages/email/src/index.ts
export { EmailService } from './service';
export { SendGridProvider } from './providers/sendgrid';
export { ResendProvider } from './providers/resend';
export type { EmailProvider, EmailOptions, EmailResult } from './types';
// packages/email/src/types.ts
export interface EmailOptions {
  to: string | string[];
  subject: string;
  html: string;
  text?: string;
  from?: string;
  replyTo?: string;
}

export interface EmailResult {
  success: boolean;
  messageId?: string;
  error?: string;
}

export interface EmailProvider {
  send(options: EmailOptions): Promise<EmailResult>;
}
// packages/email/src/service.ts
import type { EmailProvider, EmailOptions, EmailResult } from './types';

export class EmailService {
  constructor(private provider: EmailProvider) {}

  async send(options: EmailOptions): Promise<EmailResult> {
    return this.provider.send(options);
  }

  async sendBatch(emails: EmailOptions[]): Promise<EmailResult[]> {
    return Promise.all(emails.map((email) => this.send(email)));
  }
}

ربط الاعتماديات

claude "أضف حزمة email كاعتمادية لـ apps/api.
حدث رسم الاعتمادية في turbo.json إذا لزم الأمر."

إعادة الهيكلة عبر الحزم

السيناريو: إعادة تسمية نوع مشترك

claude "أعد تسمية نوع 'User' إلى 'UserProfile' عبر
monorepo بالكامل. حدث:
1. packages/types/models.ts (التعريف)
2. جميع الاستيرادات في apps/web
3. جميع الاستيرادات في apps/api
4. جميع الاستيرادات في packages/ui
تأكد من عدم وجود تغييرات معطلة."

Claude Code ينفذ إعادة هيكلة ذرية:

## ملخص إعادة الهيكلة

الملفات المعدلة: 24
- packages/types/src/models.ts (التعريف مُعاد تسميته)
- apps/web/src/components/UserCard.tsx
- apps/web/src/hooks/useUser.ts
- apps/api/src/routes/users.ts
- apps/api/src/services/auth.ts
- packages/ui/src/components/Avatar.tsx
... (18 ملف آخر)

جميع فحوصات ترجمة TypeScript تمر.
جميع الاختبارات تمر.

أنماط Turborepo المحددة

تكوين Pipeline للذكاء الاصطناعي

// turbo.json
{
  "$schema": "https://turbo.build/schema.json",
  "pipeline": {
    "build": {
      "dependsOn": ["^build"],
      "outputs": ["dist/**", ".next/**"]
    },
    "test": {
      "dependsOn": ["build"],
      "outputs": []
    },
    "lint": {
      "outputs": []
    },
    "typecheck": {
      "dependsOn": ["^build"],
      "outputs": []
    }
  }
}

تصحيح البناء بمساعدة الذكاء الاصطناعي

claude "بناء Turbo الخاص بنا يفشل بأخطاء اعتمادية دائرية.
حلل رسم الاعتمادية وأصلح المشكلة."

Claude Code يحقق:

## تحليل البناء

وُجد اعتمادية دائرية:
packages/utils ← packages/types ← packages/utils

السلسلة:
1. packages/utils يستورد formatDate من packages/types
2. packages/types يستورد ValidationError من packages/utils

الحل:
انقل ValidationError إلى packages/types/errors.ts
حدث الاستيرادات في packages/utils لاستخدام packages/types

جارٍ تنفيذ الإصلاح...

أنماط Nx المحددة

استخدام مولدات Nx مع الذكاء الاصطناعي

claude "استخدم Nx لتوليد مكتبة React جديدة للرسوم البيانية.
اضبطها مع إعداد Tailwind والاختبار الموجود."
# الذكاء الاصطناعي ينفذ
npx nx generate @nx/react:library charts \
  --directory=packages/charts \
  --style=tailwind \
  --unitTestRunner=vitest \
  --bundler=vite

تحليل المتأثرين

claude "ما الحزم التي ستتأثر إذا عدلت
packages/database/schema.prisma?"
# الذكاء الاصطناعي يشغل
npx nx affected:graph --base=main

# يُرجع
المشاريع المتأثرة:
- packages/database (معدل)
- packages/types (يعتمد على database)
- apps/api (يعتمد على database)
- apps/web (يعتمد على types)
- apps/admin (يعتمد على types, database)

العمليات على مستوى Workspace

التحديثات المجمعة

claude "حدث جميع الحزم لاستخدام logger الجديد من
packages/utils/logger بدلاً من console.log. طبق على:
- جميع التطبيقات
- جميع الحزم ما عدا utils نفسها
اتبع أنماط الاستيراد الموجودة."

مزامنة الاعتماديات

claude "تأكد أن جميع الحزم تستخدم نفس إصدار React.
تحقق من عدم تطابق الإصدارات وحدث ملفات package.json."

أفضل الممارسات لتطوير Monorepo بالذكاء الاصطناعي

  1. حافظ على تحديث ملفات السياق: صن .claude/context.md
  2. استخدم بروتوكولات Workspace: "workspace:*" للاعتماديات الداخلية
  3. أدوات متسقة: نفس الاختبار والفحص عبر الحزم
  4. حدود صريحة: مسؤوليات حزم واضحة
  5. فحوصات آلية: CI يتحقق من التغييرات عبر الحزم

ملخص الوحدة

لقد تعلمت كيف:

  • تتخذ قرارات معمارية مدفوعة بالذكاء الاصطناعي
  • تبني ميزات full-stack مع ذكاء اصطناعي منسق
  • تدير تعقيد monorepo بمساعدة الذكاء الاصطناعي

بعد ذلك، سنتعامل مع إدارة قواعد الكود الكبيرة—العمل مع الذكاء الاصطناعي على قواعد كود بمئات الآلاف من الأسطر. :::

اختبار

الوحدة 2: هندسة المشاريع المعقدة مع الذكاء الاصطناعي

خذ الاختبار