Tips & Tricks

Claude Code के साथ Streamlining Dependency Management and Updates

Claude Code का उपयोग करके streamlining dependency management and updates सीखें। Practical tips और code examples शामिल हैं।

dependenciesmanagementの課題

モダンなJavaScript/TypeScriptProjectは数百のpackageに依存してい है।Claude Code का लाभ उठाकर、dependenciesのupdateをsafeかつefficiently行え है।

dependenciesの状態confirm

Claude Codeに現在のdependenciesを分析してもらいましょう。

Projectのdependenciesを分析して。
- 古くなっているpackageのlist
- security脆弱性のあるpackage
- 使われていないdependencies
- 重複しているdependencies

自動updateスクリプト

import { execSync } from "child_process";
import { readFileSync, writeFileSync } from "fs";

interface OutdatedPackage {
  current: string;
  wanted: string;
  latest: string;
  location: string;
}

function checkOutdated(): Record<string, OutdatedPackage> {
  try {
    const output = execSync("npm outdated --json", {
      encoding: "utf-8",
    });
    return JSON.parse(output);
  } catch (e: any) {
    // npm outdated はपुरानाpackageがあると exit code 1
    return JSON.parse(e.stdout || "{}");
  }
}

function categorizeUpdates(
  packages: Record<string, OutdatedPackage>
) {
  const patch: string[] = [];
  const minor: string[] = [];
  const major: string[] = [];

  for (const [name, info] of Object.entries(packages)) {
    const [curMajor, curMinor] = info.current.split(".").map(Number);
    const [latMajor, latMinor] = info.latest.split(".").map(Number);

    if (latMajor > curMajor) {
      major.push(name);
    } else if (latMinor > curMinor) {
      minor.push(name);
    } else {
      patch.push(name);
    }
  }

  return { patch, minor, major };
}

safeなupdateフロー

async function safeUpdate(packageName: string) {
  console.log(`Updating ${packageName}...`);

  // 1. 現在のlock fileをbackup
  execSync("cp package-lock.json package-lock.json.bak");

  try {
    // 2. package update
    execSync(`npm install ${packageName}@latest`);

    // 3. type check
    execSync("npx tsc --noEmit");

    // 4. test実行
    execSync("npm test");

    // 5. buildconfirm
    execSync("npm run build");

    console.log(`${packageName} updated successfully`);
    // backupをDelete
    execSync("rm package-lock.json.bak");
  } catch (error) {
    console.error(`Update failed for ${packageName}, rolling back`);
    execSync("cp package-lock.json.bak package-lock.json");
    execSync("npm install");
    throw error;
  }
}

使われていないdependenciesの検出

import depcheck from "depcheck";

async function findUnusedDeps(projectPath: string) {
  const options = {
    ignoreDirs: ["node_modules", "dist", "build"],
    ignorePatterns: ["*.test.*", "*.spec.*"],
  };

  const result = await depcheck(projectPath, options);

  console.log("未使用の dependencies:");
  result.dependencies.forEach((dep) => console.log(`  - ${dep}`));

  console.log("\n未使用の devDependencies:");
  result.devDependencies.forEach((dep) => console.log(`  - ${dep}`));

  console.log("\n不足しているdependencies:");
  for (const [dep, files] of Object.entries(result.missing)) {
    console.log(`  - ${dep} (used in: ${files.join(", ")})`);
  }

  return result;
}

Renovate/Dependabotsettingsのgenerate

Claude Codeに自動updateのCIsettings generateしてもらいましょう。

// renovate.json
{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "extends": ["config:recommended"],
  "schedule": ["every weekend"],
  "packageRules": [
    {
      "matchUpdateTypes": ["patch"],
      "automerge": true
    },
    {
      "matchUpdateTypes": ["minor"],
      "automerge": true,
      "automergeType": "pr"
    },
    {
      "matchUpdateTypes": ["major"],
      "labels": ["breaking-change"],
      "automerge": false
    },
    {
      "matchPackageNames": ["typescript", "eslint"],
      "groupName": "tooling"
    }
  ]
}

security監査のautomation

function securityAudit() {
  try {
    const output = execSync("npm audit --json", {
      encoding: "utf-8",
    });
    const audit = JSON.parse(output);

    const critical = audit.metadata.vulnerabilities.critical;
    const high = audit.metadata.vulnerabilities.high;

    if (critical > 0 || high > 0) {
      console.error(
        `Critical: ${critical}, High: ${high} vulnerabilities found`
      );
      // 自動修正を試みる
      execSync("npm audit fix");
    }

    return audit;
  } catch (e) {
    console.error("Audit failed:", e);
    throw e;
  }
}

Claude Code सेのutilizationプロンプト

dependenciesmanagementをClaude Code को requestするプロンプト例 है।automationのsettingsके बारे मेंはhookfeaturesガイド、効率的なuse करने का तरीकाは生産性を3倍にする10のTipsभी reference के लिए देखें。

dependenciesを整理して。
- npm outdated でपुरानाpackage confirm
- patch と minor は一括updateしてtest実行
- major はひとつずつupdateして動作confirm
- 使われていないdependenciesがあればDeleteして
- npm audit の脆弱性も修正して

dependenciesmanagementのベストプラクティスはnpmofficial documentationをदेखें。Claude Codeके details के लिएofficial documentation confirm करें।

Summary

dependenciesのmanagementは地味ですが、securityとメンテナンス性に直結するimportantなtask है।Claude Code का लाभ उठाकर、updateの影響範囲を把握したऊपरでsafeにupdateを進められ है।

#Claude Code #dependency management #npm #security #automation
मुफ़्त

मुफ़्त PDF: 5 मिनट में Claude Code चीटशीट

बस अपना ईमेल दर्ज करें और हम तुरंत A4 एक-पृष्ठ चीटशीट PDF भेज देंगे।

हम आपकी व्यक्तिगत जानकारी की सुरक्षा करते हैं और स्पैम नहीं भेजते।

Masa

लेखक के बारे में

Masa

Claude Code का गहराई से उपयोग करने वाले इंजीनियर। claudecode-lab.com चलाते हैं, जो 10 भाषाओं में 2,000 से अधिक पेजों वाला टेक मीडिया है।