← Lập trình với Claude Code

Bài 18 · Nâng cao · 34 phút· Cập nhật 11/06/2026

Dự án cuối khoá: 5 dự án thực chiến

Biên soạn bởi Nguyễn Anh Tuấn

Áp dụng tất cả: onboard CLAUDE.md+command vào repo, viết Skill & Subagent, hooks tự động, kết nối MCP, và một tính năng end-to-end.

Đây là lúc biến lý thuyết thành kỹ năng thật. Năm dự án dưới đây xây chồng lên nhau - mỗi cái dùng một mảnh bạn đã học - và làm trên dự án của chính bạn. Mỗi dự án có khối “Hoàn thành khi” để tự chấm.

Chưa có dự án? Dựng một repo nháp 5 phút

Bạn không cần dự án lớn - một repo nhỏ là đủ để tập trọn 5 dự án.

tạo một sân tập tối giản

mkdir tap-claude-code && cd tap-claude-code
git init
echo "# Sân tập Claude Code" > README.md
# Thêm một file mã đơn giản bằng ngôn ngữ bạn thích, ví dụ:
echo 'print("Hello")' > app.py
git add . && git commit -m "khởi tạo sân tập"
claude        # mở Claude Code ngay trong thư mục này

Ôn nhanh "việc nào → công cụ nào" trước khi làm 5 dự án:

Chọn một nhu cầu thực tế - xem công cụ nào phù hợp nhất và tại sao. Ôn lại toàn bộ khoá trong một tầm nhìn:

Chọn một nhu cầu ở trên để xem gợi ý.

  • Làm trên dự án THẬT của bạn (hoặc repo nháp ở trên).
  • Trên máy thật: ở chế độ default/acceptEdits, đọc diff trước khi đồng ý.
  • Commit kết quả mỗi dự án vào git để có bằng chứng & dễ quay lại.

Mục tiêu: cho Claude “hiểu” dự án bạn và có vài lệnh tắt riêng. (Dùng bài CLAUDE.md & bộ nhớSlash command.)

  • Chạy /init để sinh CLAUDE.md ban đầu, rồi TỈA cho đúng (lệnh build/test, quy ước, cấu trúc).
  • Tạo 2 slash command hữu ích, vd /commit (chèn !`git diff --staged`) và /giai-thich $ARGUMENTS.
  • Thử: hỏi Claude một việc và xem nó bám đúng quy ước trong CLAUDE.md.

Hoàn thành khi

Repo có CLAUDE.md ngắn-đúng (lệnh build/test + vài quy ước); có ≥ 2 slash command bạn dùng được; và Claude làm một việc đúng theo quy ước mà bạn không phải nhắc lại.

Mục tiêu: đóng gói một quy trình bạn hay lặp thành một Skill mà Claude tự gọi đúng lúc. (Dùng bài Agent Skills.)

  • Chọn một việc lặp lại (vd “tóm tắt thay đổi + gắn cờ rủi ro”, “viết test cho file này”).
  • Tạo .claude/skills/<tên>/SKILL.md: frontmatter name + description nêu RÕ khi nào dùng.
  • Thêm !`lệnh` để nhúng dữ liệu động nếu cần; thử cả gọi tay (/tên) lẫn để Claude tự gọi.

Hoàn thành khi

Có một Skill chạy được; description đủ tốt để Claude TỰ gọi khi bạn hỏi tự nhiên (không cần gõ lệnh); và nó thật sự tiết kiệm thời gian cho một việc bạn hay làm.

Mục tiêu: tạo một trợ lý phụ chạy ở ngữ cảnh riêng cho một việc hay làm bẩn ngữ cảnh chính. (Dùng bài Subagents.)

  • Tạo .claude/agents/code-reviewer.md: description rõ, tools chỉ-đọc (Read, Grep, Glob).
  • Phần thân = system prompt: nói rõ nó review gì, trả lời thế nào (nêu file:dòng, theo mức độ).
  • Cân nhắc model: haiku cho việc nhẹ/lặp nhiều; sonnet/opus cho việc khó.

Hoàn thành khi

Nhờ “review thay đổi của tôi”, Claude giao việc cho subagent; subagent không sửa được file (chỉ đọc); và nó trả về bản tóm tắt gọn mà ngữ cảnh chính không bị ngập file.

Mục tiêu: biến vài quy ước “mong manh” thành luật cứng do máy thực thi. (Dùng bài Hooks.)

  • PostToolUse trên Write|Edit: tự chạy formatter/linter của dự án sau mỗi lần sửa.
  • PreToolUse trên Bash với if "Bash(rm *)": chặn (hoặc cảnh báo) lệnh xoá nguy hiểm.
  • Gõ /hooks để kiểm hook đang bật; nhớ: hook chạy mã của bạn - viết an toàn.

.claude/settings.json - tự format sau khi sửa

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          { "type": "command",
            "command": "jq -r '.tool_input.file_path' | xargs <lenh-format-cua-ban>" }
        ]
      }
    ]
  }
}

Hoàn thành khi

Sau mỗi lần Claude sửa file, formatter tự chạy (bạn không phải nhắc); và một lệnh nguy hiểm (vd rm -rf) bị hook chặn lại kèm lý do.

Mục tiêu: ghép tất cả để làm trọn một tính năng/bugfix THẬT, an toàn. (Dùng bài Tương tác, Đọc/sửa, git/PR, Kiểm chứng.)

  • 1) Plan mode: để Claude khảo sát & trình kế hoạch; bạn duyệt/chỉnh TRƯỚC khi cho code.
  • 2) Code: cho một “đích để tự kiểm” (test/kết quả mong đợi); làm từng phần, duyệt diff.
  • 3) Test/build: chạy để kiểm chứng; sai thì để vòng lặp tự sửa.
  • 4) Nhánh → PR: tạo nhánh, commit gọn, gh pr create; nhờ Claude tự review rồi BẠN duyệt.

Hoàn thành khi

Một PR hoàn chỉnh cho một tính năng/bugfix thật: kế hoạch được duyệt trước, test/build xanh, bạn đã đọc & duyệt toàn bộ diff, và con người (bạn) là người gộp.

Nâng cấp (tùy chọn): chuẩn nghề · MCP · Plugin

Muốn đi xa hơn: cho subagent chuẩn nghề review tính năng này trước khi merge (bảo mật theo OWASP, toàn vẹn dữ liệu, WCAG, ranh giới kiến trúc - xem mini-track “Chuẩn nghề”); kết nối một MCP server (vd GitHub) để Claude tạo issue/PR trực tiếp; và đóng gói các Skill/Subagent/Hook bạn vừa làm thành một plugin để tái dùng cho dự án khác (xem bài MCPPlugins).

Bạn đã đi từ “Claude Code là gì” đến tự dựng một tính năng end-to-end cùng nó - qua CLAUDE.md, slash command, Skills, Subagents, Hooks, MCP, Plugins, quy trình git/PR và kiểm chứng. Quan trọng hơn mọi tính năng: bạn giữ được tư duy đúng - mô tả rõ, cấp ngữ cảnh đúng, và luôn kiểm chứng.

Lời cuối - trung thực

Claude Code cập nhật liên tục: vài lệnh/màn hình có thể đã khác. Tư duy trong khoá này thì bền; còn chi tiết, hãy tin /help và tài liệu chính thức của Anthropic. AI là cộng sự mạnh - nhưng người lái, và người chịu trách nhiệm, là bạn.

Câu hỏi thường gặp

Tạo một “repo nháp” 5 phút (xem Bước 1): git init một thư mục, thêm README và một file mã đơn giản (vd một CLI Todo nhỏ bằng ngôn ngữ bạn thích). Dùng chính nó làm sân tập cho cả 5 dự án. Hoặc dùng một dự án cũ của bạn - càng thật càng tốt.

Nên làm theo thứ tự vì chúng xây chồng lên nhau (CLAUDE.md → command → Skill → Subagent → Hooks → tính năng end-to-end). Nhưng cứ làm tới đâu chắc tới đó; mỗi dự án đã có tiêu chí “Hoàn thành khi” để bạn tự chấm.

Trên dự án thật/máy thật: default hoặc acceptEdits, và đọc diff trước khi đồng ý. Dùng allow/deny cho những thứ an toàn (vd cho phép chạy test) và chặn nguy hiểm (rm). KHÔNG dùng bypassPermissions trừ khi trong môi trường cô lập.

Mỗi dự án có khối “Hoàn thành khi” liệt kê tiêu chí cụ thể (Definition of Done). Đạt hết các gạch đầu dòng đó là xong. Tốt hơn nữa: commit kết quả vào git để có bằng chứng và có thể quay lại.

Áp dụng vào công việc hằng ngày là cách học nhanh nhất. Khi cần tính năng mới hoặc tên lệnh chính xác, luôn đối chiếu /help và tài liệu chính thức của Anthropic - Claude Code cập nhật liên tục. Và giữ thói quen vàng: kiểm chứng mọi kết quả.

Tick những điều em tự tin làm được. Càng lên cao, em càng hiểu sâu.

Tick những điều em tự tin làm được sau khi học bài này. 0/6

Trả lời vài câu để chắc rằng em đã nắm bài.

Câu 1/3 Điểm: 0

Dự án 1 (Onboard) yêu cầu làm gì với CLAUDE.md?

  1. 1

    Bộ sưu tập cấu hình

    Gom CLAUDE.md + các command/Skill/Subagent/hook bạn tạo trong 5 dự án vào repo, có README mô tả từng cái.

    Hoàn thành khi: Một repo gọn gàng cho thấy bạn đã onboard Claude Code bài bản - “portfolio” kỹ năng đầu tay.

  2. 2

    Đóng gói plugin (nâng cao)

    Gói một Skill + một Subagent + một hook thành một plugin (xem bài Plugins) để tái dùng cho dự án khác.

    Hoàn thành khi: Một plugin tự chứa, nạp được bằng claude --plugin-dir, sẵn sàng chia sẻ cho nhóm.

  3. 3

    Một tính năng thật

    Chọn một tính năng/bugfix THẬT bạn cần, làm trọn quy trình: plan → code → test → PR, kiểm chứng từng bước.

    Hoàn thành khi: Một PR hoàn chỉnh, test xanh, bạn đã đọc & duyệt diff - giá trị thật cho dự án của bạn.

  4. 4

    Chia sẻ trải nghiệm

    Viết một ghi chú ngắn (hoặc bài đăng) về điều bạn học được khi đưa Claude Code vào dự án; kèm #meohamhoc.

    Hoàn thành khi: Một chia sẻ trung thực về cái được & cái cần cẩn trọng - giúp người khác và củng cố hiểu biết của bạn.