Tips & Tricks (Diperbarui: 2/6/2026)

Code review Claude Code untuk tim

Bangun review PR berbasis risiko dengan Claude Code, CI gate, CODEOWNERS, dan prompt berbasis bukti.

Code review Claude Code untuk tim

Claude Code paling berguna untuk code review ketika dipakai sebagai alur kerja yang berulang, bukan sekadar opini tambahan. Perannya adalah merapikan PR, menandai area berisiko, mengajukan pertanyaan yang tepat, dan membantu reviewer manusia fokus pada arsitektur, maksud produk, serta keputusan ownership.

Untuk tim, alur praktisnya adalah PR template, aturan review di CLAUDE.md, diff-size gate, GitHub Actions, CODEOWNERS, dan prompt yang mewajibkan bukti. Rujukan resmi yang perlu dibuka: Claude Code common workflows, dokumen pull request GitHub, CODEOWNERS, GitHub Actions workflow syntax, dan OWASP Code Review Guide.

Sistem review

Review berbasis risiko berarti tidak semua baris diperiksa dengan bobot yang sama. Autentikasi, otorisasi, billing, migrasi data, performa, dan celah test harus diberi perhatian lebih. Diff scope adalah area yang benar-benar berubah dalam PR. CI gate adalah pemeriksaan otomatis yang memberi peringatan atau memblokir. Hallucinated finding adalah komentar AI yang terdengar masuk akal tetapi tidak punya bukti di diff.

flowchart LR
  A["PR template"] --> B["Diff size gate"]
  B --> C["Claude Code review"]
  C --> D["Code owner review"]
  D --> E["CI tests and merge"]
  C --> F["Questions before fixes"]

Aturan utamanya: Claude Code tidak boleh diam-diam menulis ulang kode saat review. Jika maksud bisnis, kontrak data, atau aturan izin belum jelas, ia harus bertanya.

Use case nyata

Pertama, perubahan autentikasi dan otorisasi. Untuk login, session, role, admin, dan API key, minta Claude Code memeriksa authorization yang hilang, privilege escalation, kebocoran secret, dan audit log yang tidak ada. Keputusan aturan bisnis tetap milik reviewer manusia. Untuk keamanan yang lebih dalam, baca audit keamanan dengan Claude Code.

Kedua, perubahan sensitif performa. Search, list, cache, image processing, dan batch job dapat menyembunyikan query N+1, render berulang, cache key yang salah, dan payload besar. Komentar yang baik harus menjelaskan ukuran input yang bermasalah dan cara mengukurnya.

Ketiga, test dan migrasi data. Schema, migration, seed, validation, dan backfill perlu memeriksa rollback, data lama, nullable field, unique constraint, dan perilaku saat gagal. Claude Code bisa menyiapkan daftar missing test dan edge case sebelum owner data menilai.

Keempat, PR yang terlalu besar. Setelah diff melewati 800 sampai 1000 baris, kualitas review biasanya turun. CI bisa memberi peringatan atau memblokir, sementara Claude Code memberi saran pemecahan berdasarkan behavior, migration, UI, dan test.

PR template

Buat .github/pull_request_template.md.

## Change summary
- What changed:
- Why it changed:
- User-visible impact:

## Risk review
- [ ] Security impact checked
- [ ] Performance impact checked
- [ ] Test coverage added or explained
- [ ] Data migration or rollback plan checked
- [ ] No secrets, tokens, or personal data included

## Claude Code review request
Please review this PR by diff scope only.

Focus on:
- Security: auth, authorization, injection, secret leakage
- Performance: N+1 queries, cache keys, unnecessary work
- Tests: missing unit, integration, and migration tests
- Data: schema changes, rollback, backfill safety

For each finding, include:
- file and line
- why it matters
- evidence from the diff
- suggested fix or question for the author

Frasa diff scope only penting supaya Claude Code tidak memberi saran generik untuk seluruh repo. Review harus berbasis bukti dari PR ini.

Aturan CLAUDE.md

Masukkan aturan tim ke CLAUDE.md. File ini menjadi memori proyek untuk Claude Code. Untuk struktur yang lebih luas, baca praktik terbaik CLAUDE.md.

## Code review rules

Review only the current diff unless the user asks for wider context.

Severity:
- Must fix: security bug, data loss, broken build, failed test, migration risk
- Should fix: likely production bug, missing important test, measurable performance issue
- Nice to have: naming, small cleanup, optional refactor

Evidence rule:
- Every finding must cite a file and line.
- If the evidence is uncertain, ask a question instead of asserting a bug.
- Do not invent dependencies, routes, database columns, or team policies.

Security checks:
- Authentication and authorization
- SQL or command injection
- XSS and unsafe HTML
- Secret leakage
- Missing audit log for privileged actions

Data checks:
- Migration rollback path
- Backfill failure behavior
- Existing nullable and unique constraints
- PII handling and retention

Aturan bukti mengurangi false positive. Jika tidak ada file, line, dan alasan, perlakukan sebagai pertanyaan.

Script diff gate

Simpan sebagai scripts/review-diff-gate.mjs.

#!/usr/bin/env node
import { execSync } from "node:child_process";

const baseRef = process.env.BASE_REF || "origin/main";
const maxFiles = Number(process.env.MAX_REVIEW_FILES || 25);
const maxLines = Number(process.env.MAX_REVIEW_LINES || 800);

function git(command) {
  return execSync(command, { encoding: "utf8" }).trim();
}

const files = git(`git diff --name-only ${baseRef}...HEAD`)
  .split(/\r?\n/)
  .filter(Boolean);

const numstat = git(`git diff --numstat ${baseRef}...HEAD`);
const changedLines = numstat
  .split(/\r?\n/)
  .filter(Boolean)
  .reduce((total, line) => {
    const [added, deleted] = line.split(/\s+/);
    return total + (Number(added) || 0) + (Number(deleted) || 0);
  }, 0);

const riskyPatterns = [
  /^src\/auth\//,
  /^src\/billing\//,
  /^db\/migrations\//,
  /^infra\//,
  /^\.github\/workflows\//,
];

const riskyFiles = files.filter((file) =>
  riskyPatterns.some((pattern) => pattern.test(file))
);

let failed = false;

if (files.length > maxFiles) {
  console.error(`Too many files changed: ${files.length} > ${maxFiles}`);
  failed = true;
}

if (changedLines > maxLines) {
  console.error(`Too many changed lines: ${changedLines} > ${maxLines}`);
  failed = true;
}

if (riskyFiles.length > 0) {
  console.log("Risk-sensitive files changed:");
  for (const file of riskyFiles) console.log(`- ${file}`);
}

if (failed) {
  console.error("Split the PR or add a reviewer-approved exception.");
  process.exit(1);
}

console.log(`Review gate passed: ${files.length} files, ${changedLines} lines.`);

Jalankan lokal:

BASE_REF=origin/main MAX_REVIEW_FILES=25 MAX_REVIEW_LINES=800 node scripts/review-diff-gate.mjs

GitHub Actions dan CODEOWNERS

Tambahkan .github/workflows/review-gate.yml.

name: review-gate

on:
  pull_request:
    types: [opened, synchronize, reopened]

jobs:
  diff-gate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - uses: actions/setup-node@v4
        with:
          node-version: "22"

      - name: Run diff size gate
        env:
          BASE_REF: origin/${{ github.base_ref }}
          MAX_REVIEW_FILES: "25"
          MAX_REVIEW_LINES: "800"
        run: node scripts/review-diff-gate.mjs

Rutekan area berisiko dengan CODEOWNERS.

# .github/CODEOWNERS
/src/auth/ @example-org/security
/src/billing/ @example-org/payments
/db/migrations/ @example-org/backend-leads
/.github/workflows/ @example-org/platform
/infra/ @example-org/platform

Jangan jadikan output AI sebagai blocker merge pertama. Stabilkan lint, typecheck, test, dan ukuran diff dulu. Lanjutkan dengan panduan CI/CD dan kualitas pull request.

Prompt review

Review the current PR diff against main.

Rules:
1. Stay inside the diff scope unless a referenced file is required.
2. Do not rewrite code silently.
3. For each finding, include file, line, severity, evidence, and suggested action.
4. If business intent or data contract is unclear, ask a question instead of guessing.
5. Ignore style-only preferences unless they break CLAUDE.md or project conventions.

Focus areas:
- Security: auth, authorization, injection, XSS, secrets, audit logs
- Performance: N+1 queries, cache invalidation, repeated rendering, large payloads
- Tests: missing coverage for changed behavior, migrations, and edge cases
- Data migration: rollback, backfill, nullable fields, unique constraints
- CI and ownership: required checks, CODEOWNERS, risky paths

Output:
## Must fix
## Should fix
## Questions
## No issue found in

Jebakan dan catatan verifikasi

Jebakan pertama adalah meminta Claude Code meninjau dan memperbaiki semuanya sekaligus. Diff membesar sebelum temuan disetujui. Lakukan review dulu, pilih fix oleh manusia, lalu jalankan test.

Jebakan kedua adalah menerima temuan tanpa bukti. Jika Claude Code tidak bisa menunjukkan file, line, dan perilaku yang berubah, masukkan ke pertanyaan.

Jebakan ketiga adalah meremehkan migration. Test hijau tidak membuktikan data produksi aman. Cek NULL lama, duplikat, lock, rollback, dan retry backfill.

Saya memverifikasi contoh ini sebagai alur repo minimal: script hanya butuh Git dan Node 22, Action menjalankan script yang sama, dan template membuat Claude Code tetap berbasis evidence dari diff. Untuk rollout tim, mulai satu minggu dalam mode warning, sesuaikan threshold, lalu wajibkan check yang sudah stabil. Langkah berikutnya: gunakan checklist review gate sebelum commit.

#Claude Code #code review #quality assurance #team development #best practices
Gratis

PDF gratis: cheatsheet Claude Code

Masukkan email dan unduh satu halaman berisi command, kebiasaan review, dan workflow aman.

Kami menjaga datamu dan tidak mengirim spam.

Masa

Tentang penulis

Masa

Engineer yang berfokus pada workflow Claude Code praktis dan adopsi tim.