【シンプル&高機能】オプション解析ライブラリClickのご紹介

OSWindows 10 64bit
Python3.10.2
Click8.1.3

概要

clickは、シンプルでありながら高機能なオプション解析ライブラリです。

Pythonには標準ライブラリとしてargparseがあります。clickはargparseよりも、シンプルに記述することが可能です。
argparseに関しては以下の記事をご覧ください!

【標準オプション解析ライブラリ】argparseのご紹介【標準オプション解析ライブラリ】argparseのご紹介

本記事では、clickのインストールと基本的な使い方をご紹介します。なお、本記事では位置引数は紹介しません。

インストール

Python
pip install click

基本的な使い方

Python:test.py
import click

@click.command()
@click.option('-opt', '--option')
def main(option):
    click.echo(f'{option=}')

if __name__ == '__main__':
    main()
Shell
> python test.py -opt 18
 option='18'

まず、インストールしたclickをインポートします。次に関数を定義し、clickのデコレータでその関数をデコレーションしてあげます。するとその関数はオプションを持った実行関数となり実行時にオプションを受け取りclickがオプションをパースするようになります。

@click.command()は関数をオプション付きの実行関数へと変換するデコレータです。

@click.option()は実行関数が受け取るオプションを定義するデコレータです。
ここで定義したオプションは自動的に実行関数の引数名になり、オプションに渡されたオプション引数はパースされ結果をその引数に渡します。例では、-opt/--optionというオプションを定義しています。
パース結果の引数名は以下の優先順で採用されます。

  1. 接頭辞---がないオプションが設定されていれば、その名前を格納先の引数名に採用
Python:test.py
import click

@click.command()
@click.option('-opt', '--option', 'op')
def main(op):
    click.echo(f'{op=}')

if __name__ == '__main__':
    main()
  1. --付きオプションが設定されていれば、定義されたうちの最初の名前を格納先の引数名に採用
Python:test.py
import click

@click.command()
@click.option('-opt', '--option', '--option2')
def main(option):
    click.echo(f'{option=}')

if __name__ == '__main__':
    main()
  1. --付きオプションが定義されておらず-付きオプションが、定義されていればそのうちの最初の名前を格納先の引数名に採用
Python:test.py
import click

@click.command()
@click.option('-opt', '-opt2')
def main(opt):
    click.echo(f'{opt=}')

if __name__ == '__main__':
    main()

採用された名前は接頭辞を削除し、小文字に変換します。また、それ以外の-_へ変換されます。

@click.echo()は、環境によらない堅牢なprint関数のようなものです。
引数のf文字列については以下の記事を参考にしてください。

【便利な表示機能】f文字列の紹介【便利な表示機能】f文字列の紹介

clickではこのようにデコレーションしていくだけで簡単にオプション解析ができてしまいます。argparseの場合は、ArgumentParserを初期化し、add_argumentでオプションを追加、parse_argsを実行する必要があり、少々煩雑でした。

ヘルプメッセージを表示

ヘルプメッセージ表示機能は、関数をclickでデコレーションすれば、ヘルプメッセージを表示するオプション--helpが自動で生成されます。

Python:test.py
import click

@click.command()
@click.option('-opt', '--option')
def main(option):
    click.echo(f'{option=}')

if __name__ == '__main__':
    main()
Shell
> python test.py --help
Usage: test.py [OPTIONS]

Options:
  --help  Show this message and exit.
注意

ヘルプメッセージ表示の短縮オプション-hは生成されないことに注意してください。

オプションのヘルプメッセージを変更するには引数helpにメッセージを指定します。

Python
import click

@click.command()
@click.option('-opt', '--option', help='option help message')
def main(option):
    click.echo(f'{option=}')

if __name__ == '__main__':
    main()
Shell
> python test.py --help
Usage: test.py [OPTIONS]

Options:
  -opt, --option TEXT  option help message
  --help               Show this message and exit.

まとめ

本記事ではオプション解析ライブラリclickのご紹介をしました。argparseよりも簡単に高機能なライブラリです。

ここでは基本的な使い方にとどめましたが、ほかにも様々な使い方ができます。

参考

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です