コマンドラインインターフェース (CLI) を持つアプリケーションを作成する際に、ユーザーからの入力を受け取るための仕組みが必要です。Pythonでは、argparse モジュールが、コマンドライン引数を解析し、プログラム内で簡単に利用できるようにする強力なツールを提供します。この記事では、argparse の基本的な使い方から、高度な機能まで、網羅的に解説します。
argparse は、Python標準ライブラリに含まれているモジュールであり、コマンドライン引数を解析するための便利な機能を提供します。argparse を使うことで、ユーザーがプログラムに渡す引数を簡単に処理できるようになります。
基本的な流れ
シンプルなサンプル
import argparse
# ArgumentParser オブジェクトを作成
parser = argparse.ArgumentParser(description="サンプルスクリプトの説明文")
# 必須引数を追加
parser.add_argument("name", help="ユーザーの名前")
# オプション引数を追加
parser.add_argument("-a", "--age", type=int, help="ユーザーの年齢")
# 引数の解析
args = parser.parse_args()
# 使用例
print(f"こんにちは、{args.name}さん!")
if args.age:
print(f"あなたは {args.age} 歳です。")
上記のコードでは、ユーザーの名前 (name) と年齢 (age) を受け取ります。name は必須引数で、age はオプション引数です。type=int は、age 引数を整数型に変換することを指定します。
add_argument() メソッドは、さまざまなオプションを使用して、引数の挙動をカスタマイズできます。
必須の位置引数: 引数名を指定するだけで、必須の位置引数として追加されます。
parser.add_argument("username", help="ユーザー名")
オプション引数: ハイフン (-) またはダブルハイフン (–) で始まる名前を指定すると、オプション引数になります。
parser.add_argument("-v", "--verbose", action="store_true", help="詳細モードを有効にします")
type オプション: 引数のデータ型を指定できます。指定されたデータ型に自動変換されます。
parser.add_argument("count", type=int, help="処理回数")
default オプション: 引数が指定されなかった場合のデフォルト値を設定します。
parser.add_argument("--output", default="result.txt", help="出力ファイル名")
choices オプション: 引数に指定できる値を限定します。
parser.add_argument("--mode", choices=["easy", "medium", "hard"], help="難易度の選択")
required オプション: オプション引数を必須にする場合に使います。
parser.add_argument("--config", required=True, help="設定ファイルのパス")
action オプションを使って、引数の解釈方法を制御できます。
store_true / store_false: フラグ(スイッチ)の引数として設定。指定するとTrue/Falseに設定されます。
parser.add_argument("-d", "--debug", action="store_true", help="デバッグモードを有効にします")
append: 同じオプションを複数回指定した場合、それらの値をリストに追加します。
parser.add_argument("--tag", action="append", help="タグを追加します")
count: オプションが指定される回数をカウントします(例: -vvvで3回カウント)。
parser.add_argument("-v", "--verbose", action="count", help="詳細モードのレベルを指定します")
ArgumentParser オブジェクトには、プログラムの説明文やヘルプメッセージをカスタマイズするためのオプションがあります。
parser = argparse.ArgumentParser(
description="このプログラムはサンプルです。",
epilog="実行方法に関する追加の情報"
)
add_subparsers() メソッドを使って、GitやDockerのようにサブコマンドを設定できます。
# サブコマンド用のArgumentParserオブジェクトを作成
parser = argparse.ArgumentParser(description="サブコマンドのサンプル")
subparsers = parser.add_subparsers(dest="command")
# "install"コマンドを追加
install_parser = subparsers.add_parser("install", help="インストールを実行します")
install_parser.add_argument("package", help="インストールするパッケージ名")
# "remove"コマンドを追加
remove_parser = subparsers.add_parser("remove", help="削除を実行します")
remove_parser.add_argument("package", help="削除するパッケージ名")
args = parser.parse_args()
if args.command == "install":
print(f"{args.package} をインストールします")
elif args.command == "remove":
print(f"{args.package} を削除します")
parse_args() は、Namespace オブジェクトを返します。指定した引数は、このオブジェクトの属性としてアクセスできます。
args = parser.parse_args()
print(args.username) # 位置引数
print(args.verbose) # オプション引数
自動で生成されるヘルプメッセージは –help または -h オプションで表示できます。引数に help オプションを設定すると、個別の引数の説明が表示されます。
parser = argparse.ArgumentParser(description="カスタムヘルプメッセージのサンプル")
parser.add_argument("input", help="入力ファイルのパス")
parser.add_argument("-o", "--output", help="出力ファイルのパス")
args = parser.parse_args()
import argparse
# ArgumentParser オブジェクト作成
parser = argparse.ArgumentParser(
description="コマンドライン引数の例",
epilog="このスクリプトはサンプルです。"
)
# 必須の位置引数
parser.add_argument("input_file", help="入力ファイルのパス")
# オプション引数
parser.add_argument("-o", "--output", default="output.txt", help="出力ファイル")
parser.add_argument("-v", "--verbose", action="count", help="詳細モードのレベル指定")
parser.add_argument("-l", "--level", choices=["error", "warning", "info"], required=True, help="ログレベル")
parser.add_argument("--tags", action="append", help="タグを追加")
# 引数の解析
args = parser.parse_args()
# 処理
print(f"入力ファイル: {args.input_file}")
print(f"出力ファイル: {args.output}")
print(f"詳細モードのレベル: {args.verbose}")
print(f"ログレベル: {args.level}")
print(f"タグ: {args.tags}")
python D:\Pythonテスト\ParseArgs\ArgsParse.py test -l error
実行例: 必須項目のみの入力
PS D:\Pythonテスト\ParseArgs> python D:\Pythonテスト\ParseArgs\ArgsParse.py test -l error
入力ファイル: test
出力ファイル: output.txt
詳細モードのレベル: None
ログレベル: error
タグ: None
実行例: 引数設定忘れ
PS D:\Pythonテスト\ParseArgs> python D:\Pythonテスト\ParseArgs\ArgsParse.py
usage: ArgsParse.py [-h] [-o OUTPUT] [-v] -l {error,warning,info} [--tags TAGS] input_file
ArgsParse.py: error: the following arguments are required: input_file, -l/--level
argparse は、Pythonでコマンドライン引数を解析するための強力なツールです。このモジュールを利用することで、ユーザーフレンドリーで機能的なCLIアプリケーションを簡単に開発できます。
コマンドライン引数ありのプログラムをVSCodeでデバッグしたい場合はこちらを参照ください。
この記事では、argparse の基本的な使い方から、高度な機能までを網羅的に解説しました。この記事が、argparse を活用して、より洗練されたコマンドラインアプリケーションを開発する手助けになれば幸いです。