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공식 문서를 참고하세요.
Claude Code 워크플로우를 한 단계 업그레이드하세요
지금 바로 Claude Code에 복사해 쓸 수 있는 검증된 프롬프트 템플릿 50선.
이 글을 작성한 사람
Masa
Claude Code를 적극 활용하는 엔지니어. 10개 언어, 2,000페이지 이상의 테크 미디어 claudecode-lab.com을 운영 중.
관련 글
Claude Code로 리팩토링을 자동화하는 방법
Claude Code를 활용해 코드 리팩토링을 효율적으로 자동화하는 방법을 알아봅니다. 실전 프롬프트와 구체적인 리팩토링 패턴을 소개합니다.
Claude Code로 사이드 프로젝트 개발 속도를 극대화하는 방법 [예제 포함]
Claude Code를 활용해 개인 프로젝트 개발 속도를 획기적으로 높이는 방법을 알아봅니다. 실전 예제와 아이디어부터 배포까지의 워크플로를 포함합니다.
Complete CORS Configuration Guide: Claude Code 활용 가이드
complete cors configuration guide: Claude Code 활용. 실용적인 팁과 코드 예시를 포함합니다.