Search

Claude Code: Hướng Dẫn Từ Cài Đặt Đến Sử Dụng Hiệu Quả

Claude Code: Hướng Dẫn Từ Cài Đặt Đến Sử Dụng Hiệu Quả

Nếu bạn đang dùng ChatGPT hay Claude.ai để code bằng cách copy-paste qua lại giữa chat và IDE, thì Claude Code sẽ thay đổi hoàn toàn cách bạn làm việc. Thay vì mô tả vấn đề rồi copy đoạn code AI sinh ra, bạn chỉ cần mô tả — Claude Code tự đọc file, tự sửa code, tự chạy command, tự test — ngay trong terminal của bạn.

Mình bắt đầu dùng Claude Code từ khi nó còn beta, và phải thừa nhận: ban đầu mình khá hoài nghi. Một AI tool chạy trong terminal, đọc được cả codebase, tự chạy lệnh trên máy mình — nghe vừa hay vừa đáng sợ. Nhưng sau vài tháng sử dụng thực tế với các dự án .NET, mình có thể nói đây là tool đã thay đổi nhiều nhất workflow hàng ngày của mình.

Bài viết này mình chia sẻ từ cài đặt đến những mẹo sử dụng hiệu quả, dựa trên kinh nghiệm thực tế chứ không phải đọc lại documentation.


Claude Code là gì — và khác gì so với Claude.ai?

Claude Code là một agentic coding tool của Anthropic, chạy trực tiếp trong terminal. Điểm khác biệt cốt lõi so với Claude.ai hay ChatGPT:

Claude.ai là chatbot — bạn hỏi, nó trả lời. Bạn phải tự copy code, tự paste vào file, tự chạy thử, rồi quay lại báo lỗi. Mỗi lần muốn Claude hiểu context, bạn phải upload file hoặc paste code vào chat.

Claude Code là agent — bạn mô tả việc cần làm, nó tự thực hiện. Nó đọc trực tiếp file trong project, sửa code trực tiếp, chạy command trong terminal, xử lý git, chạy test — tất cả trong một phiên làm việc liên tục. Bạn không cần copy-paste bất kỳ thứ gì.

Sự khác biệt này nghe nhỏ nhưng thay đổi cách làm việc hoàn toàn. Trước đây khi gặp bug, mình phải: copy error log → paste vào Claude.ai → đọc gợi ý → quay lại IDE sửa → chạy lại → copy error mới → paste lại... Lặp đi lặp lại. Với Claude Code, mình chỉ cần: "Fix cái lỗi null reference trong InvoiceService.cs" — nó tự đọc file, tìm lỗi, sửa, và hỏi mình có muốn chạy test không.

Claude Code chạy trên model Claude Opus 4.6 và Sonnet 4.5, với context window lên đến 200,000 tokens — đủ để hiểu toàn bộ codebase vừa và nhỏ trong một phiên làm việc.


Cài đặt Claude Code

Yêu cầu hệ thống

Claude Code hỗ trợ cả ba nền tảng: macOS, Linux, và Windows. Trước đây cần cài Node.js, nhưng hiện tại Anthropic đã có native installer không cần dependency gì thêm.

Cài đặt trên macOS và Linux

Mở terminal và chạy một lệnh duy nhất:

curl -fsSL https://claude.ai/install.sh | bash

Sau khi cài xong, verify bằng:

claude --version

Cài đặt trên Windows

Mở PowerShell (không cần quyền Administrator) và chạy:

irm https://claude.ai/install.ps1 | iex

Lưu ý quan trọng: sau khi cài xong, đóng terminal và mở lại để PATH được cập nhật. Đây là lý do phổ biến nhất khiến nhiều người gặp lỗi "claude is not recognized" ngay sau khi cài.

Windows cần có Git Bash (đi kèm khi cài Git for Windows). Nếu chưa có Git, installer sẽ nhắc bạn cài.

Cách cài cũ qua npm (deprecated)

Nếu bạn đọc các hướng dẫn cũ có đề cập npm install -g @anthropic-ai/claude-code, cách này vẫn hoạt động nhưng đã bị deprecated chính thức. Native installer ở trên là cách được khuyên dùng — nhẹ hơn, không cần Node.js, và tự động cập nhật.

Nếu đang dùng bản npm cũ, bạn có thể migrate sang native installer mà không mất cấu hình — các file config trong ~/.claude/.claude/ trong project đều được giữ nguyên.

Xác thực

Sau khi cài xong, chạy claude lần đầu tiên, bạn sẽ được hướng dẫn xác thực. Claude Code hỗ trợ ba cách:

Cách 1 — Claude Pro/Max subscription: Nếu bạn đang trả phí Claude Pro hoặc Max trên claude.ai, bạn dùng luôn tài khoản đó qua OAuth. Đây là cách mình dùng — trả phí cố định hàng tháng, không lo phát sinh chi phí.

Cách 2 — Anthropic API key: Vào console.anthropic.com tạo API key, rồi set trong terminal:

export ANTHROPIC_API_KEY=sk-ant-...

Thêm dòng này vào .bashrc hoặc .zshrc để không phải set lại mỗi lần mở terminal. Cách này tính phí theo token — phù hợp nếu bạn chỉ dùng thỉnh thoảng, nhưng có thể tốn kém nếu dùng nhiều.

Cách 3 — Enterprise (Bedrock/Vertex): Dành cho môi trường doanh nghiệp, kết nối qua Amazon Bedrock hoặc Google Vertex AI.

Mình khuyên: nếu bạn định dùng Claude Code thường xuyên (hàng ngày), đăng ký Claude Max sẽ kinh tế hơn so với trả phí API. API phù hợp hơn cho việc dùng thử hoặc tích hợp vào pipeline.


Sử dụng cơ bản

Bắt đầu phiên làm việc

Navigate đến thư mục project rồi chạy:

cd ~/projects/my-dotnet-app
claude

Claude Code sẽ mở một phiên interactive trong terminal. Từ đây bạn giao tiếp bằng ngôn ngữ tự nhiên — tiếng Anh hoặc tiếng Việt đều được, nhưng theo kinh nghiệm của mình, prompt bằng tiếng Anh cho kết quả ổn định hơn, đặc biệt với các thuật ngữ kỹ thuật.

Những việc Claude Code làm được

Đọc và hiểu codebase: "Explain how authentication works in this project" — Claude sẽ tự scan các file liên quan và giải thích flow.

Sửa code trực tiếp: "Add a CreatedDate column to the Invoice entity and create a migration" — Claude sẽ sửa model, tạo migration file, và hỏi bạn có muốn apply không.

Chạy command: "Run all unit tests and show me which ones are failing" — Claude chạy dotnet test và phân tích kết quả.

Xử lý Git: "Commit these changes with a descriptive message and create a PR" — Claude tự viết commit message, tạo commit, và có thể tạo Pull Request nếu bạn có GitHub CLI cài sẵn.

Debug: "I'm getting a NullReferenceException in OrderService.GetById, help me fix it" — Claude đọc file, tìm nguyên nhân, đề xuất fix và apply luôn nếu bạn đồng ý.

Các slash command quan trọng

Claude Code có một số slash command built-in mà bạn nên biết:

/help          — Xem danh sách command
/clear         — Xóa context hiện tại, bắt đầu phiên mới
/compact       — Nén context để tiết kiệm token khi conversation dài
/init          — Khởi tạo file CLAUDE.md cho project
/cost          — Xem chi phí token phiên hiện tại
/bug           — Báo bug cho Anthropic

Trong đó, /clear/compact là hai command bạn sẽ dùng nhiều nhất. Context management là yếu tố quan trọng nhất quyết định chất lượng output — phiên làm việc càng dài, context càng bị "ô nhiễm" bởi thông tin không liên quan, output càng kém. Mình sẽ nói kỹ hơn ở phần sau.


File CLAUDE.md — Bí quyết để Claude Code hiểu project của bạn

Đây là phần quan trọng nhất mà nhiều người bỏ qua. CLAUDE.md là file đặc biệt mà Claude Code đọc mỗi khi bắt đầu phiên làm việc. Nó giống như một tài liệu onboarding — giúp Claude hiểu project của bạn mà không cần bạn giải thích lại mỗi lần.

Tại sao cần CLAUDE.md?

Claude Code không có memory giữa các phiên. Mỗi lần bạn chạy claude, nó bắt đầu từ số 0 — không biết gì về project, conventions, hay cách bạn muốn code được viết. CLAUDE.md giải quyết vấn đề này.

Không có CLAUDE.md, Claude sẽ phải scan codebase mỗi lần để hiểu project structure, tech stack, build command... Tốn token, tốn thời gian, và đôi khi hiểu sai.

Cách tạo CLAUDE.md

Cách nhanh nhất — chạy /init ngay trong Claude Code. Nó sẽ scan project và tạo file CLAUDE.md cơ bản. Nhưng mình khuyên bạn nên tự viết hoặc chỉnh sửa lại, vì bạn hiểu project hơn bất kỳ AI nào.

Đặt file CLAUDE.md ở thư mục gốc của project. Nội dung nên bao gồm:

# Project Overview

Multi-tenant invoice management system built with .NET 8, Angular 17, PostgreSQL.

## Tech Stack
- Backend: ASP.NET Core 8 Web API, EF Core 8
- Frontend: Angular 17, PrimeNG
- Database: PostgreSQL 16
- Container: Docker Compose

## Key Commands
- Build: `dotnet build src/WebApi`
- Test: `dotnet test tests/UnitTests`
- Run: `docker-compose up -d && dotnet run --project src/WebApi`
- Migration: `dotnet ef migrations add <Name> --project src/Infrastructure --startup-project src/WebApi`

## Architecture
- Clean Architecture: WebApi → Application → Domain → Infrastructure
- Multi-tenant: TenantId filter applied via EF Core Global Query Filter
- All entities inherit from BaseEntity (Id, CreatedAt, UpdatedAt, IsDeleted)
- Soft delete pattern: never hard delete, set IsDeleted = true

## Conventions
- Use Vietnamese for user-facing messages, English for code and comments
- All API endpoints require [Authorize] unless explicitly public
- Use FluentValidation for request validation, not DataAnnotations
- Repository pattern through EF Core DbContext, no separate repository layer

Nguyên tắc viết CLAUDE.md hiệu quả

Ngắn gọn, tập trung. CLAUDE.md không phải documentation đầy đủ của project. Nó là bản tóm tắt những điều quan trọng nhất mà Claude cần biết để làm việc hiệu quả. Nếu file quá dài, Claude sẽ bắt đầu bỏ qua một số instruction — nghiên cứu cho thấy model chỉ follow được khoảng 150-200 instructions một cách ổn định.

Dẫn đường thay vì liệt kê. Thay vì paste toàn bộ API documentation vào CLAUDE.md, hãy chỉ cho Claude biết documentation nằm ở đâu: "For detailed API specs, see docs/api-spec.md". Claude sẽ tự đọc khi cần.

Ghi lại những gì Claude hay sai. Nếu Claude liên tục dùng DataAnnotations thay vì FluentValidation, thêm vào CLAUDE.md: "Always use FluentValidation, never DataAnnotations." CLAUDE.md nên phát triển theo thời gian dựa trên những lỗi bạn quan sát được.

Commit vào Git. CLAUDE.md nên được commit vào repository để cả team cùng hưởng lợi. Khi một thành viên mới join project và dùng Claude Code, họ sẽ có ngay context đầy đủ.

CLAUDE.md phân cấp

Với project lớn, bạn có thể đặt CLAUDE.md ở nhiều cấp:

my-project/
├── CLAUDE.md                    # Context chung toàn project
├── src/
│   ├── WebApi/
│   │   └── CLAUDE.md            # Context riêng cho API layer
│   └── Angular/
│       └── CLAUDE.md            # Context riêng cho frontend
└── tests/
    └── CLAUDE.md                # Conventions cho test

Claude Code sẽ đọc tất cả các file CLAUDE.md từ root đến thư mục hiện tại, ưu tiên file cụ thể nhất khi có xung đột.


Plan Mode — Nghĩ trước, code sau

Plan Mode là tính năng mình dùng nhiều nhất và cũng là thứ phân biệt người dùng Claude Code hiệu quả với người dùng bình thường.

Vấn đề khi không dùng Plan Mode

Khi bạn đưa Claude Code một task phức tạp, bản năng của nó là nhảy thẳng vào code. Điều này giống như một developer bắt đầu code ngay khi đọc xong requirement mà không nghĩ về design — kết quả thường phải refactor lại nhiều lần.

Cách dùng Plan Mode

Workflow gồm bốn bước:

Bước 1 — Cho Claude nghiên cứu trước. Bật Plan Mode bằng cách nhấn phím Tab hoặc gõ lệnh tương ứng, rồi yêu cầu Claude đọc code hiện tại:

Read /src/Services/InvoiceService.cs and understand how we handle 
invoice creation. Also check the validation rules in 
/src/Validators/CreateInvoiceValidator.cs

Ở bước này, Claude chỉ đọc file và trả lời — không sửa bất kỳ thứ gì.

Bước 2 — Yêu cầu lập kế hoạch. Sau khi Claude hiểu context, yêu cầu nó lập plan:

I want to add a feature: auto-generate invoice number with format 
INV-{YYYY}{MM}-{sequence}. The sequence resets every month. 
Create a detailed plan.

Claude sẽ đưa ra plan chi tiết: file nào cần sửa, logic cần thêm, migration cần tạo, test cần viết.

Bước 3 — Review và điều chỉnh plan. Đây là bước quan trọng nhất. Đọc plan của Claude, chỉnh sửa nếu cần: "Don't create a separate InvoiceNumberGenerator class, add the logic directly to InvoiceService. Also, we need to handle concurrent requests — two invoices created at the same time shouldn't get the same number."

Bước 4 — Thực thi. Khi plan đã ổn, tắt Plan Mode và cho Claude bắt đầu code.

Khi nào nên dùng Plan Mode

Mình dùng Plan Mode khi task liên quan đến nhiều hơn 2-3 file, khi cần thay đổi architecture hoặc design pattern, khi implement feature mới phức tạp, hoặc khi không chắc về approach tốt nhất. Với task đơn giản (sửa bug rõ ràng, thêm một field, format code...) thì không cần — nói thẳng luôn cho nhanh.


Quản lý Context — Kỹ năng quan trọng nhất

Nếu chỉ được chọn một điều để nhớ từ bài viết này, hãy nhớ: context management quyết định mọi thứ.

Tại sao context quan trọng?

Claude Code có giới hạn context window. Khi phiên làm việc kéo dài, context tích lũy: mỗi file Claude đọc, mỗi command chạy, mỗi đoạn output — tất cả chiếm chỗ trong context window. Khi context đầy, Claude bắt đầu "quên" những thông tin từ đầu phiên, output trở nên kém chính xác.

Quy tắc vàng: Một task một phiên

Đây là sai lầm phổ biến nhất: bạn bắt đầu fix bug A, xong rồi tiếp tục hỏi Claude về feature B trong cùng phiên, rồi nhờ nó refactor module C... Cuối cùng Claude không làm tốt bất kỳ task nào vì context bị trộn lẫn.

Quy trình đúng: hoàn thành task → commit → /clear → bắt đầu task mới. Mỗi phiên chỉ nên tập trung vào một việc.

Sử dụng /compact khi phiên dài

Nếu bạn đang giữa task dài mà context sắp đầy, dùng /compact kèm chỉ dẫn cụ thể:

/compact Keep context about the InvoiceService refactoring. 
Discard all unrelated file reads and test outputs.

Claude sẽ nén context, giữ lại thông tin quan trọng và bỏ phần thừa. Nhưng đây chỉ là giải pháp tạm — nếu có thể, hãy commit và bắt đầu phiên mới.


Custom Slash Commands — Tự động hóa workflow lặp lại

Nếu bạn thường xuyên làm một số tác vụ nhất định, custom slash command sẽ tiết kiệm rất nhiều thời gian.

Tạo custom command

Tạo thư mục .claude/commands/ trong project, mỗi file .md là một command:

mkdir -p .claude/commands

Ví dụ 1: Command review code

Tạo file .claude/commands/review.md:

Review code changes in the current branch compared to main:
1. Check for potential null reference exceptions
2. Verify EF Core queries are not causing N+1 problems
3. Check that all new endpoints have [Authorize] attribute
4. Verify FluentValidation rules exist for new request DTOs
5. Look for hardcoded strings that should be in configuration
6. Check that soft delete is used instead of hard delete
Report findings grouped by severity: Critical, Warning, Suggestion.

Sử dụng: gõ /project:review trong Claude Code.

Ví dụ 2: Command tạo migration

Tạo file .claude/commands/migrate.md:

Create a new EF Core migration:
1. Review pending model changes in the Domain and Infrastructure projects
2. Create migration with name: $ARGUMENTS
3. Review the generated SQL to check for potential issues
4. Warn if any migration drops columns or tables
Run: dotnet ef migrations add $ARGUMENTS --project src/Infrastructure --startup-project src/WebApi

Sử dụng: /project:migrate AddPaymentStatusColumn

Chia sẻ commands cho team

.claude/commands/ nằm trong project, khi bạn commit vào Git, cả team đều có thể dùng. Điều này tạo ra workflow nhất quán — mọi người review code theo cùng checklist, tạo migration theo cùng quy trình.


MCP Servers — Kết nối Claude Code với bên ngoài

MCP (Model Context Protocol) cho phép Claude Code tương tác với các công cụ và dịch vụ bên ngoài. Nói đơn giản: nếu Claude Code mặc định chỉ đọc/ghi file trong project, MCP mở rộng khả năng đó ra database, browser, project management tool...

Một số MCP hữu ích

PostgreSQL MCP — cho phép Claude Code query database trực tiếp. Thay vì bạn phải copy schema từ pgAdmin rồi paste vào chat, Claude tự query database để hiểu structure.

Playwright MCP — Claude Code có thể mở browser, test UI, xem kết quả. Rất hữu ích khi implement frontend và cần verify bằng mắt.

GitHub MCP — tương tác trực tiếp với GitHub: tạo issue, review PR, đọc comments.

Cách thêm MCP server

claude mcp add postgres-server -s project -- npx @anthropic-ai/mcp-server-postgres postgresql://localhost:5432/mydb

Tuy nhiên, có một lưu ý quan trọng: mỗi MCP server tốn token để Claude "nhận biết" các tool available. Nếu bạn thêm quá nhiều MCP server, context window bị chiếm bởi tool descriptions thay vì code thực tế. Kinh nghiệm chung là không nên dùng quá 20,000 tokens cho MCP — còn lại dành cho công việc thực sự.

Mình thường chỉ bật 1-2 MCP server cần thiết cho task hiện tại, không bật tất cả cùng lúc.


Sử dụng Claude Code với VS Code

Claude Code không chỉ chạy trong terminal — nó có extension cho VS Code (và cả Cursor). Extension này không thêm tính năng mới, nhưng giúp mở Claude Code ngay trong IDE mà không cần chuyển sang terminal.

Cài extension "Claude Code" từ VS Code Marketplace, sau đó mở Claude Code bằng Command Palette hoặc panel bên.

Điểm hay: bạn có thể mở nhiều instance Claude Code song song trong VS Code — mỗi instance làm một task khác nhau trên các phần khác nhau của codebase. Ví dụ một instance đang refactor backend, instance khác đang viết test.


Mẹo sử dụng hiệu quả từ thực tế

Prompt cụ thể, không chung chung

# Tệ — quá mơ hồ
"Fix the bug"

# Tốt — cụ thể
"There's a NullReferenceException in InvoiceService.cs line 47 
when GetById is called with an ID that doesn't exist. 
Add proper null checking and return 404."

Prompt càng cụ thể, Claude càng ít tốn token để "đoán" ý bạn và kết quả càng chính xác.

Cho Claude xem ví dụ

Khi bạn muốn Claude viết code theo style nhất định, thay vì mô tả dài dòng, hãy chỉ nó xem file mẫu:

Create a new PaymentService following the same pattern as 
InvoiceService.cs. Use the same error handling approach 
and logging style.

Claude sẽ đọc InvoiceService.cs và áp dụng cùng pattern — hiệu quả hơn rất nhiều so với mô tả pattern bằng lời.

Dùng headless mode cho automation

Claude Code có thể chạy non-interactive, phù hợp cho CI/CD:

# Code review tự động trong CI pipeline
claude -p "Review the diff in this PR for security issues" --output-format json

# Sinh commit message
claude -p "Generate a conventional commit message for staged changes"

# Check code quality trước khi commit
claude -p "Check if all new public methods have XML documentation comments"

Flag --output-format json cho phép bạn parse output bằng script, tích hợp vào pipeline tự động.

Biết khi nào KHÔNG nên dùng Claude Code

Claude Code rất mạnh nhưng không phải lúc nào cũng là lựa chọn tốt nhất. Đối với những thay đổi nhỏ — đổi tên biến, sửa typo, thêm một dòng log — bạn tự gõ nhanh hơn. Đối với những quyết định architecture quan trọng, Claude Code có thể đề xuất nhưng quyết định cuối cùng phải là của bạn — đừng để AI quyết định kiến trúc hệ thống. Và khi làm việc với data nhạy cảm trên production, hãy cẩn thận — Claude Code có thể chạy command trên máy bạn, nên đừng bao giờ dùng --dangerously-skip-permissions khi kết nối với production database.


Chi phí và lựa chọn plan

Tại thời điểm viết bài, có ba cách trả phí chính:

Claude Pro ($20/tháng) — Dùng được Claude Code nhưng có giới hạn usage. Phù hợp nếu bạn dùng ít, chủ yếu cho các task nhỏ.

Claude Max ($100-200/tháng) — Usage cao hơn đáng kể, phù hợp cho developer dùng Claude Code hàng ngày. Đây là plan mình đang dùng.

API pay-per-use — Trả theo token. Linh hoạt nhưng có thể tốn kém nếu dùng nhiều — một phiên code dài có thể tiêu tốn vài dollar.

Mình khuyên: bắt đầu với khoảng $20 API credit để thử. Nếu thấy mình dùng hàng ngày và chi phí API vượt $100/tháng, chuyển sang Claude Max sẽ kinh tế hơn. Để theo dõi chi phí, dùng /cost trong phiên làm việc.


Kết luận

Claude Code không chỉ là một AI coding assistant — nó thay đổi cách bạn tương tác với code. Thay vì copy-paste giữa chat và IDE, bạn mô tả ý định và để agent thực hiện. Thay vì phải giải thích context mỗi lần, CLAUDE.md giữ cho Claude luôn hiểu project của bạn.

Ba điều quan trọng nhất nếu bạn mới bắt đầu: một là viết CLAUDE.md cho project ngay từ đầu — đây là đầu tư nhỏ nhưng hiệu quả lớn nhất. Hai là dùng Plan Mode cho mọi task phức tạp — nghĩ trước code sau luôn tốt hơn. Ba là quản lý context bằng cách giữ mỗi phiên tập trung vào một task và /clear khi xong.

Bạn có thể bắt đầu dùng Claude Code ngay hôm nay — cài đặt mất chưa đến 5 phút. Nhưng để dùng thật sự hiệu quả thì cần vài tuần thực hành và tinh chỉnh workflow. Kiên nhẫn với quá trình đó — kết quả rất đáng.

Culi Dev

Culi Dev

Enjoy coding, enjoy life!

Leave a comment

Your email address will not be published. Required fields are marked *

Your experience on this site will be improved by allowing cookies Cookie Policy