🐍Pythonコマンドライン引数を完全攻略!argparseで自作スクリプトを神ツール化⚡

IT・テクノロジー

⚡ コマンドライン引数が使えると、自作スクリプトが急に「ツール」になる

Pythonでスクリプトを書けるようになると、次に欲しくなるのが「外から動きを変えられる仕組み」です。日付を変えたいたびにコードの中の数字を書き換える……そんな手間とサヨナラできるのがコマンドライン引数。標準ライブラリのargparseを使えば、まるでlsgitのような本格的なCLIツールを、自分の手で作れるようになります🛠

使えるようになると、毎日の繰り返し作業が一気に自動化対象に変わります。「日付を引数で指定して曜日を返す」「フォルダのパスを渡してファイル一覧を整形する」「対象言語を選んでメッセージを出し分ける」――そんな小さな自分専用ツールがどんどん量産できる未来が待っています✨

📚 そもそもコマンドライン引数って何?

コマンドライン上でプログラムを実行するときに、そのプログラムに渡してあげる値のことをコマンドライン引数と言います。たとえばLinux/Macでよく使うlsコマンド。

  • 📂 ls だけ打つ → 今いるディレクトリの中身を表示
  • 📁 ls /path/to/dir → 指定したパスの中身を表示

このときの/path/to/dirの部分が、まさにコマンドライン引数。Pythonスクリプトでも同じことができたら、毎回コードを書き換えずに動作を変えられて便利ですよね🎯

📅 こんなときに役立つ

たとえば「指定した日付の曜日を表示するプログラム」を作るとします。datetimeモジュールでロジックは書けても、調べたい日付を変えたいたびにコードを開いて数字を書き換える……というのは現実的ではありません。

そこで日付をコマンドライン引数として渡せるようにしておけば、コードはそのまま、実行コマンドを変えるだけで何度でも違う日付を調べられます。これがargparseの威力です🚀

🛠 argparseの基本構文

使い方はシンプルで、流れは次の3ステップです。

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("target")
args = parser.parse_args()

print(args.target)

この4行で、コマンドラインから渡した値をargs.targetとして受け取れるようになります。実行はこんな感じ。

python code.py 2025/05/01
→ 2025/05/01 と表示される

📍 位置引数(Positional Arguments)

上の例のように名前にハイフンを付けない引数を「位置引数」と呼びます。書いた順番=渡す順番が対応するのが特徴で、必須扱いになります。

parser.add_argument("target1")
parser.add_argument("target2")

# 実行: python code.py A B
# args.target1 = "A", args.target2 = "B"

順番が命なので、書いた順と渡す順を必ず揃えるのがコツ。シンプルでミスしにくく、必須の値を受け取りたいときに最適です。

🔢 型を指定する type=

引数はデフォルトで文字列として扱われますが、typeを指定すると自動で変換してくれます。

  • 🔢 type=int → 整数として扱う
  • 🌊 type=float → 浮動小数点数として扱う
  • 📝 指定なし → 文字列のまま

整数を期待しているのに文字列が渡されたら、argparseが自動でエラーを出してくれるので、入力チェックの手間が大幅に減ります🛡

💡 ヘルプ文を help= で設定

help="調べたい日付"のように説明文を書いておくと、python code.py -hを実行したときに親切なヘルプが自動表示されます。「このスクリプト、どう使うんだっけ?」を未来の自分に伝えてくれる小さな贈り物です🎁

🎯 choices= で値を制限する

受け取れる値を選択肢に限定したいときはchoicesが便利。

parser.add_argument("language", choices=["english", "japanese"])

これでenglishjapanese以外を渡すと自動でエラーになり、想定外の入力に振り回されなくなります🛡

📦 nargs= で複数値を受け取る

nargsを指定すると、ひとつの引数で複数の値をリストとして受け取れます。

parser.add_argument("numbers", nargs=3, type=int)

# 実行: python code.py 1 2 3
# args.numbers = [1, 2, 3]

個数を固定したい場合は数値、可変にしたい場合は"*"(0個以上)や"+"(1個以上)も指定できます。

🔧 オプション引数(Optional Arguments)

引数名の前にハイフンを付けると、関数のキーワード引数のようなオプション引数になります。

parser.add_argument("-t", "--text", default="xxx")

# 実行例:
# python code.py -t hello
# python code.py --text hello
# python code.py # → デフォルト値 "xxx" が使われる

第一引数の-tが省略形、第二引数の--textが正式名称。コマンドラインではどちらを使ってもOKで、コードからはargs.textでアクセスできます🎛

⚙ よく使うオプション設定

  • 📌 required=True:必須にしたいとき(オプションだけど必ず指定させたい場合)
  • 📌 default=値:未指定時のデフォルト値を設定
  • 📌 type=int:整数や小数として型変換
  • 📌 choices=[...]:値を選択肢に制限
  • 📌 help="...":ヘルプメッセージを設定
  • 📌 nargs="?""*":可変個数の値を受け取る

🎁 位置引数 vs オプション引数の使い分け

両者の違いをひと目で整理しておきましょう。

  • 📍 位置引数:必須・順番が決まっている・名前なしで渡す(例:処理対象のファイルパス)
  • 🎚 オプション引数:任意・順番自由・--name 値形式で渡す(例:出力フォーマット、ログレベル)

「絶対に必要な対象」は位置引数、「あったら便利な設定」はオプション引数――この使い分けを意識するだけで、自作ツールがぐっと使いやすくなります🎨

🛍 学習&開発を加速するおすすめアイテム

argparseを使いこなせるようになると、自作スクリプトが「自分専用の業務ツール」へと進化します。学習の質と開発体験を底上げしてくれる厳選アイテムをまとめました📚

📕 Pythonの基本から実践までつなげる入門書

変数・関数・モジュール・標準ライブラリの使い方まで、独学者の最初の一冊として相性抜群。argparseの周辺知識も自然に身につきます。

📗 自動化スクリプトのアイデア集

ファイル整理、PDF操作、メール送信、Excel連携など、コマンドライン引数と相性抜群の「日々を楽にする自動化レシピ」が満載。読むたびに作りたいツールが増えます。

📘 ワンランク上のPython設計を学べる中級書

argparseの先にあるClickやTyperのようなライブラリ、テスト可能なコード設計など、CLIツールを「作品レベル」に引き上げる視点が学べます。

🖥 開発効率を一変させるサブモニター

左にエディタ、右にターミナル。CLIツール開発はとくに「コマンドを叩いて結果を見る」サイクルが多いので、画面が広いほど作業速度が上がります。

⌨ 長時間タイピングでも疲れにくいキーボード

コマンド実行&エディタ操作が中心の開発スタイルでは、キーボードの質がそのまま生産性に直結します。打鍵感の良いモデルに替えると、コードを書くのが純粋に楽しくなります🎹

❓ よくある質問(FAQ)

🟢 Q1. argparseとsys.argv、どっちを使えばいい?

シンプルに引数の文字列を取得するだけならsys.argvでも事足りますが、型変換・必須チェック・ヘルプ表示・選択肢制限などを自前で実装するのは大変です。複数引数を扱う、ヘルプを出したい、エラー処理をきちんとしたい――そんな時はほぼ自動的にargparse一択でOKです。

🟢 Q2. 引数の型を指定してエラーを出す方法は?

add_argument("num", type=int)のようにtypeを指定するだけで、整数以外が渡された場合に自動でエラーメッセージが出ます。独自関数を渡すこともできるので、「日付フォーマットに沿っているか」のような複雑な検証もここで完結できます。

🟢 Q3. オプション引数を必須にしたいときは?

required=Trueを指定すればOKです。本来オプションは任意ですが、「--configは必ず渡してほしい」のようなケースで活躍します。位置引数のように見た目を簡潔にしたいか、オプション引数として明示的に名前で受け取りたいかで使い分けましょう。

🟢 Q4. もっと本格的なCLIツールを作りたい場合は?

argparseの次のステップとして、ClickTyperといったサードパーティ製ライブラリがあります。デコレータベースで書けてサブコマンドの管理も楽になるので、規模が大きくなってきたら検討する価値ありです。まずはargparseで基本を押さえてから移行するのがおすすめです。

🟢 Q5. ヘルプメッセージを日本語にしても大丈夫?

もちろん大丈夫です。help="調べたい日付(YYYY/MM/DD形式)"のように日本語で書いておけば、-h実行時にそのまま表示されます。チームで使うツールなら、引数の意味が一目でわかる丁寧なメッセージにしておくと喜ばれます。

✨ まとめ:argparseは「自分専用ツール」を量産する魔法のライブラリ

argparseを使いこなせるようになると、Pythonスクリプトは「コードを開いて書き換えるもの」から「コマンドで呼び出して使うツール」へと進化します。位置引数で必須項目を受け取り、オプション引数で柔軟に動きを変える――この感覚が身につけば、毎日の作業に潜む「めんどくさい繰り返し」を、次々と自動化のチャンスに変えていけます🚀

難しく見えても、書き方の基本はadd_argumentparse_argsのたった2つ。型・選択肢・ヘルプを少しずつ足していくだけで、本格的なCLIツールが手に入ります。良質な書籍と快適な作業環境を味方につけて、自分だけの便利ツール工房を作っていきましょう🛠

コメント

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