argparse

Python標準ライブラリに含まれるコマンドライン引数パーサー。基本的なCLI機能を提供し、追加の依存関係を必要としません。

pythonclistandard-libraryparser

フレームワーク

argparse

概要

argparseはPython標準ライブラリに含まれるコマンドライン引数パーサーです。追加の依存関係を必要とせず、基本的なCLI機能を提供します。型変換、検証、自動ヘルプ生成、サブコマンドサポートなど、堅牢なCLIアプリケーションの構築に必要な機能を備えています。

詳細

argparseはPython 2.7および3.2から標準ライブラリに追加され、以前のoptparseモジュールを置き換えました。標準ライブラリの一部として、追加のインストールなしで利用でき、依存関係を最小限に抑えたい場合に理想的な選択肢です。多くのPythonスクリプトやアプリケーションで使用されており、実績のあるソリューションです。

主な特徴

  • 標準ライブラリ: 追加のインストールが不要
  • 自動ヘルプ生成: -h--helpでヘルプメッセージを自動生成
  • 型変換とバリデーション: 引数の型指定と自動変換
  • 位置引数とオプション引数: 両方をサポート
  • サブコマンド: 複雑なCLI構造の作成が可能
  • 相互排他グループ: 互いに排他的な引数の定義
  • カスタムアクション: 独自の引数処理ロジックの実装

メリット・デメリット

メリット

  • ゼロ依存関係: 標準ライブラリなので追加インストール不要
  • 安定性: 長年にわたって使用されている実績のあるライブラリ
  • 包括的な機能: 基本的なCLIアプリケーションに必要な機能をすべて提供
  • 学習コスト: Pythonの標準ライブラリなので学習リソースが豊富
  • 移植性: Python標準環境があればどこでも動作

デメリット

  • 冗長な記述: より高度なライブラリと比較してコードが冗長になる場合がある
  • 制限されたカスタマイズ: 外部ライブラリほど柔軟ではない
  • サブコマンドの複雑さ: 複雑なサブコマンド構造は記述が煩雑
  • エラーメッセージ: デフォルトのエラーメッセージがユーザーフレンドリーでない場合がある

主要リンク

書き方の例

import argparse

# 基本的な引数パーサーの作成
parser = argparse.ArgumentParser(description='ファイル処理ツール')

# 位置引数
parser.add_argument('filename', help='処理するファイル名')

# オプション引数
parser.add_argument('--output', '-o', help='出力ファイル名')
parser.add_argument('--verbose', '-v', action='store_true', 
                    help='詳細な出力を有効にする')
parser.add_argument('--count', type=int, default=1, 
                    help='繰り返し回数(デフォルト: 1)')

# 選択肢の制限
parser.add_argument('--format', choices=['json', 'xml', 'yaml'], 
                    default='json', help='出力フォーマット')

# 複数の値を受け取る
parser.add_argument('--tags', nargs='+', 
                    help='1つ以上のタグを指定')

# サブコマンドの例
subparsers = parser.add_subparsers(dest='command', help='利用可能なコマンド')

# 'process' サブコマンド
process_parser = subparsers.add_parser('process', help='ファイルを処理')
process_parser.add_argument('--mode', choices=['fast', 'thorough'], 
                           default='fast', help='処理モード')

# 'validate' サブコマンド
validate_parser = subparsers.add_parser('validate', help='ファイルを検証')
validate_parser.add_argument('--strict', action='store_true', 
                            help='厳密な検証を実行')

# 引数の解析
args = parser.parse_args()

# 引数の使用
if args.verbose:
    print(f"処理中: {args.filename}")
    print(f"出力: {args.output}")
    print(f"フォーマット: {args.format}")

if args.command == 'process':
    print(f"処理モード: {args.mode}")
elif args.command == 'validate':
    if args.strict:
        print("厳密な検証を実行中...")