How to Develop CLI Tools: Claude Code 활용 가이드
develop cli tools: Claude Code 활용. 실용적인 코드 예시와 단계별 가이드를 포함합니다.
CLIツール개발をClaude Code로 가속화하기
自分専用のCLIツールを作りたいとき、Claude Code는 最高のパートナーです。인수のパース、サブコマンド설계、インタラクティブな入출력まで、「こんなCLIを作りたい」と伝える만으로구현할 수 있습니다。
프로젝트の初期구성
> TypeScriptでCLIツールの프로젝트を作って。
> commanderで인수をパースして、eslintとprettierも설정して。
> npx ts-node src/index.ts で実行できるようにして。
인수パースとサブコマンド
Commander를 사용한CLIの基本構造です。
#!/usr/bin/env node
import { Command } from "commander";
import { version } from "../package.json";
const program = new Command();
program
.name("mytool")
.description("プロジェクト管理CLIツール")
.version(version);
program
.command("init")
.description("プロジェクトを初期化する")
.option("-t, --template <name>", "テンプレート名", "default")
.option("-d, --dir <path>", "作成先ディレクトリ", ".")
.action(async (options) => {
console.log(`テンプレート「${options.template}」で初期化中...`);
await initProject(options.template, options.dir);
console.log("完了しました!");
});
program
.command("generate <type> <name>")
.alias("g")
.description("ファイルを生成する(component, hook, page)")
.option("--dry-run", "実際にファイルを作成せずプレビュー")
.action(async (type, name, options) => {
if (options.dryRun) {
console.log(`[dry-run] ${type}「${name}」を生成します`);
return;
}
await generateFile(type, name);
});
program
.command("check")
.description("プロジェクトの状態を確認する")
.action(async () => {
await runHealthCheck();
});
program.parse();
インタラクティブな입력
Inquirer라이브러리를 사용한対話타입입력の구현です。
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: "プロジェクト名:",
validate: (input: string) =>
/^[a-z0-9-]+$/.test(input) || "小文字英数字とハイフンのみ使用できます",
},
{
type: "list",
name: "framework",
message: "フレームワーク:",
choices: ["React", "Next.js", "Astro", "Vue"],
},
{
type: "checkbox",
name: "features",
message: "追加機能:",
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: "パッケージマネージャー:",
choices: ["npm", "pnpm", "yarn"],
},
]);
console.log(chalk.green("\n設定内容:"));
console.log(chalk.cyan(` プロジェクト名: ${answers.name}`));
console.log(chalk.cyan(` フレームワーク: ${answers.framework}`));
console.log(chalk.cyan(` 機能: ${answers.features.join(", ")}`));
return answers;
}
プ로그レスバーとスピナー
処理の進捗を視覚的に표시します。
import ora from "ora";
import cliProgress from "cli-progress";
async function processFiles(files: string[]) {
const bar = new cliProgress.SingleBar({
format: "処理中 |{bar}| {percentage}% | {value}/{total} ファイル",
barCompleteChar: "█",
barIncompleteChar: "░",
});
bar.start(files.length, 0);
for (const file of files) {
await processFile(file);
bar.increment();
}
bar.stop();
console.log(chalk.green("すべてのファイルの処理が完了しました!"));
}
async function installDependencies(packages: string[]) {
const spinner = ora("依存パッケージをインストール中...").start();
try {
await execAsync(`npm install ${packages.join(" ")}`);
spinner.succeed("依存パッケージのインストール完了");
} catch (error) {
spinner.fail("インストールに失敗しました");
throw error;
}
}
테스트の구현
CLIツールの테스트もClaude Code에依頼할 수 있습니다。
import { describe, it, expect } from "vitest";
import { execSync } from "child_process";
describe("mytool CLI", () => {
it("バージョンを表示できる", () => {
const output = execSync("npx ts-node src/index.ts --version").toString();
expect(output.trim()).toMatch(/^\d+\.\d+\.\d+$/);
});
it("ヘルプを表示できる", () => {
const output = execSync("npx ts-node src/index.ts --help").toString();
expect(output).toContain("プロジェクト管理CLIツール");
expect(output).toContain("init");
expect(output).toContain("generate");
});
it("存在しないコマンドでエラーになる", () => {
expect(() => {
execSync("npx ts-node src/index.ts unknown 2>&1");
}).toThrow();
});
});
npm패키지로서公開する方法はnpm패키지公開를 확인하세요.Claude Codeの기본적인使い方は入門가이드を、生産性向上のコツは生産性を3倍にする10のTips를 참고하세요.
정리
Claude Code를 활용하면 인수パース、対話타입입력、プ로그レス표시、테스트まで含めたCLIツールを短시간で개발할 수 있습니다。「こんなコマンドが欲しい」と自然言語で伝える만으로、すぐに動くツールが完成します。
자세한 내용은Claude Code공식 문서를 참고하세요.
무료 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의 실무 경험을 토대로 실제 코드로 해설.