PythonでCLIツールを作成するのにdocoptでパラメータのパーサー作成を自動化する

概要

Unity ML-Agentsを利用していて、CLIの実装にdocoptというモジュールを利用していて、パラメータのバリデーションをいい感じにやってくれて便利そうだったので、お試ししてみました。

docopt…
http://docopt.org/

使い方

上記サイトをみたらわかると思いますが、CLIのドキュメントをインターフェース定義として、パラメータのパーサーを自動的に定義してくれるみたいです。素敵。

docopt helps you:
・ define the interface for your command-line app, and
・ automatically generate a parser for it.

試しにCLIツールを実装してみます。
仮想環境を作成するか、Dockerを利用するかなどはお好みで。

> mkdir 任意のディレクトリ
> cd 任意のディレクトリ
> python -m venv venv
> . venv/bin/activate
> pip install docopt
> touch hoge.py

hoge.py

from docopt import docopt


if __name__ == '__main__':

  _USAGE = '''
  実行しても何もしないツール

  Usage:
    hoge run <name> [--foo=<n>]
    hoge -h | --help

  Options:
    -h --help     ヘルプを表示
    --foo=<n>     よくわからないオプション [default: 3]
  '''
  params = docopt(_USAGE)
  print(params)

はい。

実際に実行してみます。

> python hoge.py
Usage:
    hoge run <name> [--foo=<n>]
    hoge -h | --help
> python hoge.py run
Usage:
    hoge run <name> [--foo=<n>]
    hoge -h | --help
> python hoge.py run hoge
{'--foo': '3',
 '--help': False,
 '<name>': 'hoge',
 'run': True}
> python hoge.py run hoge --foo 50
{'--foo': '50',
 '--help': False,
 '<name>': 'hoge',
 'run': True}
> python hoge.py run hoge --foo=100
{'--foo': '100',
 '--help': False,
 '<name>': 'hoge',
 'run': True}
> python hoge.py --help
  実行しても何もしないツール

  Usage:
    hoge run <name> [--foo=<n>]
    hoge -h | --help

  Options:
    -h --help     ヘルプを表示
    --foo=<n>     よくわからないオプション [default: 3]

Usageに書いているとおりにパラメータ指定がされていないと弾いてくれます。

まとめ

自前でパーサーを実装すると地味に手間がかかるので、ドキュメントからパーサーを自動生成してくれて、とても素敵です。

実装して確認するのが、面倒!ってときは下記URLでブラウザ上で動作検証をすることができます。ぜひお試しあれ^^

http://try.docopt.org/

元記事はこちら

PythonでCLIツールを作成するのにdocoptでパラメータのパーサー作成を自動化する