Python Blog

Pythonでコマンドラインツールを作るには?argparse入門

| #python #学習

Pythonでコマンドラインツールを作る方法をargparseで初心者向けに解説。引数やオプションの受け取り方、ヘルプ表示、実用的なツール作成例まで紹介します。

Pythonの基礎文法を学んだあと、次に何を作ればいいのか迷うことはありませんか?

WebアプリやAIアプリは難しそう。でも、練習問題だけでは物足りない。そんなときにおすすめなのが、コマンドラインツールです。

コマンドラインツールとは、ターミナルやコマンドプロンプトから実行する小さなプログラムのことです。

画面を作らなくてもよいので、Python初心者でも取り組みやすいです。実務でも使える考え方が詰まっています。

この記事では、Pythonでコマンドラインツールを作る方法を、argparseで初心者向けに解説します。

コマンドラインツールとは何か

まず、コマンドラインツールという言葉を整理しましょう。

コマンドラインツールは、ターミナルから実行するプログラムです。

たとえば、次のように実行します。

python greet.py Taro

このコマンドを実行すると、Taroさん、こんにちはのように表示されるイメージです。

マウスでボタンを押すアプリではありません。文字で命令を渡して動かすアプリです。

最初は少し地味に見えるかもしれません。

しかし、ファイル整理、CSV集計、テキスト変換など、日常の作業に向いています。

なぜ初心者にコマンドラインツールがおすすめなのか

Python初心者にコマンドラインツールをおすすめする理由は、学習しやすいからです。

画面デザインやWebサーバーを考えず、Pythonの処理に集中できます。

たとえば、ファイル名を一括変更するツールや、入力した金額に税率をかけるツールなら、基礎文法と標準ライブラリだけで作れます。

文法はわかったのに作れないと感じている方には、ちょうどよい練習です。

以下の記事でも、小さなアプリ作りの大切さを解説しています。

【関連記事】Pythonの基礎文法を学んだ後、次に何をすればいい?

argparseとは何か

argparseは、Pythonに標準で用意されているライブラリです。

追加インストールなしで使えます。

役割は、コマンドラインから渡された引数を扱いやすくすることです。

引数とは、実行時に一緒に渡す値のことです。

python greet.py Taro

この例では、Taro が引数です。

argparseを使うと、引数やオプションを扱い、ヘルプメッセージも作れます。

用語 意味
引数 コマンド実行時に渡す値 Taro
オプション 動作を変える指定 --upper
パーサー 引数を解析する仕組み argparse.ArgumentParser
ヘルプ 使い方の説明 -h, --help

最初は言葉が難しく感じるかもしれません。

でも、実際に書いてみると意外とシンプルです。

まずは普通のPythonコードを書いてみる

argparseを使う前に、まずは普通のPythonコードで挨拶プログラムを書いてみましょう。

name = "Taro"
print(f"{name}さん、こんにちは")

このコードは動きます。

しかし、名前を変えたいときはコードの中を書き換える必要があります。

少し不便ですよね。

コマンドラインツールでは、名前を外から渡せるようにします。

python greet.py Taro
python greet.py Hanako

実行時に値を変えられると、ツールとして使いやすくなります。

argparseで引数を受け取る基本

ここからargparseを使ってみましょう。

次のコードを greet.py という名前で保存します。

import argparse

parser = argparse.ArgumentParser(description="名前を受け取って挨拶するツール")
parser.add_argument("name", help="挨拶する相手の名前")

args = parser.parse_args()

print(f"{args.name}さん、こんにちは")

実行するときは、次のように名前を渡します。

python greet.py Taro

結果は次のようになります。

Taroさん、こんにちは

ポイントは、add_argumentで引数を定義しているところです。

parser.add_argument("name", help="挨拶する相手の名前")

この1行で、nameという引数を受け取れるようになります。

parse_argsを実行すると、渡された値がargsに入ります。そして、args.nameで値を取り出せます。

ヘルプメッセージを自動で表示できる

argparseの便利なところは、ヘルプメッセージを自動で作ってくれることです。

次のように実行してみましょう。

python greet.py --help

または短く書いて、次のようにも実行できます。

python greet.py -h

すると、使い方が表示されます。

usage: greet.py [-h] name

名前を受け取って挨拶するツール

positional arguments:
  name        挨拶する相手の名前

options:
  -h, --help  show this help message and exit

自分でヘルプ文を作らなくても、argparseが整えてくれます。

これは実務でもかなり便利です。

私も社内向けの小さなツールを作るとき、よくヘルプを用意します。数か月後の自分や別のメンバーが使いやすいからです。

オプション引数を追加してみる

次に、オプション引数を追加してみましょう。

オプション引数とは、指定したときだけ動作を変える引数です。

たとえば、挨拶を大文字で表示する--upperオプションを作ります。

import argparse

parser = argparse.ArgumentParser(description="名前を受け取って挨拶するツール")
parser.add_argument("name", help="挨拶する相手の名前")
parser.add_argument("--upper", action="store_true", help="挨拶文を大文字にする")

args = parser.parse_args()

message = f"{args.name}さん、こんにちは"

if args.upper:
    message = message.upper()

print(message)

実行例は次の通りです。

python greet.py Taro
Taroさん、こんにちは
python greet.py Taro --upper
TAROさん、こんにちは

action="store_true"は、指定されたらTrue、指定されなければFalseになる設定です。

チェックボックスのようなものだと考えるとわかりやすいです。

数値を受け取るにはtypeを使う

コマンドラインから受け取る値は、基本的に文字列です。

そのため、数値として扱いたい場合は変換が必要です。

argparseでは、typeを指定すると自動で変換できます。

たとえば、税込み価格を計算するツールを作ってみましょう。

import argparse

parser = argparse.ArgumentParser(description="税込み価格を計算するツール")
parser.add_argument("price", type=int, help="税抜き価格")
parser.add_argument("--rate", type=float, default=0.1, help="税率。指定しない場合は0.1")

args = parser.parse_args()

tax = args.price * args.rate
total = args.price + tax

print(f"税込み価格は{int(total)}円です")

実行例です。

python tax.py 1000
税込み価格は1100円です

税率を変えたい場合は、次のように指定できます。

python tax.py 1000 --rate 0.08
税込み価格は1080円です

このように、type=inttype=floatを使うと、引数を数値として受け取れます。

数字ではない値を渡すと、argparseがエラーを表示してくれます。

requiredとdefaultを使い分ける

argparseでは、必ず必要な値と、指定しなくてもよい値を分けられます。

位置引数は、基本的に必須です。

parser.add_argument("price", type=int)

一方で、--rate のようなオプション引数にはdefaultを設定できます。

parser.add_argument("--rate", type=float, default=0.1)

defaultは、指定されなかったときの初期値です。

これにより、毎回すべての値を指定しなくても使えます。

指定方法 使いどころ
位置引数 必ず必要な値 ファイル名、価格、名前
オプション引数 必要に応じて変えたい値 税率、出力形式、件数
default 指定がないときの初期値 税率0.1
action="store_true" 有効・無効を切り替える --verbose

ツール作りでは、何を必須にして、何を任意にするかが大切です。

これも小さな設計の練習になります。

ファイルを扱うコマンドラインツールを作る

ここまでの例は、画面に文字を表示するだけでした。

次は、少し実用的なファイル行数カウントツールを作ってみましょう。

指定したテキストファイルの行数を数えるツールです。

import argparse
from pathlib import Path

parser = argparse.ArgumentParser(description="テキストファイルの行数を数えるツール")
parser.add_argument("file_path", help="行数を数えたいファイルのパス")

args = parser.parse_args()

path = Path(args.file_path)

if not path.exists():
    print("ファイルが見つかりません")
else:
    text = path.read_text(encoding="utf-8")
    lines = text.splitlines()
    print(f"{path.name}{len(lines)} 行です")

実行例です。

python count_lines.py memo.txt
memo.txt は 12 行です

このコードでは、pathlibでファイルの存在を確認しています。

ファイルが存在しない場合に、メッセージを表示しているのもポイントです。

エラー処理も忘れずに考える

初心者が作るツールでよくあるのが、正しい入力なら動くけれど、変な入力で落ちる状態です。

学習用なら最初はそれでも構いません。

ただし、誰かに使ってもらうなら、エラー時の動きも考えたいです。

たとえば、ファイルが存在しない場合、文字コードが違う場合、数値に変換できない場合などです。

argparseは、引数の数が足りないときや型が違うときに、自動でエラーを出してくれます。

python tax.py abc

このように数字ではない値を渡すと、intに変換できないためエラーになります。

ただし、ファイルの中身などの確認は、自分で書く必要があります。

エラー文を読む力をつけたい方は、以下の記事も参考になります。

【関連記事】Pythonのエラー文はどこを読めばいい?初心者向け traceback の見方

コマンドラインツールを作るときの設計ポイント

コマンドラインツールは小さく作れる反面、何でも詰め込むと使いにくくなります。

最初に、何をするツールなのかを1文で説明できるようにしましょう。

たとえば、行数を数えるツール、CSVの合計金額を出すツール、ファイル名を表示するツール、という感じです。

1文で説明できない場合、機能が多すぎる可能性があります。

見るポイント 確認すること
目的 何をするツールか1文で言えるか
引数 必ず必要な値は何か
オプション 必要に応じて変えたい動作は何か
エラー 失敗したときにわかりやすく表示できるか
ヘルプ --helpで使い方がわかるか

初心者のうちは、機能を増やすより、1つの目的を達成するツールを作るほうが練習になります。

これは実務でも同じです。

何でもできるツールは便利そうに見えますが、使い方が複雑になりがちです。

私がargparseで意識していること

私はエンジニアとして10年ほど開発してきましたが、コマンドラインツールは今でもよく作ります。

ログを整形する。CSVを集計する。大量ファイルをチェックする。

こうした小さな作業では、毎回大きなアプリを作るより、コマンドラインツールのほうが早いことがあります。

そのとき意識しているのは、未来の自分が使えるかです。

1回だけ使うつもりのツールでも、数週間後にまた使いたくなることがあります。そのとき、引数の意味がわからないと困ります。

だから、私はdescriptionやhelpをなるべく書くようにしています。

parser = argparse.ArgumentParser(
    description="CSVファイルから合計金額を計算するツール"
)
parser.add_argument("csv_file", help="集計したいCSVファイルのパス")

たったこれだけでも、あとから見たときの使いやすさが変わります。

初心者のうちは、動くコードを書くことに集中してよいです。少し余裕が出たら、使い方がわかるコードも意識してみてください。

初心者におすすめの練習テーマ

argparseに慣れるには、実際に小さなツールを作るのが一番です。

最初は身近なテーマで構いません。

たとえば、次のようなものがおすすめです。

ツール例 練習できること
挨拶ツール 位置引数の基本
税込み計算ツール type、default
行数カウントツール ファイルパス、pathlib
文字数カウントツール ファイル読み込み、文字列操作
CSV合計ツール csv、数値変換
ファイル名検索ツール pathlib、オプション引数

最初から完璧なツールを作る必要はありません。

動いたら少し改造する。オプションを増やす。ヘルプを整える。

このように育てると、argparseだけでなくPython全体の理解も深まります。

argparseの次に学ぶとよいこと

argparseで引数を扱えるようになると、Pythonで作れるものが増えます。

次に学ぶなら、ファイル操作、CSV処理、JSON、loggingあたりがおすすめです。

特にloggingは、コマンドラインツールと相性がよいです。

printだけでなく、処理状況をログとして残せるようになります。

また、Gitで管理しておくと、ツールを少しずつ改善しやすくなります。

Gitについては、以下の記事で詳しく解説しています。

【関連記事】Python学習にGitは必要?初心者が最低限覚えたい使い方

まとめ

Pythonでコマンドラインツールを作るなら、argparseはとても便利な標準ライブラリです。

コマンド実行時に値を受け取り、オプションを追加し、ヘルプメッセージまで自動で作れます。

最初は、名前を受け取って挨拶するツールのような小さな例から始めましょう。

慣れてきたら、税込み計算、ファイル行数カウント、CSV集計など、少し実用的なテーマに広げていくとよいです。

コマンドラインツールは、画面なしで実用的なプログラムを作れるのが魅力です。

Pythonの基礎文法を学んだあと、実践力をつける練習としてとても向いています。

大切なのは、いきなり大きなものを作らないことです。

1つの目的を持った小さなツールを作り、少しずつ引数やオプションを追加しましょう。

その積み重ねが、Pythonで自分の作業を楽にする力につながります。

ここまでお読みいただきありがとうございました。

次のアクション

記事で読んだ内容を、講座で実装してみましょう

Python WebAcademyでは、ブラウザ上でコードを書いて実行結果を確認できます。無料で始められる講座から、学習の流れを試せます。

あわせて読む

関連記事

ブログ一覧へ