Python入門:argparseでコマンドライン引数を扱う方法【初心者向け完全ガイド】

テクニック

📝 はじめに

Python でコマンドラインツールを作るときに欠かせないのが argparse です。
標準ライブラリなので追加インストール不要、しかも -h で自動的にヘルプを生成してくれる便利な仕組みです。

この記事では 初心者向けに、argparseの使い方を基礎から応用まで 網羅的に解説します。


1. argparseの基本構造

import argparse

parser = argparse.ArgumentParser(description="サンプルプログラム")
parser.add_argument("filename", help="処理するファイル名")
args = parser.parse_args()

print(f"指定されたファイル: {args.filename}")

実行:

python sample.py report.txt
# => 指定されたファイル: report.txt

👉 ArgumentParser(description=...)-h 実行時に冒頭に出る説明文です。


2. オプション引数の追加

parser.add_argument("--outdir", default="out", help="出力先ディレクトリ")

実行:

python sample.py report.txt --outdir results

出力:

指定されたファイル: report.txt
出力先ディレクトリ: results

👉 --outdir を省略すると default="out" が使われます。


3. 型の指定とフラグ

parser.add_argument("--repeat", type=int, default=1, help="繰り返し回数")
parser.add_argument("--verbose", action="store_true", help="詳細表示を有効化")

実行例:

python sample.py report.txt --repeat 3 --verbose

👉 args.repeat は整数、args.verbose は True/False になります。


4. 複数の値を受け取る(nargs)

parser.add_argument("--nums", nargs="+", type=int, help="数値を1つ以上指定")

実行:

python sample.py report.txt --nums 1 2 3
# args.nums = [1, 2, 3]
  • nargs="+" → 1個以上
  • nargs="*" → 0個以上
  • nargs=2 → ちょうど2個

5. 必須オプション

parser.add_argument("--config", required=True, help="設定ファイル(必須)")

実行:

python sample.py
# => error: the following arguments are required: --config

👉 required=True を付けると、指定しなければエラーになります。


6. 短縮形と長い形を両立する

parser.add_argument("-f", "--files", nargs="+", help="入力ファイルを指定")

実行:

python sample.py -f a.txt b.txt
python sample.py --files a.txt b.txt

👉 両方同じ args.files に入ります。


7. choicesで入力を制限する

parser.add_argument(
    "--mode",
    choices=["fast", "normal", "slow"],
    help="処理モードを選択"
)

実行:

python sample.py --mode fast   # OK
python sample.py --mode debug  # エラー

👉 ユーザーの入力ミスを防げます。
数値なら choices=range(1, 11) のように範囲で指定することも可能です。


8. サブコマンド形式(git風)

git add, git commit のように、サブコマンドごとに処理を分けることもできます。

import argparse

def cmd_hello(args):
    print(f"Hello, {args.name}!")

def cmd_sum(args):
    print(sum(args.nums))

parser = argparse.ArgumentParser(prog="foo", description="サブコマンド例")
subparsers = parser.add_subparsers(dest="command")

# foo hello --name Alice
p_hello = subparsers.add_parser("hello", help="あいさつする")
p_hello.add_argument("--name", required=True)
p_hello.set_defaults(func=cmd_hello)

# foo sum 1 2 3
p_sum = subparsers.add_parser("sum", help="合計する")
p_sum.add_argument("nums", nargs="+", type=int)
p_sum.set_defaults(func=cmd_sum)

args = parser.parse_args()

if not hasattr(args, "func"):
    parser.print_help(); parser.exit(2)

args.func(args)

実行例:

python foo.py hello --name Alice
# => Hello, Alice!
python foo.py sum 1 2 3
# => 6

9. -h オプションの自動生成

argparse-h / --help を自動追加します。
descriptionhelp="..." がここに反映されるので、必ず書きましょう。

例:

python sample.py -h
usage: sample.py [-h] [--outdir OUTDIR] [--repeat REPEAT] filename

サンプルプログラム

positional arguments:
  filename            処理するファイル

optional arguments:
  -h, --help          show this help message and exit
  --outdir OUTDIR     出力先ディレクトリ
  --repeat REPEAT     繰り返し回数

✅ まとめ

  • add_argument("name") → 必須の位置引数
  • add_argument("--option") → オプション引数
  • type=int, default=..., required=True, nargs="+" などで細かく指定可能
  • -f--files のように短縮形と長い形を両立できる
  • choices=[...] で入力値を制限できる
  • add_subparsers() で git風のサブコマンドも実現できる
  • -h で自動ヘルプが生成される

👉 argparse をマスターすれば、自分のスクリプトを 実用的なCLIツール に進化させられます!

タイトルとURLをコピーしました