Przejdź do głównej zawartości

Budowanie pierwszej funkcji z Claude Code

Masz zainstalowany, skonfigurowany Claude Code połączony z twoimi narzędziami. Twój CLAUDE.md opisuje twój projekt. Teraz czas faktycznie coś zbudować. Nie zabawkowy przykład — prawdziwą funkcję, która dotyka wielu plików, potrzebuje testów i musi przejść twój pipeline CI.

Ten poradnik prowadzi przez pełny cykl rozwoju: zrozumienie wymagania, implementację w wielu plikach, uruchamianie testów, debugowanie błędów i przygotowanie czystego PR. Zobaczysz dokładne prompty, które utrzymują Claude skupionego i produktywnego.

  • Powtarzalny workflow dla rozwoju funkcji z Claude Code
  • Prompty produkujące kod jakości produkcyjnej, nie prototypy
  • Strategie utrzymywania Claude na właściwej ścieżce podczas zmian w wielu plikach
  • Wzorce przyrostowej implementacji z weryfikacją na każdym kroku

Każda funkcja podąża za tym samym podstawowym cyklem:

  1. Zrozum — Niech Claude przeanalizuje wymaganie i dotknięty kod
  2. Zaplanuj — Uzyskaj ustrukturyzowany plan implementacji przed jakimikolwiek edycjami
  3. Zaimplementuj — Buduj przyrostowo, jeden komponent na raz
  4. Zweryfikuj — Uruchamiaj testy, sprawdzaj typy i lintuj po każdej zmianie
  5. Przejrzyj — Niech Claude przejrzy swoją własną pracę pod kątem problemów
  6. Commituj — Twórz czyste, opisowe commity

Przejdźmy przez każdy krok z prawdziwym przykładem: dodawaniem endpointu wyszukiwania do REST API.

Zacznij każdą funkcję od dania Claude pełnego kontekstu:

Claude przeczyta twoją bazę kodu, zidentyfikuje odpowiednie wzorce i da ci podsumowanie. Ten krok zapobiega najczęstszemu błędowi: Claude generuje kod, który nie pasuje do twoich istniejących wzorców.

Gdy Claude zrozumie bazę kodu, poproś o plan:

Based on your analysis, create an implementation plan for the search
endpoint. I want:
1. The route path and HTTP method
2. Input validation schema
3. Database query approach
4. Response format matching existing endpoints
5. Error handling following current patterns
6. Test cases we need
Number each step. Do not write code until I approve.

Przejrzyj plan. Odrzuć tam, gdzie potrzeba:

Change the database query to use a GIN index instead of LIKE.
Also, add pagination to the response -- our other list endpoints
use cursor-based pagination, not offset.

Nie proś Claude o implementację wszystkiego naraz. Buduj jeden element na raz:

Implement step 1 from the plan: create the Zod validation schema
for the search endpoint in the existing validators file.

Po dokonaniu zmiany przez Claude, zweryfikuj:

Run the type checker to make sure the new schema is valid.

Następnie przejdź do kolejnego kroku:

Now implement step 2: the database query function. Use the existing
query patterns from the users module as a reference.

To przyrostowe podejście wychwytuje problemy wcześnie. Jeśli zapytanie bazodanowe Claude ma błąd typu, wychwytasz go przed zbudowaniem handlera routu na jego podstawie.

Uczyń weryfikację nawykiem, nie przemyśleniem. To są prompty, które dajesz Claude, a nie polecenia powłoki — Claude uruchamia za Ciebie odpowiednie narzędzia.

Po każdej zmianie poproś Claude o uruchomienie sprawdzeń:

Uruchom npm run type-check i npm run lint. Napraw wszelkie błędy przed kontynuowaniem.

Po zaimplementowaniu logiki uruchom odpowiednie testy:

Uruchom testy dla modułu wyszukiwania. Jeśli jakieś się nie powiodą, przeanalizuj awarię i napraw ją przed dalszym postępem.

Po zakończeniu całej implementacji uruchom pełny zestaw:

Uruchom kompletny zestaw testów i linter. Pokaż mi podsumowanie wszelkich awarii.

Zanim commitniesz, niech Claude przejrzy swoje własne zmiany:

Claude często wychwytuje problemy, które sam wprowadził — brakujące sprawdzenia null, niespójne formaty błędów lub testy, które nie pokrywają przypadków brzegowych. Napraw te przed PR.

Gdy jesteś zadowolony z implementacji, po prostu poproś Claude o commit w trakcie sesji:

Commit these changes with a descriptive message that explains what
was added and why. Use conventional commit format.

Claude generuje komunikat commit na podstawie faktycznego diff, nie ogólnego opisu. Nie ma podpolecenia claude commit — commituj, prosząc o to w sesji jak powyżej, uruchamiając git commit samodzielnie albo, dla jednorazowego polecenia z powłoki, w trybie bezgłowym:

Okno terminala
claude -p "commit the staged changes with a conventional commit message"

Długie sesje prowadzą do dryfowania. Jeśli Claude zaczyna tracić kontekst o twoich wzorcach:

Re-read our CLAUDE.md and the existing search module at
@src/modules/search/. Then continue implementing the response
formatter using the same patterns.

Dla funkcji zajmujących więcej niż 30-40 minut, podziel je na wiele sesji:

  • Sesja 1: Schemat i zmiany bazodanowe
  • Sesja 2: Ruta API i logika biznesowa
  • Sesja 3: Testy i integracja
  • Sesja 4: Review, dopracowanie i PR

Użyj claude -c, aby kontynuować jedną, ostatnią rozmowę, albo claude -r "<session-name>" "<query>", aby wznowić konkretną wcześniejszą sesję po ID lub nazwie (na przykład claude -r "schema-changes" "now add the migration"). Zacznij na świeżo z claude, jeśli chcesz czysty kontekst.

Jeśli odpowiedzi Claude zaczynają się pogarszać lub wydaje się zapominać wcześniejsze decyzje:

/compact

To podsumowuje rozmowę i zwalnia miejsce kontekstowe. Śledź to krótkim przypomnieniem, nad czym pracujesz.

Zamiast niejasnych żądań, wskaż Claude na dokładne pliki:

# Instead of this:
Update the search module to add filtering
# Do this:
Add a category filter parameter to @src/api/routes/search.ts
following the pattern used in @src/api/routes/products.ts

Dla aplikacji webowych Claude może uruchomić twój serwer deweloperski i sprawdzić wyniki:

Start the dev server, then make a curl request to the new search
endpoint with the query "typescript". Show me the response.

Proszenie o wszystko naraz — “Zbuduj kompletną funkcję wyszukiwania z testami, paginacją, cachowaniem i monitoringiem” wyprodukuje przeciętny kod. Rozłóż to.

Brak weryfikacji między krokami — Jeśli pozwolisz Claude zaimplementować pięć plików przed uruchomieniem type checkera, spędzisz więcej czasu na naprawianiu kaskadowych błędów niż zaoszczędziłeś.

Akceptowanie kodu bez jego zrozumienia — Claude wyjaśni swoje zmiany, jeśli zapytasz. Jeśli nie rozumiesz, dlaczego coś zostało zrobione w określony sposób, zapytaj: “Dlaczego użyłeś kursora zamiast offsetu dla paginacji?”

Ignorowanie CLAUDE.md — Jeśli Claude ciągle generuje kod niezgodny z twoimi wzorcami, twój CLAUDE.md brakuje kluczowych informacji. Zaktualizuj go i powiedz Claude, aby go ponownie przeczytał.

Claude modyfikuje złe pliki — Bądź precyzyjny co do ścieżek plików. Używaj wzmianek @ do odnoszenia się do dokładnych plików zamiast opisywania ich nazwą.

Wygenerowany kod się nie kompiluje — Uruchamiaj type checker po każdej zmianie. Jeśli Claude generuje błędy TypeScript, powiedz mu: “Type checker znalazł błędy. Napraw je przed kontynuowaniem.”

Testy przechodzą, ale funkcja nie działa — Testy mogą nie pokrywać faktycznego zachowania. Poproś Claude o przetestowanie funkcji end-to-end z prawdziwym żądaniem, nie tylko testami jednostkowymi.

Claude utyka w pętli — Jeśli Claude ciągle próbuje tego samego podejścia i zawodzi, przerwij nowym kierunkiem: “Stop. To podejście nie działa. Zamiast tego spróbuj [alternatywne podejście].” Czasami /clear i świeży start jest szybszy niż naprawianie zdezorientowanej sesji.

Mając zaimplementowaną funkcję, naucz się zarządzać branchami, tworzyć czyste commity i otwierać PR z integracją git Claude Code.