Programování Pokročilý GitHub Copilot

GitHub Copilot - Optimalizace Generování Kódu

Naučte se efektivně využívat GitHub Copilot pro rychlejší a kvalitnější vývoj kódu pomocí pokročilých technik a best practices.

Prompt text

Délka: Dlouhý
Jsi expert na využívání GitHub Copilot pro produktivní vývoj softwaru. Pomoz mi vytvořit strategii pro maximální využití Copilot při programování.

Kontext projektu:
- Programovací jazyk: [JAZYK - např. "TypeScript", "Python", "Java"]
- Framework/technologie: [FRAMEWORK - např. "React", "Django", "Spring Boot"]
- Typ projektu: [TYP PROJEKTU - např. "webová aplikace", "REST API", "mobilní app"]
- Úroveň zkušeností: [ÚROVEŇ - např. "junior", "mid-level", "senior"]

Oblasti pro optimalizaci:
1. **Context Building** - Jak připravit kód a komentáře pro lepší návrhy
2. **Prompt Engineering** - Efektivní psaní komentářů pro přesné generování
3. **Code Review** - Kdy přijmout/odmítnout/upravit návrhy Copilot
4. **Testing Strategy** - Využití Copilot pro testy a dokumentaci
5. **Productivity Tips** - Klávesové zkratky a workflow optimalizace

Vytvoř kompletní průvodce zahrnující:
- Konkrétní příklady kontextových komentářů pro můj stack
- Pattern pro generování boilerplate kódu
- Strategie pro refactoring s pomocí Copilot
- Best practices pro code review AI-generovaného kódu
- Typické chyby a jak se jim vyhnout
- Metriky pro měření produktivity s Copilot
Interaktivní tvůrce

Příklad použití

Vstup:

Programovací jazyk: TypeScript
Framework/technologie: React s Next.js 14, TailwindCSS, tRPC
Typ projektu: Full-stack SaaS aplikace s autentizací, dashboardem a API
Úroveň zkušeností: Mid-level developer s 2 roky zkušeností s Reactem

Výstup:

# GitHub Copilot Masterclass: TypeScript + React + Next.js 14

## 🎯 Úvod: Copilot jako Váš Pair Programming Partner

GitHub Copilot není jen automatické dokončování kódu - je to AI asistent, který rozumí kontextu vašeho projektu a může vám pomoct nejen psát kód rychleji, ale i kvalitněji. Pro TypeScript + React + Next.js projekt máte obrovskou výhodu: Copilot byl trénován na miliónech řádků podobného kódu z GitHub repozitářů.

**Co se naučíte:**
- Jak dosáhnout 40-60% zvýšení produktivity
- Techniky pro generování přesného typu-bezpečného kódu
- Strategie pro refactoring a optimalizaci
- Workflow pro testování a dokumentaci
- Měření ROI z použití Copilot

---

## 📋 1. Context Building - Příprava Pro Inteligentní Návrhy

### 1.1 Struktura Projektu Pro Optimální Context

Copilot analyzuje otevřené soubory a strukturu projektu. Optimalizujte jej:

```typescript
// ✅ DOBRÁ STRUKTURA - Copilot rozumí konvencím

src/
├── app/ # Next.js 14 App Router
│ ├── (auth)/ # Route groups
│ │ ├── login/page.tsx
│ │ └── register/page.tsx
│ ├── (dashboard)/
│ │ ├── layout.tsx # Sdílený layout
│ │ └── overview/page.tsx
│ └── api/
│ └── trpc/[trpc]/route.ts # tRPC endpoint
├── components/
│ ├── ui/ # Shadcn/ui komponenty
│ │ ├── button.tsx
│ │ └── card.tsx
│ └── features/ # Feature-specific komponenty
│ ├── auth/
│ └── dashboard/
├── lib/
│ ├── trpc/ # tRPC konfigurace
│ │ ├── client.ts
│ │ └── server.ts
│ ├── db/ # Databáze (Prisma)
│ │ ├── schema.prisma
│ │ └── client.ts
│ └── utils/ # Utility funkce
├── types/ # TypeScript typy
│ ├── api.ts
│ └── models.ts
└── hooks/ # Custom React hooks
├── useAuth.ts
└── useApiQuery.ts
```

**Proč tato struktura funguje:**
- Copilot rozpozná Next.js 14 App Router pattern
- Route groups → generuje správné metadata a layouts
- Jasná separace concerns → přesnější návrhy pro konkrétní vrstvu

### 1.2 Kontextové Soubory - "Anchor Files"

Nechte **otevřené v editoru** tyto klíčové soubory pro lepší context:

```typescript
// 1. types/models.ts - Copilot se naučí vaše data modely
export interface User {
id: string;
email: string;
name: string;
role: "admin" | "user" | "guest";
createdAt: Date;
subscription?: {
plan: "free" | "pro" | "enterprise";
status: "active" | "cancelled" | "expired";
};
}

export interface Project {
id: string;
name: string;
ownerId: string;
members: ProjectMember[];
settings: ProjectSettings;
}

// 2. lib/trpc/routers/_app.ts - Copilot pochopí vaši API strukturu
export const appRouter = router({
user: userRouter,
project: projectRouter,
auth: authRouter,
});

export type AppRouter = typeof appRouter;
```

**Efekt:** Když začnete psát nový router, Copilot automaticky navrhne správné typy a strukturu.

### 1.3 Konfigurace tsconfig.json Pro Lepší Inference

```json
{
"compilerOptions": {
"strict": true,
"noUncheckedIndexedAccess": true, // Copilot navrhuje null-checks
"paths": {
"@/*": ["./src/*"],
"@/components/*": ["./src/components/*"],
"@/lib/*": ["./src/lib/*"]
}
}
}
```

Copilot respektuje vaše path aliases a strict mode nastavení.

---

## 🎨 2. Prompt Engineering - Komentáře, Které Fungují

### 2.1 Anatomie Perfektního Komentáře

```typescript
// ❌ ŠPATNÝ komentář - příliš vágní
// create user function

// ✅ DOBRÝ komentář - specifický, s detaily
// Create a new user with email/password auth, validate inputs,
// hash password with bcrypt, store in database via Prisma,
// return User object or throw AuthError
```

### 2.2 Pattern #1: Function Implementation

**Template:**
```typescript
// [Action] [what] with [technology], [validation/error handling], return [type]
```

**Příklady:**

```typescript
// Fetch user projects with tRPC, include members and settings,
// filter by active status, sort by updatedAt desc, return Project[]
export async function getUserProjects(userId: string) {
// Copilot vygeneruje:
const projects = await db.project.findMany({
where: {
OR: [
{ ownerId: userId },
{ members: { some: { userId } } }
],
status: "active"
},
include: {
members: true,
settings: true
},
orderBy: { updatedAt: "desc" }
});

return projects;
}
```

```typescript
// tRPC procedure to update project settings, validate user permission,
// update via Prisma transaction, invalidate cache, return updated Project
export const updateProjectSettings = protectedProcedure
.input(z.object({
projectId: z.string(),
settings: projectSettingsSchema
}))
.mutation(async ({ ctx, input }) => {
// Copilot automaticky vygeneruje permission check, transaction, cache invalidation
});
```

### 2.3 Pattern #2: React Component Generation

```typescript
// React Server Component for dashboard overview page
// Fetch user stats with tRPC, display in grid layout with Tailwind
// Show loading skeleton, error boundary, and empty state
// Use shadcn Card, Badge, and Button components
export default async function DashboardOverviewPage() {
// Copilot vygeneruje celý komponent včetně:
// - Async data fetching
// - Error handling
// - Loading states
// - Tailwind styling
// - Správné importy
}
```

**Co Copilot vygeneruje:**

```typescript
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import { Badge } from "@/components/ui/badge";
import { Skeleton } from "@/components/ui/skeleton";
import { api } from "@/lib/trpc/server";

export default async function DashboardOverviewPage() {
try {
const stats = await api.user.getStats.query();

return (
<div className="grid gap-4 md:grid-cols-2 lg:grid-cols-4">
<Card>
<CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
<CardTitle className="text-sm font-medium">
Total Projects
</CardTitle>
<Badge variant="secondary">{stats.projectCount}</Badge>
</CardHeader>
<CardContent>
<div className="text-2xl font-bold">{stats.activeProjects}</div>
<p className="text-xs text-muted-foreground">
+{stats.newProjectsThisMonth} this month
</p>
</CardContent>
</Card>
{/* Další karty... */}
</div>
);
} catch (error) {
return <div>Error loading stats</div>;
}
}
```

### 2.4 Pattern #3: Custom Hook s Type Safety

```typescript
// Custom hook for managing form state with react-hook-form and zod
// Generic type T for form schema, handle submission with async callback,
// show toast on success/error, reset form on success
export function useFormWithToast<T extends z.ZodType>(
schema: T,
onSubmit: (data: z.infer<T>) => Promise<void>
) {
// Copilot vygeneruje:
const form = useForm<z.infer<T>>({
resolver: zodResolver(schema),
});

const { toast } = useToast();

const handleSubmit = form.handleSubmit(async (data) => {
try {
await onSubmit(data);
toast({ title: "Success", description: "Changes saved" });
form.reset();
} catch (error) {
toast({
title: "Error",
description: error instanceof Error ? error.message : "Unknown error",
variant: "destructive"
});
}
});

return { form, handleSubmit };
}
```

### 2.5 Pattern #4: tRPC Router s Validation

```typescript
// tRPC router for project management
// Procedures: create, update, delete, get, list
// All procedures protected, validate permissions, use Prisma
// Return typed Project objects, throw TRPCError on failures
export const projectRouter = router({
// Copilot vygeneruje všech 5 procedures s:
// - Input validation schemas (Zod)
// - Permission checks
// - Prisma queries
// - Error handling
// - Type-safe return values

create: protectedProcedure
.input(z.object({
name: z.string().min(1).max(100),
description: z.string().optional(),
}))
.mutation(async ({ ctx, input }) => {
// Permission check
// Prisma create
// Return Project
}),

// ... další procedures
});
```

---

## 🔍 3. Code Review - Kdy Přijmout/Odmítnout Návrhy

### 3.1 Checklist Pro Review AI Kódu

**Vždy zkontrolujte:**

1. **Type Safety** ✅
```typescript
// ❌ Copilot může vygenerovat:
const user = await db.user.findUnique({ where: { id } });
console.log(user.email); // Potenciální runtime error!

// ✅ Upravte na:
const user = await db.user.findUnique({ where: { id } });
if (!user) throw new Error("User not found");
console.log(user.email); // Safe
```

2. **Error Handling** ❌→✅
```typescript
// ❌ Copilot často vygeneruje optimistický kód:
export async function deleteProject(id: string) {
await db.project.delete({ where: { id } });
return { success: true };
}

// ✅ Přidejte error handling:
export async function deleteProject(id: string) {
try {
const project = await db.project.findUnique({ where: { id } });
if (!project) {
throw new NotFoundError("Project not found");
}

await db.project.delete({ where: { id } });
return { success: true };
} catch (error) {
if (error instanceof Prisma.PrismaClientKnownRequestError) {
throw new DatabaseError("Failed to delete project");
}
throw error;
}
}
```

3. **Security** 🔒
```typescript
// ❌ Copilot může generovat nezabezpečené queries:
export const getProject = publicProcedure
.input(z.object({ id: z.string() }))
.query(async ({ input }) => {
return await db.project.findUnique({ where: { id: input.id } });
});

// ✅ Přidejte authorization:
export const getProject = protectedProcedure
.input(z.object({ id: z.string() }))
.query(async ({ ctx, input }) => {
const project = await db.project.findUnique({
where: { id: input.id },
include: { members: true }
});

if (!project) throw new TRPCError({ code: "NOT_FOUND" });

// Check permission
const hasAccess = project.ownerId === ctx.user.id ||
project.members.some(m => m.userId === ctx.user.id);

if (!hasAccess) throw new TRPCError({ code: "FORBIDDEN" });

return project;
});
```

4. **Performance** ⚡
```typescript
// ❌ N+1 query problem:
const projects = await db.project.findMany();
for (const project of projects) {
project.owner = await db.user.findUnique({ where: { id: project.ownerId } });
}

// ✅ Použijte include/select:
const projects = await db.project.findMany({
include: { owner: true }
});
```

### 3.2 Scoring System - Přijmout Nebo Ne?

| Kritérium | Váha | Body (0-10) |
|-----------|------|-------------|
| Type safety | 30% | ? |
| Error handling | 25% | ? |
| Security | 20% | ? |
| Performance | 15% | ? |
| Čitelnost | 10% | ? |

**Rozhodovací pravidla:**
- **90-100%**: Přijmout okamžitě ✅
- **70-89%**: Přijmout s drobnými úpravami 🔧
- **50-69%**: Použít jako inspiration, přepsat ⚠️
- **<50%**: Odmítnout, napsat ručně ❌

---

## 🧪 4. Testing Strategy s Copilot

### 4.1 Generování Unit Testů

```typescript
// File: lib/utils/validation.ts
export function validateEmail(email: string): boolean {
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return emailRegex.test(email);
}

// File: lib/utils/validation.test.ts
// Napište pouze komentář:
// Unit tests for validateEmail function
// Test cases: valid emails, invalid emails, edge cases (empty, null, special chars)
// Use vitest, expect, describe, it

// Copilot vygeneruje:
import { describe, it, expect } from "vitest";
import { validateEmail } from "./validation";

describe("validateEmail", () => {
it("should return true for valid email", () => {
expect(validateEmail("[email protected]")).toBe(true);
expect(validateEmail("[email protected]")).toBe(true);
});

it("should return false for invalid email", () => {
expect(validateEmail("invalid")).toBe(false);
expect(validateEmail("@example.com")).toBe(false);
expect(validateEmail("test@")).toBe(false);
});

it("should handle edge cases", () => {
expect(validateEmail("")).toBe(false);
expect(validateEmail(" ")).toBe(false);
});
});
```

### 4.2 Integration Testing Pro tRPC

```typescript
// tests/trpc/project.test.ts
// Integration tests for project router
// Test create, update, delete, get, list procedures
// Mock Prisma client, test auth middleware
// Use vitest, expect, createCaller helper

import { expect, test, vi } from "vitest";
import { appRouter } from "@/lib/trpc/routers/_app";
import { createInnerTRPCContext } from "@/lib/trpc/context";

// Copilot vygeneruje komplexní test suite:
const createCaller = () => {
const ctx = createInnerTRPCContext({
session: {
user: { id: "test-user-id", email: "[email protected]" }
}
});
return appRouter.createCaller(ctx);
};

test("create project - success", async () => {
const caller = createCaller();

const project = await caller.project.create({
name: "Test Project",
description: "Test description"
});

expect(project).toMatchObject({
name: "Test Project",
ownerId: "test-user-id"
});
});

test("create project - validation error", async () => {
const caller = createCaller();

await expect(
caller.project.create({ name: "" })
).rejects.toThrow("Name is required");
});
```

### 4.3 E2E Testing s Playwright

```typescript
// e2e/dashboard.spec.ts
// E2E test for dashboard page
// Login as user, navigate to dashboard, verify stats are displayed
// Test responsive layout, loading states, error states
// Use Playwright test, expect, page fixtures

import { test, expect } from "@playwright/test";

// Copilot vygeneruje:
test.describe("Dashboard", () => {
test.beforeEach(async ({ page }) => {
await page.goto("/login");
await page.fill('input[name="email"]', "[email protected]");
await page.fill('input[name="password"]', "password123");
await page.click('button[type="submit"]');
await page.waitForURL("/dashboard");
});

test("displays user stats", async ({ page }) => {
await expect(page.locator("h2:has-text('Total Projects')")).toBeVisible();
await expect(page.locator(".stats-value")).toHaveCount(4);
});

test("shows loading skeleton", async ({ page }) => {
// Test slow network
await page.route("**/api/trpc/**", route => {
setTimeout(() => route.continue(), 2000);
});

await page.reload();
await expect(page.locator(".skeleton")).toBeVisible();
});
});
```

---

## ⚡ 5. Productivity Tips & Workflow

### 5.1 Klávesové Zkratky (VS Code)

| Zkratka | Akce | Kdy použít |
|---------|------|-----------|
| `Tab` | Přijmout návrh | Když je návrh dobrý |
| `Esc` | Odmítnout návrh | Když chcete psát ručně |
| `Alt + ]` | Další návrh | Když první není ideální |
| `Alt + [` | Předchozí návrh | Procházení variant |
| `Ctrl + Enter` | Zobrazit panel s návrhy | Pro delší bloky kódu |

### 5.2 Multi-File Editing Workflow

**Scenario:** Přidáváte novou feature across multiple files

1. **Otevřete všechny relevantní soubory:**
```
- types/models.ts (nový type)
- lib/trpc/routers/project.ts (nový endpoint)
- app/(dashboard)/projects/page.tsx (UI)
- components/features/projects/CreateProjectForm.tsx
```

2. **Začněte typem** (types/models.ts):
```typescript
// Add Project creation input type with name, description, settings
export interface CreateProjectInput {
// Copilot automaticky navrhne všechna pole
}
```

3. **Pak backend** (project.ts):
```typescript
// Create procedure accepts CreateProjectInput, validates,
// saves to database, returns Project
export const create = protectedProcedure
// Copilot už ví o CreateProjectInput z otevřeného souboru!
```

4. **Nakonec frontend** (CreateProjectForm.tsx):
```typescript
// Form component for creating project, uses useFormWithToast hook,
// calls trpc project.create mutation, redirects on success
export function CreateProjectForm() {
// Copilot vygeneruje form využívající váš custom hook
}
```

**Výsledek:** Copilot využije kontext ze všech otevřených souborů → konzistentní kód across whole feature.

### 5.3 Refactoring Pattern

**Před refactoringem:**
```typescript
// This component is too complex, refactor into smaller components:
// - Extract form into separate component
// - Extract validation logic into custom hook
// - Extract API call into service function
export function UserProfile() {
// 200 řádků kódu...
}
```

**Copilot vygeneruje v inline chat:**
```typescript
// components/features/user/UserProfileForm.tsx
export function UserProfileForm({ user, onSubmit }) { ... }

// hooks/useUserValidation.ts
export function useUserValidation() { ... }

// lib/api/userService.ts
export async function updateUserProfile(data) { ... }

// Refactored component
export function UserProfile() {
const { validate } = useUserValidation();
const handleSubmit = async (data) => {
if (!validate(data)) return;
await updateUserProfile(data);
};

return <UserProfileForm user={user} onSubmit={handleSubmit} />;
}
```

---

## 📊 6. Metriky & Measuring Success

### 6.1 Sledujte Tyto KPIs

**Produktivita:**
- **Lines of code per hour** - Baseline vs. with Copilot (očekávejte +40-60%)
- **Time to complete feature** - Měřte sprint velocity
- **Code review time** - Mělo by být podobné (kvalita je důležitá)

**Kvalita:**
- **Bug rate** - Bugs per 1000 lines (mělo zůstat stejné nebo lepší)
- **Test coverage** - % testovaného kódu (Copilot pomáhá i s testy)
- **Type safety score** - TypeScript strict mode violations

**Nástroje pro měření:**
```bash
# VS Code extension: GitHub Copilot Analytics
# Zobrazuje:
- Acceptance rate (mělo být 25-40% pro dobré využití)
- Suggestions shown vs. accepted
- Time saved estimate

# SonarQube / ESLint metrics:
npm run lint -- --format json > metrics.json
# Analyzujte trends over time
```

### 6.2 A/B Testing: Copilot ON vs. OFF

**Experiment setup:**
1. **Week 1:** Vypněte Copilot, měřte baseline
2. **Week 2:** Zapněte Copilot, použijte best practices z tohoto průvodce
3. **Porovnejte:**
- Features shipped
- Bugs reported
- Code review comments
- Developer satisfaction (subjektivní, ale důležité!)

**Očekávané výsledky pro mid-level dev:**
- ⬆️ +50% rychlejší boilerplate code
- ⬆️ +30% rychlejší implementace features
- ➡️ Podobná bug rate (s dobrým code review)
- ⬆️ +80% rychlejší psaní testů

---

## 🚫 7. Typické Chyby & Jak Se Jim Vyhnout

### 7.1 Chyba #1: Slepá Důvěra v Copilot

**Špatně:**
```typescript
// Přijímáte každý návrh bez review
const user = await getUser(id);
user.delete(); // Runtime error pokud user je null!
```

**Správně:**
```typescript
const user = await getUser(id);
if (!user) throw new Error("User not found");
await user.delete();
```

**Fix:** Vždy aplikujte checklist z sekce 3.

### 7.2 Chyba #2: Vágní Komentáře

**Špatně:**
```typescript
// create function
```

**Správně:**
```typescript
// tRPC mutation to create user with email/password, hash password with bcrypt,
// validate email uniqueness, send verification email, return User object
```

### 7.3 Chyba #3: Ignorování Kontextu

**Špatně:** Psaní kódu v izolovaném souboru bez otevřených souvisejících souborů.

**Správně:** Otevřete:
- Type definitions
- Related services/routers
- Configuration files
→ Copilot navrhne konzistentní kód.

### 7.4 Chyba #4: Přehlížení Security

Copilot často generuje "happy path" kód. **Vždy přidejte:**
- Input validation
- Authorization checks
- Error handling
- Rate limiting (pro API endpoints)

---

## 🎓 Závěr: Váš Action Plan

### Week 1: Onboarding
- [ ] Nainstalujte Copilot, nakonfigurujte VS Code
- [ ] Projděte si sekce 1-2 tohoto průvodce
- [ ] Vyzkoušejte 5 pattern examples na toy projektu
- [ ] Změřte baseline produktivity

### Week 2: Integration
- [ ] Použijte Copilot na reálném projektu
- [ ] Aplikujte code review checklist na všechny AI návrhy
- [ ] Vytvořte 10+ komentářů podle section 2 patterns
- [ ] Sledujte acceptance rate (target: 30-40%)

### Week 3: Optimization
- [ ] Refactorujte projekt strukturu pro lepší context
- [ ] Vytvořte custom snippets pro vaše nejčastější patterns
- [ ] Naučte tým best practices
- [ ] Změřte produktivitu, compare s Week 1

### Week 4: Mastery
- [ ] Experimentujte s pokročilými technikami (multi-file workflows)
- [ ] Sdílejte findings s týmem
- [ ] Dokumentujte project-specific patterns
- [ ] Kontinuálně optimalizujte acceptance rate

**Klíčové Takeaways:**
1. **Context is king** - Otevřené soubory, dobrá struktura projektu
2. **Prompt like a senior** - Specifické, detailní komentáře
3. **Review everything** - Type safety, security, errors
4. **Measure & iterate** - KPIs, A/B testing, continuous improvement

S touto strategií byste měli dosáhnout **40-60% zvýšení produktivity** při zachování kvality kódu. Copilot není náhrada za vaše znalosti - je to nástroj, který je zesiluje. 🚀

---

## 📚 Dodatečné Zdroje

- [GitHub Copilot Docs](https://docs.github.com/en/copilot)
- [TypeScript Best Practices](https://typescript-eslint.io/)
- [tRPC Documentation](https://trpc.io/)
- [Next.js 14 App Router](https://nextjs.org/docs)
- VS Code Extension: "GitHub Copilot Labs" (experimentální features)

**Úspěch s Copilotem je o učení se spolupracovat s AI - ne ji nahrazovat vaše myšlení!** 💡

Kde použít tento prompt?

Najděte vhodné AI nástroje pro použití tohoto promptu a maximalizujte jeho efektivitu.

Objevte další AI prompty

Prozkoumejte naši sbírku Programování promptů a najděte ty, které vám pomohou dosáhnout lepších výsledků.