Dokumentacja to most między genialnym kodem a deweloperami, którzy muszą go zrozumieć, utrzymywać i rozszerzać. Claude Code przekształca dokumentację z przerażającego obowiązku w zautomatyzowany proces, który nadąża za szybko ewoluującą bazą kodu. Ta lekcja eksploruje jak generować wszystko od referencji API po diagramy architektoniczne.
Scenariusz: Twój startup właśnie osiągnął product-market fit. Baza kodu urosła 10x w sześć miesięcy. Nowi deweloperzy dołączają co tydzień. Wiki jest trzy sprinty za rzeczywistością. Customer support nie może wyjaśnić nowych funkcji bo dokumentacja nie istnieje. Brzmi znajomo? Oto jak Claude Code to rozwiązuje.
Tydzień 1: Plan sprintu dokumentacji
- Przydziel pisarzy do każdego modułu
- Przejrzyj istniejące (przestarzałe) dokumenty
- Przeprowadź wywiady z deweloperami o kontekst
Tydzień 2-3: Pisanie dokumentacji
- Tworzenie diagramów ręcznie
- Liczenie że nic się nie zmieni
Tydzień 4: Przeglądy i aktualizacje
- Przegląd techniczny przez deweloperów
- Zaktualizuj o ostatnie zmiany
Rezultat: Przestarzałe zanim zostanie opublikowane
Dzień 1: Automatyczne generowanie
> Wygeneruj kompletną dokumentację API dla naszej usługi
> Uwzględnij przykłady, typy i odpowiedzi błędów
> Stwórz dokumentację architektury z diagramami
> Skup się na przepływie danych i interakcjach usług
> Napisz przewodniki użytkownika dla każdej funkcji
> Kieruj zarówno do deweloperów jak i końcowych użytkowników
Dzień 2: Przegląd i polerowanie
- Szkice wygenerowane przez AI gotowe
- Deweloperzy sprawdzają dokładność
- Ciągłe aktualizacje z kodem
Rezultat: Zawsze aktualne, kompleksowe dokumenty
Skonfiguruj szablony dokumentacji
Stwórz .claude/commands/generate-docs.md
:
Wygeneruj dokumentację dla: $ARGUMENTS
1. Przeanalizuj strukturę kodu i wzorce
2. Wygeneruj odpowiednią dokumentację:
- Dokumenty API dla endpointów
- JSDoc/TSDoc dla funkcji
- Przegląd architektury dla systemów
- Przewodniki użytkownika dla funkcji
3. Uwzględnij przykłady kodu
4. Dodaj diagramy gdzie pomocne
5. Przestrzegaj naszego przewodnika stylu
Skonfiguruj preferencje dokumentacji
W .claude/settings.json
:
"diagramTool" : " mermaid " ,
"languages" : [ " en " , " es " , " zh " ]
Stwórz przewodnik stylu
> Stwórz przewodnik stylu dokumentacji który obejmuje:
> - Ton i styl (profesjonalny ale przystępny)
> - Standardy formatowania
Skonfiguruj hooki auto-generowania
> Stwórz hooka git który przypomina o aktualizacji dokumentów:
> - Przy merge feature branch
> - Gdy endpointy API się zmieniają
> - Po większym refactoringu
> Wygeneruj kompleksową dokumentację API dla naszych endpointów REST.
> - URL endpointów i metody
> - Schematy request/response
> - Wymagania uwierzytelniania
> - Szczegóły limitów częstotliwości
> - Przykładowe requesty i responses
> - Kody błędów i ich znaczenia
Claude generuje strukturalną dokumentację:
Przegląd endpointów
Wszystkie endpointy wymagają uwierzytelniania Bearer token:
Authorization: Bearer <token>
- 1000 requestów na godzinę na użytkownika
- Status 429 gdy przekroczony
- Header X-RateLimit-Remaining
Produkcja: https://api.example.com/v2
Staging: https://staging-api.example.com/v2
Szczegóły endpointu
Pobierz pojedynczego użytkownika po ID.
| Nazwa | Typ | W | Opis |
|------|------|-----|-------------|
| id | string | path | UUID użytkownika |
| include | string | query | Dane powiązane oddzielone przecinkami |
"id" : " 123e4567-e89b-12d3-a456-426614174000 " ,
"email" : " user@example.com " ,
"created_at" : " 2024-01-15T09:30:00Z " ,
"avatar_url" : " https://... " ,
"bio" : " Deweloper oprogramowania "
"error" : " USER_NOT_FOUND " ,
"message" : " Użytkownik o podanym ID nie został znaleziony "
<Card title="Przykłady kodu">
const response = await fetch('https://api.example.com/v2/users/123', {
'Authorization': 'Bearer your-token-here'
const user = await response.json();
'https://api.example.com/v2/users/123',
headers={'Authorization': 'Bearer your-token-here'}
curl -X GET https://api.example.com/v2/users/123 \
-H "Authorization: Bearer your-token-here"
Specyfikacja OpenAPI
summary : Pobierz użytkownika po ID
description : Użytkownik znaleziony
$ref : ' #/components/schemas/User '
> Wygeneruj dokumentację schematu GraphQL z:
> - Przykładami query i mutacji
Rezultat:
Typ User reprezentujący uwierzytelnionego użytkownika w systemie
"""Unikalny identyfikator"""
"""Adres email użytkownika"""
"""Posty użytkownika z paginacją"""
"""Liczba postów do zwrócenia"""
"""Kursor do paginacji"""
"""Data utworzenia konta użytkownika"""
"""Pobierz aktualnie uwierzytelnionego użytkownika"""
"""Znajdź użytkownika po ID"""
"""Szukaj użytkowników po nazwie lub emailu"""
searchUsers ( query : String ! ): [ User ! ] !
> Przeanalizuj naszą bazę kodu i stwórz kompleksową dokumentację architektury:
> - Przegląd systemu i komponenty
> - Diagramy przepływu danych
> - Szczegóły stacku technologicznego
> - Architektura wdrożenia
Claude generuje:
Nasza platforma następuje architekturę mikroserwisów z tymi głównymi komponentami:
- ** Technologia ** : Next.js 14 z TypeScript
- ** Zarządzanie stanem ** : Zustand + React Query
- ** Framework UI ** : Tailwind CSS + Radix UI
1. ** API Gateway ** (Node.js/Express)
2. ** User Service ** (Node.js)
- Zarządzanie użytkownikami
- Uwierzytelnianie/autoryzacja
3. ** Product Service ** (Python/FastAPI)
- Funkcjonalność wyszukiwania
4. ** Order Service ** (Go)
- ** Główna baza danych ** : PostgreSQL 15
- ** Wyszukiwanie ** : Elasticsearch 8
- ** Kolejka wiadomości ** : RabbitMQ
graph TB
subgraph "Warstwa klienta"
Web[Aplikacja Web]
Mobile[Aplikacja mobilna]
end
subgraph "Warstwa API"
Gateway[API Gateway]
Auth[Auth Service]
end
subgraph "Warstwa usług"
User[User Service]
Product[Product Service]
Order[Order Service]
Notification[Notification Service]
end
subgraph "Warstwa danych"
PG[(PostgreSQL)]
Redis[(Redis)]
ES[(Elasticsearch)]
MQ[RabbitMQ]
end
Web --> Gateway
Mobile --> Gateway
Gateway --> Auth
Auth --> User
Gateway --> Product
Gateway --> Order
Order --> MQ
MQ --> Notification
User --> PG
Product --> PG
Product --> ES
Order --> PG
Gateway --> Redis
# Architektura wdrożenia Kubernetes
## Klaster produkcyjny (AWS EKS)
- Region : us-east-1 (główny), us-west-2 (failover)
- Ogólne : t3.large (3-10 węzłów)
- Obliczeniowe : c5.xlarge (2-5 węzłów)
- Pamięć : r5.large (2-4 węzły)
- API Gateway : 3 repliki, HPA (CPU 70%)
- User Service : 2 repliki, HPA (CPU 60%)
- Product Service : 3 repliki, HPA (Memory 70%)
- Order Service : 2 repliki, HPA (CPU 50%)
- Load Balancer : AWS ALB z WAF
- Storage : S3 dla assetów
- Baza danych : RDS Multi-AZ PostgreSQL
- Cache : Klaster ElastiCache Redis
> Udokumentuj moduł uwierzytelniania:
> - Cel i odpowiedzialności
> - Architektura wewnętrzna
Wygenerowana dokumentacja:
Moduł uwierzytelniania zapewnia bezpieczne uwierzytelnianie i autoryzację użytkowników dla całej aplikacji. Implementuje uwierzytelnianie oparte na JWT z tokenami odświeżania i obsługuje wielu dostawców uwierzytelniania.
- Generowanie i walidacja tokenów JWT
- Rotacja tokenów odświeżania
- Integracja OAuth2 (Google, GitHub, Microsoft)
- Kontrola dostępu oparta na rolach (RBAC)
- Uwierzytelnianie wieloczynnikowe (MFA)
Główna klasa serwisu obsługująca logikę uwierzytelniania.
* Uwierzytelnij użytkownika emailem i hasłem
* @returns JWT access token i refresh token
async login ( email : string , password : string ) : Promise < AuthTokens >
* Waliduj i odśwież access token
async refreshToken ( refreshToken : string ) : Promise < AuthTokens >
* Odwołaj wszystkie sesje użytkownika
async logout ( userId : string ) : Promise < void >
Obsługuje operacje tokenów JWT.
Bezpieczne hashowanie i walidacja haseł.
Klasa abstrakcyjna dla integracji OAuth.
Przechowywanie haseł : Bcrypt z czynnikiem kosztu 12
Bezpieczeństwo tokenów :
Access tokeny: 15 minut TTL
Refresh tokeny: 7 dni TTL, jednorazowe użycie
Tokeny podpisane RS256
Limity częstotliwości : 5 prób logowania na 15 minut
Bezpieczeństwo sesji : Bezpieczne, httpOnly, sameSite cookies
### Generowanie dokumentacji inline
Dodaj kompleksowe komentarze JSDoc do naszych funkcji narzędziowych:
Opisz cel
Udokumentuj parametry i zwracane wartości
Uwzględnij przykłady użycia
Zanotuj efekty uboczne
function calculateDiscount(price, discountPercent, maxDiscount) {
const discount = price * (discountPercent / 100);
return Math.min(discount, maxDiscount || Infinity);
Po:
* Oblicza kwotę rabatu dla danej ceny i procentu rabatu
* @param {number} price - Cena oryginalna w groszach
* @param {number} discountPercent - Procent rabatu (0-100)
* @param {number} [maxDiscount] - Opcjonalna maksymalna kwota rabatu w groszach
* @returns {number} Obliczona kwota rabatu w groszach, ograniczona do maxDiscount jeśli podano
* calculateDiscount(10000, 20) // zwraca 2000
* // 50% rabat na 100 zł, ograniczony do 30 zł
* calculateDiscount(10000, 50, 3000) // zwraca 3000
function calculateDiscount ( price , discountPercent , maxDiscount ) {
const discount = price * ( discountPercent / 100 );
return Math . min ( discount , maxDiscount || Infinity );
> Wygeneruj dokumentację typów TypeScript dla naszych modeli danych
* Reprezentuje użytkownika w systemie
/** Unikalny identyfikator użytkownika */
/** Adres email użytkownika - musi być unikalny */
/** Nazwa wyświetlana użytkownika */
/** Rola użytkownika określająca uprawnienia dostępu */
role : ' admin ' | ' user ' | ' guest ' ;
/** Znacznik czasu utworzenia konta */
/** Znacznik czasu ostatniej aktualizacji */
/** Opcjonalne informacje profilu użytkownika */
* Rozszerzone informacje profilu użytkownika
export interface UserProfile {
/** URL do awatara użytkownika */
/** Biografia lub opis użytkownika */
/** Lokalizacja użytkownika */
/** Linki do mediów społecznościowych */
> Stwórz diagram sekwencji dla naszego przepływu przetwarzania zamówień
sequenceDiagram
participant U as Użytkownik
participant F as Frontend
participant G as API Gateway
participant O as Order Service
participant P as Payment Service
participant I as Inventory Service
participant N as Notification Service
U->>F: Złóż zamówienie
F->>G: POST /orders
G->>G: Waliduj token auth
G->>O: Stwórz zamówienie
O->>I: Sprawdź zapasy
I-->>O: Zapasy dostępne
O->>P: Przetwórz płatność
P-->>O: Płatność udana
O->>I: Zarezerwuj zapasy
O->>N: Wyślij potwierdzenie
O-->>G: Zamówienie utworzone
G-->>F: Odpowiedź zamówienia
F-->>U: Pokaż potwierdzenie
Note over N,U: Async email wysłany
N-->>U: Email potwierdzenie
> Wygeneruj diagram ER dla naszych tabel użytkowników i zamówień
erDiagram
USER ||--o{ ORDER : places
USER ||--o{ ADDRESS : has
ORDER ||--|{ ORDER_ITEM : contains
PRODUCT ||--o{ ORDER_ITEM : "ordered in"
USER {
uuid id PK
string email UK
string name
string password_hash
timestamp created_at
}
ADDRESS {
uuid id PK
uuid user_id FK
string street
string city
string country
string postal_code
}
ORDER {
uuid id PK
uuid user_id FK
string status
decimal total
timestamp created_at
}
ORDER_ITEM {
uuid id PK
uuid order_id FK
uuid product_id FK
integer quantity
decimal price
}
PRODUCT {
uuid id PK
string name
string sku UK
decimal price
integer stock
}
> Stwórz dokumentację użytkownika dla naszej funkcji koszyka:
> - Instrukcje krok po kroku
> - Symbole zastępcze dla zrzutów ekranu
> - Rozwiązywanie problemów
Wygenerowany przewodnik:
Koszyk pozwala zbierać przedmioty przed zakupem, zapisywać je na później i zarządzać ilościami.
### Dodawanie przedmiotów do koszyka
1. ** Ze strony produktu **
- Kliknij przycisk "Dodaj do koszyka"
- Wybierz ilość (opcjonalnie)
- Wybierz opcje produktu (rozmiar, kolor, itp.)
![ Dodawanie do koszyka ze strony produktu ] ( screenshots/add-to-cart.png )
- Najedź na produkt w katalogu
- Przedmiot dodany z domyślnymi opcjami
### Zarządzanie koszykiem
#### Przeglądanie zawartości koszyka
- Kliknij ikonę koszyka w nagłówku
- Zobacz mini-koszyk w dropdownie
- Kliknij "Zobacz pełny koszyk" dla szczegółów
1. Przejdź do strony koszyka
2. Użyj przycisków +/- lub wpisz liczbę
3. Zmiany zapisują się automatycznie
#### Usuwanie przedmiotów
- Potwierdź usunięcie w popupie
### Zapisywanie na później
Przenieś przedmioty do listy życzeń:
1. Kliknij "Zapisz na później"
2. Przedmiot przesuwa się do listy życzeń
** Koszyk jest pusty po zalogowaniu **
- Rozwiązanie: Przedmioty koszyka są zapisywane na 30 dni
- Sprawdź czy wcześniej przeglądałeś jako gość
** Nie można zaktualizować ilości **
- Problem: Ograniczone zapasy dostępne
- Rozwiązanie: Sprawdź dostępność produktu
- Przedmioty pokazują aktualne ceny
- Wyprzedaże mogły się skończyć
- Oryginalna cena pokazana przekreślona
> Stwórz przewodnik integracji dla deweloperów używających naszego API
# Przewodnik integracji API
Uruchom się z naszym API w 5 minut.
curl -X POST https://api.example.com/v2/auth/api-keys \
-H "Content-Type: application/json" \
-d ' {"email": "you@example.com", "password": "your-password"} '
const API_KEY = ' your-api-key ' ;
const API_URL = ' https://api.example.com/v2 ' ;
fetch ( ` ${ API_URL } /products ` , {
' Authorization ' : ` Bearer ${ API_KEY } `
. then ( products => console . log ( products ));
Wszystkie odpowiedzi następują ten format:
"data" : { /* żądane dane */ },
"timestamp" : " 2024-01-15T10:00:00Z "
Najlepsze dla komunikacji serwer-serwer.
Najlepsze dla aplikacji użytkowników.
Szczegółowy przepływ OAuth →
// Pobierz stronę 2 z 50 przedmiotami na stronę
fetch ( ` ${ API_URL } /products?page=2&limit=50 ` )
// Filtruj produkty po kategorii i cenie
fetch ( ` ${ API_URL } /products?category=electronics&max_price=500 ` )
Zarejestruj webhooks dla aktualizacji real-time:
fetch ( ` ${ API_URL } /webhooks ` , {
' Authorization ' : ` Bearer ${ API_KEY } ` ,
' Content-Type ' : ' application/json '
url: ' https://your-app.com/webhook ' ,
events: [ ' order.created ' , ' order.updated ' ]
## Utrzymanie dokumentacji
### Utrzymywanie aktualności dokumentów
Stwórz przepływ aktualizacji dokumentacji:
Hooki git dla przypomnień o dokumentach
Automatyczne kontrole świeżości
Śledzenie wersji
Zawiadomienia o deprecacji
# Sprawdź czy pliki API się zmieniły
if git diff --cached --name-only | grep -q "api/"; then
echo "⚠️ Pliki API się zmieniły. Pamiętaj o aktualizacji dokumentów!"
echo "Uruchom: claude /generate-api-docs"
Kontrola świeżości dokumentacji
class DocFreshnessChecker {
const docs = await this . loadDocs ();
const code = await this . loadCode ();
for ( const doc of docs) {
const codeFile = this . findRelatedCode (doc);
if (codeFile . lastModified > doc . lastModified ) {
console . warn ( ` 📚 ${ doc . path } może być przestarzały ` );
Śledzenie wersji
code_version : commit:abc123
> ⚠️ Ta dokumentacja jest dla v2.3.0.
> Zobacz [ historię wersji ] ( ./versions ) dla innych wersji.
Przepływ deprecacji
* @deprecated Od v2.1.0. Użyj `newMethod` zamiast tego.
* Zostanie usunięta w v3.0.0.
console . warn ( ' oldMethod jest przestarzała. Użyj newMethod zamiast tego. ' );
> Wygeneruj dokumentację w wielu językach:
> - Uwzględnij adaptacje kulturowe
Claude generuje zlokalizowane wersje:
Welcome to our API! This guide will help you integrate quickly.
¡Bienvenido a nuestra API! Esta guía te ayudará a integrar rápidamente.
<!-- Chiński uproszczony -->
> 1. Najpierw napisz dokumentację
> 2. Uzyskaj zatwierdzenie interesariuszy
> 3. Implementuj zgodnie z dokumentami
> 4. Zaktualizuj dokumenty z doświadczeniami
> Skonfiguruj ciągłą dokumentację:
> - Auto-generacja z komentarzy kodu
> - Aktualizacja z każdym wdrożeniem
> - Uwzględnienie w pipeline CI/CD
> - Monitorowanie pokrycia dokumentacji
> Każdy endpoint API powinien mieć:
> - Kompletny przykład requestu
> - Przykład udanej odpowiedzi
> - Przykłady odpowiedzi błędów
> - Częste przypadki użycia
> Stwórz interaktywną dokumentację API:
> - Wbudowany playground API
> - Snippety gotowe do copy-paste
> - Wizualizacja odpowiedzi
Śledź jakość dokumentacji:
> Stwórz dashboard dokumentacji pokazujący:
> - Pokrycie (% udokumentowanego kodu)
> - Świeżość (dni od aktualizacji)
> - Kompletność (wymagane sekcje)
> - Użycie (odsłony stron, czas na stronie)
> - Feedback (oceny pomocności)
Nauczyłeś się jak przekształcić Claude Code w potęgę dokumentacji. Kluczem jest traktowanie dokumentacji jako kodu - zautomatyzowanego, kontrolowanego wersjami i ciągle aktualizowanego. Koniec z przestarzałymi wiki czy brakującymi dokumentami API.
Pamiętaj: Najlepsza dokumentacja to ta która istnieje i pozostaje aktualna. Użyj Claude Code aby tak dramatycznie obniżyć barierę tworzenia dokumentacji, że utrzymywanie aktualnych dokumentów stanie się trywialne. Twoje przyszłe ja (i współpracownicy) będą ci dziękować.