[Python実践]argparseに挑戦してみよう！《add_argument編》

# はじめに

今回はPythonの「**argparse**」の基礎と「**add_argument**」の使い方について解説していこうと思います！

第１弾はこちら！

https://chaldene.net/argparse-argumentparser

第３弾はこちら！

https://chaldene.net/argparse-parseargs

「**argparse**」はコマンドライン引数を渡してくれるもので、Pythonエンジニアを目指している方は知っておいた方が良いものになります。

ぜひこの記事でマスターしていってください！

この記事はPythonの公式ドキュメントを参考にしています。

Pythonに限らず、プログラミング言語の公式ドキュメントは非常に読みにくいので、この記事でわかりやすく解説していきます。

「**argparse使ってみたい**」

「**コマンドライン引数を渡してみたい**」

「**argparseって何？**」

「**自作モジュール作ってみたい**」

「**他の人が書いたコードでargparseの部分がわからない**」

このような人のお役に立てれば幸いです。

それでは早速本題に入っていきましょう！

::: note warn
「argparse」はPythonの基礎を理解していないと難しいので、Pythonの基礎を理解していない人は以下を参考に学習してください！
:::

https://chaldene.net/python-book

# 概要

まずはargparseについて説明していきましょう。

argparseは一言で言えば以下のようになります。

::: note
コマンドライン引数を渡せる。
:::

これではよくわからないですよね。

「**コマンドライン引数**」とは、以下のようにPythonファイルを呼び出す際に渡せる値のことです。

```python
python main.py --n cardene --age 30
```

少し詳しく説明すると、`--nはname`で今回は**cardene**を渡しています。

`--age`は**30**という値を渡しています。

```python
def user_profile(name, age):
    print(name)
    print(age)
```

こんな感じの関数があったとして、**cardene**が`name`引数に、**30**が`age`に渡されるということです。

どうでしょうか理解できたでしょうか？

このように引数が指定されることで、ユーザーごとにカスタムして使えるようにになります。

僕自身Pypiに自作モジュールをあげたことがあります。

https://pypi.org/project/comnamepy/

このモジュールもterminalでも使用することができ、その際には「コマンドライン引数」を渡す必要があります。

この記事ではその方法を学んでいきます。

「コマンドライン引数」を設定する際、結構細かく設定できるのでぜひ全てマスターしていってください！

# add_argument

前章の一番途中に作成したものが**add_argument**です。

**add_argument**は１つ１つのコマンドライン引数を細かく設定するものです。

```python
import argparse

parser = argparse.ArgumentParser(description='かるでねブログ用のテストコード')

parser.add_argument('name', type=str, nargs='+', default='cardene', help='username')
parser.add_argument('--age', '-a', nargs='+', type=int, help='user age')

args = parser.parse_args()
```

５行目、６行目が**add_argument**ですね。

色々設定されているのが確認できますが何を設定しているのかわからないと思います。

この章で１つ１つ解説していくので学んでいってください！

## 引数一覧

::: note
- name flags
    - コマンドライン引数名。
- type
    - コマンドライン引数の型。
- default
    - コマンドライン引数のデフォルト値。
- nargs
    - 受け取れるコマンドライン引数の数。
- const
    - actionとnargsの組み合わせで利用できる定数。
- action
    - 引数が呼ばれた時のアクション。
- choices
    - 選択肢からコマンドライン引数を選べる。
- required
    - オプション引数を必須にするか任意にするか。
- help
    - 引数が何なのかを示す簡潔な説明。
- metavar
    - ヘルプメッセージの中で使われる引数の名前。
- dest
    - parser_args()が返すオブジェクトに追加される属性名。
:::

では早速１つ１つ確認していきましょう！

## name, flags

::: note 
「コマンドライン引数」の名前。
:::

**コマンドライン引数**の名前を設定できます。

この部分で**位置引数（必須引数）**か**オプション引数**かを指定できる。

指定方法としては**接頭辞**が使われる。

デフォルトでは`--`を名前の先頭につけることで自動で**オプション引数**と認識される。

この**接頭辞**は変更することができるので、以下の記事を参考にしてください。

https://chaldene.net/argparse-argumentparser

### 位置引数

**cardene**、**name**など。

### オプション引数

`--cardene`、`--age`など。

実際に見ていきましょう！

```python
import argparse

parser = argparse.ArgumentParser()

parser.add_argument('name', type=str, nargs='+', default='cardene', help='username')
parser.add_argument('--age', nargs='+', type=int, help='user age')

args = parser.parse_args()
```

５行目と６行目の`name`と`--age`が「**コマンドライン引数**」名です。

terminalで`python main.py --h`と実行してください。

```python
usage: main.py [-h] [--age AGE [AGE ...]] name [name ...]

positional arguments:
  name                 username

optional arguments:
  -h, --help           show this help message and exit
  --age AGE [AGE ...]  user age
```

３行目の**positional arguments**が**位置引数**で、６行目のoptional argumentsが**オプション引数**です。

`--`が先頭についてるものが**オプション引数**と認識されていますね。

# 続き

これより先は以下の記事にまとめています。

https://chaldene.net/argparse-addargument

より詳しく**addargument**について学ぶことができるので、興味がある方はぜひ！
（もちろん無料です！）