Cara Develop CLI Tools dengan Claude Code
Pelajari cara develop cli tools menggunakan Claude Code. Dilengkapi contoh kode praktis dan panduan langkah demi langkah.
CLItoolspengembangan dengan Claude Code: 加速
自分専用 CLItools 作りたい dan き、Claude Code 最高 パートナー.argumen パース、サブcommand設計、インタラクティブな入outputま 、「こんなCLI 作りたい」 dan 伝えるだけ implementasi bisa dilakukan.
Konfigurasi Awal Proyek
> TypeScript dengan CLItools proyek buatkan.
> commander dengan argumen パースして、eslint dan prettier konfigurasi juga.
> npx ts-node src/index.ts dengan 実行 dengan きるよう.
argumenパースとサブcommand
Commander 使ったCLI dasarstruktur.
#!/usr/bin/env node
import { Command } from "commander";
import { version } from "../package.json";
const program = new Command();
program
.name("mytool")
.description("proyekmanajemenCLItools")
.version(version);
program
.command("init")
.description("proyek inisialisasi")
.option("-t, --template <name>", "template名", "default")
.option("-d, --dir <path>", "pembuatan先direktori", ".")
.action(async (options) => {
console.log(`template「${options.template}」 inisialisasi中...`);
await initProject(options.template, options.dir);
console.log("selesaiしま!");
});
program
.command("generate <type> <name>")
.alias("g")
.description("file generate(component, hook, page)")
.option("--dry-run", "実際 file pembuatanせずpreview")
.action(async (type, name, options) => {
if (options.dryRun) {
console.log(`[dry-run] ${type}「${name}」 generateします`);
return;
}
await generateFile(type, name);
});
program
.command("check")
.description("proyek 状態 konfirmasi")
.action(async () => {
await runHealthCheck();
});
program.parse();
インタラクティブなinput
Inquirerlibrary 使った対話型input implementasi.
import inquirer from "inquirer";
import chalk from "chalk";
interface ProjectConfig {
name: string;
framework: string;
features: string[];
packageManager: string;
}
async function interactiveInit(): Promise<ProjectConfig> {
const answers = await inquirer.prompt([
{
type: "input",
name: "name",
message: "proyek名:",
validate: (input: string) =>
/^[a-z0-9-]+$/.test(input) || "小文字英数字とハイフン みpenggunaan きます",
},
{
type: "list",
name: "framework",
message: "framework:",
choices: ["React", "Next.js", "Astro", "Vue"],
},
{
type: "checkbox",
name: "features",
message: "penambahan機能:",
choices: [
{ name: "TypeScript", checked: true },
{ name: "ESLint", checked: true },
{ name: "Prettier", checked: true },
{ name: "Testing (Vitest)" },
{ name: "CI/CD (GitHub Actions)" },
],
},
{
type: "list",
name: "packageManager",
message: "packagemanager:",
choices: ["npm", "pnpm", "yarn"],
},
]);
console.log(chalk.green("\npengaturan内容:"));
console.log(chalk.cyan(`proyek名: ${answers.name}`));
console.log(chalk.cyan(`framework: ${answers.framework}`));
console.log(chalk.cyan(` 機能: ${answers.features.join(", ")}`));
return answers;
}
progress barとspinner
pemrosesan 進捗 視覚的 tampilan.
import ora from "ora";
import cliProgress from "cli-progress";
async function processFiles(files: string[]) {
const bar = new cliProgress.SingleBar({
format: "pemrosesan中 |{bar}| {percentage}% | {value}/{total} file",
barCompleteChar: "█",
barIncompleteChar: "░",
});
bar.start(files.length, 0);
for (const file of files) {
await processFile(file);
bar.increment();
}
bar.stop();
console.log(chalk.green("すべて file pemrosesan selesaiしま!"));
}
async function installDependencies(packages: string[]) {
const spinner = ora("依存package インストール中...").start();
try {
await execAsync(`npm install ${packages.join(" ")}`);
spinner.succeed("依存package インストールselesai");
} catch (error) {
spinner.fail("インストール gagalしま");
throw error;
}
}
Implementasi Testing
CLItools test juga Claude Code 依頼 bisa dilakukan.
import { describe, it, expect } from "vitest";
import { execSync } from "child_process";
describe("mytool CLI", () => {
it("versi tampilan きる", () => {
const output = execSync("npx ts-node src/index.ts --version").toString();
expect(output.trim()).toMatch(/^\d+\.\d+\.\d+$/);
});
it("ヘルプ tampilan きる", () => {
const output = execSync("npx ts-node src/index.ts --help").toString();
expect(output).toContain("proyekmanajemenCLItools");
expect(output).toContain("init");
expect(output).toContain("generate");
});
it("存在し tidakcommand error なる", () => {
expect(() => {
execSync("npx ts-node src/index.ts unknown 2>&1");
}).toThrow();
});
});
Untuk npmpackageとしてpublikasiするmetodeはnpmpackagepublikasiをご覧ください。Claude Codeのdasar的な使い方は入門panduanを、生産性向上のコツ, lihat 生産性を3倍にする10のTips.
Summary
Dengan Claude Code, argumenパース、対話型input、プログレスtampilan、testま 含めたCLItools waktu singkat pengembangan bisa dilakukan.「こんなcommand 欲しい」 dan 自然言語 伝えるだけ 、すぐ 動くtools 完成.
Untuk detail lebih lanjut, lihat Dokumentasi Resmi Claude Code.
Related Posts
Cara Mempercepat Side Project dengan Claude Code [Dengan Contoh]
Pelajari cara mempercepat project development personal secara drastis menggunakan Claude Code. Dilengkapi contoh nyata dan workflow praktis dari ide hingga deployment.
Cara Mengotomatisasi Refactoring dengan Claude Code
Pelajari cara mengotomatisasi code refactoring secara efisien menggunakan Claude Code. Dilengkapi prompt praktis dan pola refactoring konkret untuk project nyata.
Panduan Lengkap Konfigurasi CORS dengan Claude Code
Pelajari tentang panduan lengkap konfigurasi CORS menggunakan Claude Code. Dilengkapi tips praktis dan contoh kode.