Copilot gợi ý từng dòng code. ChatGPT trả lời câu hỏi rồi bạn tự copy-paste. Claude Code thì khác — nó đọc cả codebase của bạn, tự tìm file liên quan, tự viết code, tự chạy command, tự sửa lỗi, rồi commit luôn nếu bạn cho phép. Tất cả từ terminal, không cần IDE plugin.
Nghe như quảng cáo, nhưng mình đã dùng Claude Code hàng ngày được vài tháng rồi. Nó không hoàn hảo — có lúc sai, có lúc loop, có lúc hiểu nhầm context. Nhưng khi dùng đúng cách, năng suất tăng đáng kể cho những task nhất định.
Bài viết này chia sẻ cách mình dùng Claude Code hiệu quả nhất — từ setup, prompting technique, đến những workflow thực tế và giới hạn cần biết.
Claude Code là gì?
Claude Code là command-line tool của Anthropic. Không phải chatbot — nó là agentic coding assistant chạy trong terminal, có khả năng:
- Đọc và hiểu cấu trúc toàn bộ project
- Tạo, sửa, xóa file
- Chạy terminal command (build, test, lint, git...)
- Tự sửa lỗi khi build fail, test fail
- Tương tác nhiều lượt — hỏi lại, xác nhận trước khi thực hiện
Khác biệt lớn nhất so với ChatGPT hay Copilot: Claude Code có context toàn bộ project. Nó không chỉ thấy file bạn đang mở — nó thấy cả cấu trúc thư mục, đọc file liên quan, hiểu mối quan hệ giữa các module.
Cài đặt
# cài global qua npm
npm install -g @anthropic-ai/claude-code
# chạy trong thư mục project
cd your-project
claude
Cần Anthropic API key hoặc đăng nhập Anthropic account. Claude Code sẽ đọc thư mục hiện tại làm context.
Lần đầu chạy, nó sẽ scan cấu trúc project — file tree, package.json, .csproj, README, config files — để hiểu đây là project gì, dùng stack nào, convention ra sao.
Workflow 1: Feature mới từ đầu
Đây là lúc Claude Code mạnh nhất — khi bạn cần scaffold một feature hoàn chỉnh mà nó có đủ context để hiểu pattern hiện tại.
❯ Thêm CRUD endpoint cho entity Product.
Product có: Id, Name, Price, Category, IsActive.
Theo đúng pattern của OrdersController đang có.
Tạo DTO, validator, và unit test.
Claude Code sẽ:
- Đọc
OrdersControllerđể hiểu pattern - Đọc
OrderDto,CreateOrderRequestđể hiểu convention DTO - Tạo
Product.cs,ProductDto.cs,CreateProductRequest.cs - Tạo
ProductsController.cstheo đúng pattern Orders - Tạo
ProductValidator.csnếu project dùng FluentValidation - Tạo
ProductsControllerTests.cs - Chạy
dotnet buildđể verify - Chạy
dotnet testđể chạy test mới
Cái hay là câu "Theo đúng pattern của OrdersController" — nó sẽ bắt chước convention có sẵn thay vì tự sáng tạo. Naming convention, folder structure, error handling pattern — tất cả copy theo code hiện tại. Đây là điểm mà copy-paste từ ChatGPT không bao giờ làm được tốt.
Prompt tip: nêu rõ file tham chiếu
❯ Tạo NotificationService theo pattern của EmailService
trong src/Services/EmailService.cs.
Dùng same DI pattern, same logging convention.
Càng chỉ rõ file tham chiếu, output càng consistent với codebase hiện tại.
Workflow 2: Refactor code cũ
❯ Refactor UserService.cs:
- Tách method ProcessOrder (80 dòng) thành
các private method nhỏ hơn
- Extract validation logic ra validator riêng
- Giữ nguyên behavior, test phải vẫn pass
Claude Code đọc file, đọc test liên quan, refactor, rồi chạy test để đảm bảo không break gì. Dòng cuối cùng — "test phải vẫn pass" — rất quan trọng. Nó buộc Claude Code verify bằng cách chạy test suite, không chỉ "nghĩ" là đúng.
Refactor lớn hơn:
❯ Chuyển tất cả controller từ async Task<IActionResult>
sang dùng TypedResults (minimal API pattern).
Làm từng controller một, chạy test sau mỗi controller.
"Làm từng controller một" là kỹ thuật quan trọng — tránh Claude Code thay đổi 20 file cùng lúc rồi build fail không biết lỗi ở đâu. Chia nhỏ, verify từng bước.
Workflow 3: Debug và fix lỗi
Copy stack trace vào prompt:
❯ Fix lỗi này:
System.InvalidOperationException:
Unable to resolve service for type
'IProductRepository' while attempting to
activate 'ProductService'.
Stack trace chỉ vào Program.cs dòng 42.
Claude Code sẽ đọc Program.cs, tìm thiếu DI registration, đọc IProductRepository và implementation, rồi thêm dòng builder.Services.AddScoped<IProductRepository, ProductRepository>() đúng chỗ.
Với bug phức tạp hơn:
❯ API /api/orders trả về duplicate items khi có
nhiều payment methods. Mình nghĩ do Include
tạo cartesian product. Check và fix giúp.
Nó sẽ đọc query, nhận ra vấn đề Cartesian Explosion khi Include nhiều collection, và suggest AsSplitQuery() hoặc restructure query. Kèm giải thích tại sao — không chỉ fix mù.
Workflow 4: Viết test
❯ Viết unit test cho CartService.cs.
Cover các case: add item, add duplicate (tăng quantity),
remove item, remove item không tồn tại,
update quantity = 0 thì auto remove,
tính total price với discount.
Dùng xUnit + Moq theo convention test hiện tại.
Claude Code nhìn vào test folder, hiểu convention (xUnit hay NUnit, Moq hay NSubstitute, file naming, arrange-act-assert pattern), rồi tạo test file phù hợp.
Test cho endpoint:
❯ Viết integration test cho ProductsController.
Dùng WebApplicationFactory như OrdersControllerTests.
Test cả happy path lẫn validation error.
Workflow 5: Git operations
❯ Review changes hiện tại và tạo commit message
theo conventional commits format.
Claude Code chạy git diff, đọc changes, tạo commit message chuẩn:
feat(products): add CRUD endpoints with pagination
- Add ProductsController with GET, POST, PUT, DELETE
- Add ProductDto and CreateProductRequest with validation
- Add unit tests for ProductService
- Register new services in DI container
Hoặc mạnh hơn:
❯ Xem git log 10 commits gần nhất và tóm tắt
những gì đã thay đổi trong sprint này.
Workflow 6: Đọc hiểu codebase mới
Đây là use case mà ít người nghĩ đến nhưng cực kỳ hữu ích:
❯ Giải thích kiến trúc project này.
Entry point ở đâu, request đi qua những layer nào,
DI setup thế nào, database dùng gì.
Claude Code scan toàn bộ project và trả lời chi tiết. Nhanh hơn nhiều so với tự mò README và code.
❯ Tôi cần sửa logic tính giá shipping.
Logic đó nằm ở file nào?
Nó phụ thuộc vào những service nào?
Prompting techniques nâng cao
1. CLAUDE.md — config file cho project
Tạo file CLAUDE.md ở root project — Claude Code đọc file này đầu tiên:
# Project: E-commerce API
## Stack
- .NET 8, PostgreSQL, EF Core
- xUnit + Moq for testing
- FluentValidation for request validation
## Conventions
- Controllers inherit from BaseApiController
- All responses wrapped in ApiResponse<T>
- Use records for DTOs
- Folder structure: Features/{Feature}/
- Test file naming: {Class}Tests.cs
## Important
- NEVER modify migration files manually
- Always run `dotnet test` after code changes
- Use `DateTimeOffset.UtcNow` not `DateTime.Now`
File này như system prompt cho Claude Code trong project của bạn. Mỗi lần chạy, nó đọc CLAUDE.md để hiểu convention, constraint, và gotchas. Team member mới join cũng hưởng lợi từ file này.
2. Chia nhỏ task phức tạp
# ❌ Quá rộng — output sẽ không tốt
❯ Xây dựng hệ thống authentication hoàn chỉnh
# ✅ Chia nhỏ — mỗi prompt một phần rõ ràng
❯ Bước 1: Tạo entity User với Id, Email,
PasswordHash, Role. Tạo migration.
❯ Bước 2: Tạo AuthService với method Register
và Login. Dùng BCrypt hash password.
❯ Bước 3: Tạo JwtService generate token.
Đọc config từ appsettings.json.
❯ Bước 4: Tạo AuthController với endpoint
POST /register và POST /login.
❯ Bước 5: Viết integration test cho cả flow.
Mỗi bước Claude Code build, test, verify xong rồi mới đến bước tiếp. Nếu step 3 fail, bạn biết ngay vấn đề ở đâu.
3. Constraint rõ ràng
❯ Thêm caching cho GetProducts endpoint.
- Dùng IMemoryCache, KHÔNG dùng Redis
- Cache 5 phút
- Invalidate khi có POST/PUT/DELETE product
- KHÔNG sửa ProductsController structure,
chỉ thêm caching logic
"KHÔNG" rất hiệu quả — nó ngăn Claude Code tự ý refactor hoặc thêm dependency bạn không muốn.
4. Yêu cầu giải thích trước khi code
❯ Tôi muốn thêm real-time notification bằng SignalR.
TRƯỚC KHI CODE, hãy:
1. Liệt kê file nào cần tạo/sửa
2. Giải thích approach
3. Đợi tôi confirm rồi mới bắt đầu
Kiểm soát — không để Claude Code tự chạy mà không hiểu nó định làm gì.
Những lệnh hữu ích
Trong Claude Code session, có vài command built-in:
# xem file tree
/ls
# đọc file cụ thể
/read src/Api/Controllers/OrdersController.cs
# chạy command
/run dotnet test
# clear context nếu conversation quá dài
/clear
# thoát
/exit
Và một số prompt pattern:
# code review
❯ Review file UserService.cs — tìm bug,
performance issue, và security concern.
# explain
❯ Giải thích method CalculateDiscount trong
PricingService.cs. Nó handle edge case nào?
# convert
❯ Convert callback-based code trong LegacyService.cs
sang async/await pattern.
# document
❯ Thêm XML documentation cho tất cả public method
trong ProductsController.cs
So sánh với Copilot và Cursor
Claude Code Copilot Cursor
─────────────────────────────────────────────────────────
Interface Terminal/CLI IDE inline IDE full
Context scope Whole project Current file Current file + selected
Multi-file edit Tự động Không Có (Composer)
Run commands Có Không Có
Git integration Có Không Hạn chế
Self-correction Có (chạy lại) Không Hạn chế
Best for Complex tasks Line-by-line Interactive edit
Learning curve Trung bình Thấp Thấp
─────────────────────────────────────────────────────────
Claude Code không thay thế Copilot — chúng bổ sung cho nhau. Copilot cho autocomplete nhanh khi bạn đang code. Claude Code cho task lớn hơn: scaffold feature, refactor module, debug complex issue, viết test suite.
Mình dùng cả hai: Copilot bật trong VS Code cho inline suggestion, Claude Code mở terminal bên cạnh cho task cần context rộng.
Giới hạn thực tế
Hallucination vẫn xảy ra. Claude Code có thể gọi API không tồn tại, dùng method signature sai, hoặc reference package cũ. Luôn review code nó tạo ra — đặc biệt khi liên quan đến external API hay library bạn không quen.
Context window có giới hạn. Project rất lớn (monorepo hàng nghìn file) sẽ không fit hết vào context. Claude Code thông minh trong việc chọn file liên quan, nhưng đôi khi nó miss file quan trọng. Nếu output không đúng, thử chỉ rõ file cần đọc.
Chậm hơn tự code cho task nhỏ. Thêm một dòng log? Sửa typo? Đổi tên biến? Tự làm nhanh hơn. Claude Code tỏa sáng với task từ trung bình trở lên — tạo file mới, refactor, multi-file changes.
Cost. Claude Code dùng API Anthropic — mỗi prompt tốn token. Task phức tạp có thể tốn nhiều token vì nó đọc nhiều file. Theo dõi usage nếu chạy nhiều.
Không hiểu business context. Nó hiểu code, không hiểu tại sao business logic phải như vậy. "Khách VIP được giảm 20% nhưng không áp dụng cho combo deal" — bạn phải diễn đạt rõ ràng, không thể assume nó hiểu ngầm.
Tips để dùng hiệu quả
Bắt đầu session mới cho task mới. Context từ task trước có thể gây nhiễu. /clear hoặc restart session.
Commit thường xuyên. Sau mỗi task Claude Code hoàn thành và bạn verify OK, commit ngay. Nếu task tiếp theo nó phá gì đó, bạn có thể revert dễ dàng.
Review từng file, không review cả batch. Khi Claude Code tạo 5 file, đừng approve tất cả. Đọc từng file, hỏi "giải thích tại sao làm như vậy" nếu không hiểu.
Dùng cho learning. Gặp codebase mới? Hỏi Claude Code giải thích từng module. Nó đọc code và tóm tắt nhanh hơn bạn mò. Nhưng verify bằng cách đọc code thật — đừng tin 100%.
Git diff là bạn. Sau mỗi task, chạy git diff để xem chính xác Claude Code đã thay đổi gì. Đôi khi nó sửa thêm thứ bạn không yêu cầu — catch sớm.
Tổng kết
Claude Code không phải magic — nó là tool, và tool chỉ mạnh khi người dùng biết cách sử dụng. Prompt rõ ràng, chia nhỏ task, chỉ rõ constraint, verify output. Đó là workflow.
Mình thấy nó đặc biệt hiệu quả cho: scaffold feature mới theo convention có sẵn, refactor code cũ với safety net từ test, debug bằng cách paste error trực tiếp, viết test khi bạn đã có code, và onboard vào codebase mới.
Nó không thay thế việc hiểu code — nhưng nó tăng tốc đáng kể cho những phần mechanical mà bạn đã biết cần làm gì, chỉ chưa muốn gõ.
Leave a comment
Your email address will not be published. Required fields are marked *