コラム Claude Code入門

Claude CodeでCLIツールを作成する方法!コマンドラインツールを自動生成する実践テクニック

Claude CodeでCLIツールを作成する方法!コマンドラインツールを自動生成する実践テクニック
目次 (26項目)
  1. 1. はじめに
  2. 2. 目次
  3. 3. 1. CLIツール開発でClaude Codeが便利な理由
  4. 手動実装が面倒な部分を自動生成
  5. 要件から全体設計まで相談できる
  6. 4. 2. PythonでのCLIツール作成(Typer・Click)
  7. Typerを使ったCLIツール
  8. Clickを使ったCLIツール
  9. 5. 3. Node.jsでのCLIツール作成(Commander.js)
  10. Commander.jsを使ったCLIツール
  11. 6. 4. 既存スクリプトのCLI化
  12. シェルスクリプトのCLI化
  13. Pythonスクリプトへのコマンドライン引数追加
  14. 7. 5. 設定ファイルと環境変数の管理
  15. 設定ファイルのサポート追加
  16. 環境変数との統合
  17. 8. 6. CLIツールのパッケージ化と配布
  18. PyPIへの公開準備
  19. Homebrewのフォーミュラ作成
  20. Dockerイメージとして配布
  21. 9. 7. よく使うCLIパターン集
  22. パターン① インタラクティブプロンプト
  23. パターン② プログレスバー
  24. パターン③ ログの整形出力
  25. 10. 8. まとめ
  26. 11. よくある質問(FAQ)

はじめに

「繰り返しの手作業をコマンド一発で自動化したい」

「チームで使えるCLIツールを作りたいけど、どこから始めればいいかわからない」

「既存のスクリプトを使いやすいCLIツールにしたい」

CLIツールは開発者の生産性を大きく向上させますが、引数の解析・ヘルプ表示・エラーハンドリングなど、実装すべき項目が多くあります。Claude Codeを使えば、要件を伝えるだけで完全なCLIツールを自動生成できます。

目次

  1. CLIツール開発でClaude Codeが便利な理由
  2. PythonでのCLIツール作成(Typer・Click)
  3. Node.jsでのCLIツール作成(Commander.js)
  4. 既存スクリプトのCLI化
  5. 設定ファイルと環境変数の管理
  6. CLIツールのパッケージ化と配布
  7. よく使うCLIパターン集
  8. まとめ

1. CLIツール開発でClaude Codeが便利な理由

手動実装が面倒な部分を自動生成

CLIツール開発で繰り返し書くことになるボイラープレートを自動生成します。

  • コマンドと引数の定義
  • ヘルプテキストの生成
  • 入力バリデーション
  • エラーメッセージの整形
  • プログレスバーの表示
  • カラー出力の設定

要件から全体設計まで相談できる

> 以下の作業を自動化するCLIツールを作りたいです。
  適切な設計を提案してください。

  やりたいこと:
  - 複数のサーバーに同じコマンドを一括実行する
  - 実行結果をログファイルに保存する
  - 失敗したサーバーを再実行できる
  - 実行状況をリアルタイムに表示する

  使う言語はPythonが希望です。
  どんな設計が良いか提案してから実装してください。

2. PythonでのCLIツール作成(Typer・Click)

Typerを使ったCLIツール

> 以下の機能を持つPythonのCLIツールをTyperで作成してください。

  ツール名:db-backup
  機能:
  - データベースのバックアップを作成する
  - S3へのアップロード
  - 古いバックアップの自動削除(保持期間を指定可能)

  サブコマンド:
  - db-backup create [--db-url] [--output-dir] [--upload-s3]
  - db-backup restore [backup-file] [--db-url]
  - db-backup list [--bucket] [--days]
  - db-backup clean [--bucket] [--keep-days]

  --helpを実行したとき見やすいドキュメントが表示されるようにしてください。

生成されるコードの例:

import typer
from pathlib import Path
from typing import Optional
import subprocess
import boto3
from datetime import datetime, timedelta
from rich.console import Console
from rich.progress import Progress

app = typer.Typer(
    name="db-backup",
    help="データベースのバックアップ・リストアツール",
    add_completion=True
)
console = Console()

@app.command()
def create(
    db_url: str = typer.Option(..., "--db-url", "-d",
                                help="データベース接続URL",
                                envvar="DATABASE_URL"),
    output_dir: Path = typer.Option(Path("./backups"), "--output-dir", "-o",
                                     help="バックアップ保存先ディレクトリ"),
    upload_s3: bool = typer.Option(False, "--upload-s3",
                                    help="S3にアップロードする"),
):
    """データベースのバックアップを作成します"""
    # 実装...

Clickを使ったCLIツール

> Clickを使って、CSVファイルを処理するCLIツールを作成してください。

  機能:
  - filter:条件に一致する行をフィルタリング
  - transform:カラムの変換・追加
  - stats:基本統計量の表示
  - merge:複数のCSVを結合

  例:
  csv-tool filter input.csv --col age --gt 20 --output filtered.csv
  csv-tool stats input.csv --cols age,salary

3. Node.jsでのCLIツール作成(Commander.js)

Commander.jsを使ったCLIツール

> Node.js + TypeScript + Commander.jsで
  ファイル変換CLIツールを作成してください。

  ツール名:convert
  機能:
  - convert image input.jpg output.png [--width 800] [--quality 80]
  - convert json input.json output.csv
  - convert markdown input.md output.html [--theme github]
  - convert batch ./input-dir ./output-dir --from jpg --to webp

  npmパッケージとして配布できる形にしてください。
  package.jsonのbinフィールドの設定も含めてください。

4. 既存スクリプトのCLI化

シェルスクリプトのCLI化

> 以下のシェルスクリプトをPythonのCLIツールに変換してください。
  引数のバリデーション・エラーハンドリング・ヘルプメッセージを追加してください。

  [シェルスクリプトを貼り付け]

Pythonスクリプトへのコマンドライン引数追加

> このPythonスクリプトにargparseの代わりにTyperを使った
  コマンドライン引数を追加してください。

  現在のスクリプトはパラメータをハードコードしているので、
  すべての設定値をコマンドライン引数または設定ファイルで
  渡せるようにしてください。

5. 設定ファイルと環境変数の管理

設定ファイルのサポート追加

> このCLIツールに設定ファイルのサポートを追加してください。

  要件:
  - ~/.config/myapp/config.tomlをデフォルト設定ファイルとして読み込む
  - --config オプションで別のファイルを指定できる
  - コマンドライン引数 > 設定ファイル > デフォルト値 の優先順位
  - myapp config set key value で設定を変更できる
  - myapp config show で現在の設定を表示できる

環境変数との統合

> このCLIツールで環境変数をサポートしてください。

  ルール:
  - すべてのオプションは対応する環境変数を持つ
  - 環境変数名はAPPNAME_OPTION_NAMEの形式(大文字・アンダースコア)
  - --verbose → APPNAME_VERBOSE=1
  - --api-key → APPNAME_API_KEY=xxx
  - --help でそれぞれの環境変数名も表示する

6. CLIツールのパッケージ化と配布

PyPIへの公開準備

> このPython CLIツールをPyPIで公開できるよう準備してください。

  設定内容:
  - pyproject.toml(hatchlingsを使ったビルド設定)
  - pip install myapp でインストールされ、myappコマンドが使えるように
  - README.mdにインストール・使い方を記載
  - GitHub Actionsで自動公開するワークフロー
  - セマンティックバージョニングの設定

Homebrewのフォーミュラ作成

> このCLIツールのHomebrewフォーミュラを作成してください。
  brew install myapp でインストールできるようにしてください。

Dockerイメージとして配布

> このCLIツールをDockerイメージとして配布できるよう
  Dockerfileを作成してください。

  使用例:
  docker run --rm -v $(pwd):/data myapp/mytool process /data/input.csv

7. よく使うCLIパターン集

パターン① インタラクティブプロンプト

> このCLIツールにInquirerまたはrichを使ったインタラクティブな
  設定ウィザードを追加してください。

  初回起動時またはmyapp initを実行したとき:
  - 設定値を対話形式で入力できる
  - デフォルト値を提示する
  - 入力値のバリデーションをリアルタイムで行う

パターン② プログレスバー

> 大量ファイルを処理するこのツールに
  Richライブラリを使ったプログレスバーを追加してください。

  表示内容:
  - 処理済み/全体のファイル数
  - 処理速度(ファイル/秒)
  - 推定残り時間
  - 現在処理中のファイル名

パターン③ ログの整形出力

> このCLIツールの出力を以下のように整形してください:

  通常モード:人間が読みやすいカラー出力
  --jsonモード:JSONストリーム出力(スクリプトで処理しやすい)
  --quietモード:エラーのみ出力
  --verboseモード:デバッグ情報を含む詳細出力

8. まとめ

CLIツール開発でのClaude Code活用ポイント:

  • 要件を伝えるだけで完全なCLIツールを自動生成できる
  • 既存のシェルスクリプト・Pythonスクリプトを使いやすいCLIに変換できる
  • パッケージ化・配布の設定も自動化できる

フレームワーク選択の目安:

  • Pythonシンプルなツール → Typer(型ヒントベースで書きやすい)
  • Python複雑なツール → Click(プラグイン拡張が得意)
  • Node.js → Commander.js(npmエコシステムと相性が良い)

次回の第25回:パフォーマンスを最適化する方法では、ボトルネックを自動検出して改善する手順を解説します。

よくある質問(FAQ)

Q. WindowsとMac/Linuxの両方で動くCLIツールを作るには?

A. Claude Codeに「Windows・Mac・Linux全対応のCLIツールにしてください。パスの区切り文字・改行コード・権限の違いを考慮してください」と指示することで、クロスプラットフォーム対応のコードを生成します。

Q. CLIツールのテストはどう書けばいいですか?

A. PythonならTyper/Clickのテストランナー、Node.jsならinquirer-test等を使ったテストを生成できます。「このCLIツールのテストを書いてください」と依頼するだけで対応します。

この記事はClaude Code入門シリーズ(第3部)の第24回です。← 第23回:DBマイグレーション第25回:パフォーマンス最適化 →

ご質問はお問い合わせページからお気軽にどうぞ。

著者:R-LLM 開発者

フォロー

Webエンジニアとして10年以上のキャリアがあり、現在はWordPressとLLM(大規模言語モデル)の連携、および生成AIを活用した課題解決のための開発に日々取り組んでいます。

私の信条は、クライアントに寄り添った伴走支援と、最後まで責任を持ってやり遂げる「遂行力」です。これまでの膨大なトライ&エラーの蓄積により、自身の領域内であれば不具合も迅速に解決できる現場の知見を積み上げてきました。

このブログでは、一人のエンジニアとして私自身がAI技術に抱いている純粋な興味をベースに、日々の探求プロセスを発信しています。

生成AILLMをどのように実務に組み込み、価値へ繋げていくか。自身の検証結果だけでなく、実務者としての視点に基づいた「考察や推察」も含めて共有することで、同じように試行錯誤を続ける方々と知見を繋げていければと考えています。

関連記事

SHARE Xでシェア
← 前の投稿
投稿一覧に戻る
次の投稿 →