Safely Modernizing Legacy Code: Claude Code 활용 가이드
safely modernizing legacy code: Claude Code 활용. 실용적인 코드 예시를 포함합니다.
レガシーコードとの戦い方
테스트がなく、문서も古く、誰も触りたくないコード。Claude Code는 そんなレガシーコードの理解から改善まで強力にサポートします。
ステップ1:コードの理解
まずClaude Code에コードを分析させましょう。
> src/legacy/ 다음의コードを分析して。
> 각파일の責務、依存関係、데이터フローを説明して。
> 問題点と改善の優先順位も提案して。
Claude Code는 コード全体を読んだ上で、構造の説明と改善計画を提示します。
ステップ2:테스트の추가
改修前に테스트を書いて、現在の振る舞いを保証します。
> src/legacy/orderProcessor.js の現在の振る舞いを
> 保証する테스트를 생성해줘。
> 함수の入출력を分析して、正常系・異常系をカバーして。
> まだコードは변경しないで。
// レガシーコードの振る舞いを保証する테스트
import { processOrder } from "../legacy/orderProcessor";
describe("processOrder - 既存の振る舞いを保証", () => {
it("正常な注文を処理できる", () => {
const order = {
items: [{ id: "A1", qty: 2, price: 1000 }],
customer: { id: "C1", type: "regular" },
};
const result = processOrder(order);
expect(result.total).toBe(2000);
expect(result.status).toBe("confirmed");
});
it("空の注文でエラーを返す", () => {
const order = { items: [], customer: { id: "C1", type: "regular" } };
const result = processOrder(order);
expect(result.status).toBe("error");
expect(result.message).toContain("items");
});
it("VIP顧客に割引を適用する", () => {
const order = {
items: [{ id: "A1", qty: 1, price: 10000 }],
customer: { id: "C2", type: "vip" },
};
const result = processOrder(order);
expect(result.total).toBe(9000); // 10% off
});
});
ステップ3:段階的리팩터링
테스트が通ることを확인しながら、少しずつ改善します。
> 테스트を維持しながら、orderProcessor.jsを다음의方針で
> 리팩터링して:
> 1. TypeScriptに変換
> 2. 타입定義を추가
> 3. 1함수1責務に分割
> 4. 각변경後に테스트が通ることを확인
// 리팩터링後の構造
// orderProcessor.ts - メイン処理
export function processOrder(order: OrderInput): OrderResult {
const validation = validateOrder(order);
if (!validation.valid) {
return { status: "error", message: validation.message };
}
const subtotal = calculateSubtotal(order.items);
const discount = calculateDiscount(subtotal, order.customer);
const total = subtotal - discount;
return {
status: "confirmed",
total,
items: order.items,
discount,
};
}
// validators.ts - 유효성 검사
export function validateOrder(order: OrderInput): ValidationResult {
if (!order.items || order.items.length === 0) {
return { valid: false, message: "items is required" };
}
return { valid: true };
}
// calculators.ts - 計算ロジック
export function calculateSubtotal(items: OrderItem[]): number {
return items.reduce((sum, item) => sum + item.price * item.qty, 0);
}
export function calculateDiscount(subtotal: number, customer: Customer): number {
if (customer.type === "vip") {
return subtotal * 0.1;
}
return 0;
}
ステップ4:JavaScriptからTypeScriptへの移行
> src/legacy/ 다음의JS파일をすべてTypeScriptに変換して。
> 1. まず.jsを.tsにリネーム
> 2. any타입で타입チェックを通す
> 3. anyを적절한타입に置き換える
> 4. 각ステップで테스트が通ることを확인
콜백地獄の解消
> 콜백ベースの비동기処理を
> async/awaitに書き換えて。
// Before fix:콜백地獄
function fetchUserData(userId, callback) {
db.getUser(userId, (err, user) => {
if (err) return callback(err);
db.getPosts(user.id, (err, posts) => {
if (err) return callback(err);
db.getComments(posts[0].id, (err, comments) => {
if (err) return callback(err);
callback(null, { user, posts, comments });
});
});
});
}
// After fix:async/await
async function fetchUserData(userId: string): Promise<UserData> {
const user = await db.getUser(userId);
const posts = await db.getPosts(user.id);
const comments = posts.length > 0
? await db.getComments(posts[0].id)
: [];
return { user, posts, comments };
}
依存関係の업데이트
> package.jsonの依存패키지で古いものを特定して。
> メジャーバージョンが2つ以上古いものを복원ップ。
> 업데이트時のbreaking changesも調べて。
리팩터링の구체적인パターンは리팩터링자동화가이드を、테스트추가の戦略はTDDとClaude Codeの相性를 참고하세요.段階的な改善で문서も업데이트する方法は문서自動생성도 함께 확인하세요.
정리
レガシーコード改善の鍵は「테스트で安全網を張ってから少しずつ変える」ことです。Claude Code는 이프로세스を大幅に효율화します。一度にすべてを変えようとせず、段階的に進めましょう。
レガシーコード改善の名著『Working Effectively with Legacy Code』の考え方とClaude Code는 非常に相性が良いです。Claude Code의 상세 정보는Anthropic공식 문서를 참고하세요.
무료 PDF: 5분 완성 Claude Code 치트시트
이메일 주소만 등록하시면 A4 한 장짜리 치트시트 PDF를 즉시 보내드립니다.
개인정보는 엄격하게 관리하며 스팸은 보내지 않습니다.
이 글을 작성한 사람
Masa
Claude Code를 적극 활용하는 엔지니어. 10개 언어, 2,000페이지 이상의 테크 미디어 claudecode-lab.com을 운영 중.
관련 글
Claude Code 다국어 글을 매일 발행하기 전에 확인할 7가지
누락된 언어, 깨진 CTA, 반영되지 않은 배포를 막기 위해 다국어 Claude Code 글을 매일 발행하기 전에 확인할 체크리스트입니다.
Codex Automations란? 잠자는 동안 AI가 콘텐츠 운영을 처리하게 하는 방법
Codex Automations로 트래픽 분석, 주제 선정, 글 작성, CTA 개선, 배포까지 자동화하는 실전 가이드.
Claude Code × GCP Cloud Functions 완전 가이드 | 서버리스 함수 초고속 개발
Claude Code로 GCP Cloud Functions를 효율화. HTTP/Pub/Sub/Firestore 트리거 구현부터 로컬 테스트·배포 자동화까지, Masa의 실무 경험을 토대로 실제 코드로 해설.