DUICUO

GoogleのオープンソースPythonコマンドラインライブラリ「fire」の初見

[[286655]]

I. はじめに

このシリーズのこれまでの記事では、argparse、docopt、click の主な機能と使い方を紹介しました。それぞれに独自の特徴があり、いずれもコマンドラインタスクを優れた方法で実行できます。argparse は手続き型で、まずパーサーをセットアップし、次にパラメータを定義し、次にコマンドラインを解析し、最後にビジネスロジックを実装する必要があります。docopt は、まず宣言型構文を使用してパラメータを定義し、次にコマンドラインを手続き型に解析し、ビジネスロジックを実装します。click はデコレータを使用して明示的なコマンド呼び出しロジックをさらに簡素化しますが、それでもオブジェクト指向性は十分ではありません。

本日は、汎用的なオブジェクト指向アプローチを用いてコマンドラインを管理するFireをご紹介します。Fireのオブジェクトはクラス、関数、辞書、リストなどに対応しており、より柔軟でシンプルなものとなっています。

このシリーズの記事では、デフォルトでPython 3をインタープリターとして使用します。まだPython 2をお使いの場合は、両者の構文とライブラリの使用方法の違いにご注意ください。

II. はじめに

`fire` は、任意の Python オブジェクトに基づいてコマンドラインインターフェースを自動生成できます。以下の特徴があります。

  • 簡単な方法でCLIを生成できる
  • これは、Python コードの開発とデバッグのためのユーティリティ ツールです。
  • 既存のコードや他の人のコードを CLI に変換できます。
  • これにより、Bash と Python 間の切り替えが容易になります。
  • REPL に必要なモジュールと変数を事前に設定しておくことで、実用的な REPL を使いやすくなります。

fire ライブラリは次のコマンドを使用して簡単にインストールできます。

  1. 火を設置する

III. クイックスタート

argparse、docopt、click を使用してコマンドライン プログラムを実装する手順を思い出してください。

  • argparse の場合、プロセスには 4 つのステップが含まれます。最初にパーサーを設定し、次にパラメーターを定義し、コマンド ラインを解析し、最後にビジネス ロジックを実装します。
  • docopt の場合、プロセスには 3 つのステップが含まれます。最初にインターフェイス記述を定義し、次にコマンド ラインを解析し、最後にビジネス ロジックを実装します。
  • `click` の場合、ビジネス ロジックを実装し、デコレータを使用してパラメータを定義します (2 つのステップ)。

実装手順はますます簡素化され、4ステップから2ステップに簡素化されました。今日の主役であるFireでは、必要なのは1ステップだけです。既存のビジネスロジックで十分です。

これは信じられないほどシンプルです。なぜこれで十分なのでしょうか?Pythonの関数を考えてみましょう。関数はコマンドラインプログラムに対応し、関数のパラメータはコマンドラインプログラムのパラメータとオプションに対応できるでしょうか?次に、Pythonのクラスを見てみましょう。クラスはコマンドラインプログラムに対応し、クラス内の各インスタンスメソッドはサブコマンドに対応し、インスタンスメソッドのパラメータはサブコマンドのパラメータとオプションに対応できるでしょうか?

このように考えると、理論的には可能です。fireを使うことでコマンドラインプログラムをシンプルに実装できる様子を、次の例で見てみましょう。

3.1 関数の使用

次の例を見てみましょう。

  1. firedef hello( name = "World" ): return 'Hello
  2. { name }! '.format(name=name)if __name__ == ' __main__':
  3. 火。火(こんにちは)

上記の例では、`hello` という関数を定義しています。この関数は `name` パラメータを受け取り、デフォルト値は "World" です。`fire.Fire(hello)` を使用すると、このコマンド機能を簡単かつ迅速に実装できます。このコマンドラインは `--name` オプションを受け付けます。指定されていない場合はデフォルト値 "World" が使用され、指定されている場合は指定された値が使用されます。

コマンドラインでは次のコマンドを実行できます。

  1. $ python hello.pyHello World!$ python hello.py --name=ProdesireHello  
  2. Prodesire!$ python hello.py --helpINFO: ヘルプを表示しています 
  3. コマンド'hello.py --help' 名前hello.py概要 hello.py
  4. <flags>FLAGS --name=NAME  

3.2 使用クラス

関数を使用するのが最も簡単な方法ですが、クラスを使用するなど、より体系的な方法で実装したい場合も、fire はそれをサポートします。

  1. import fireclass Calculator(object): "" "シンプルな計算機
  2. クラス。 "" " def double (self, number): 2 * number defを返す
  3. triple(self, number): __name__ == '__main__'の場合、3 * numberを返します:
  4. fire.Fire(電卓)

上記の例では、`Calculator` クラスが `double` と `triple` という 2 つのインスタンスメソッドで定義されています。どちらもデフォルト値のない `number` パラメータを受け取ります。コマンド機能は `fire.Fire(Calculator)` を使用することで簡単かつ迅速に実装できます。このコマンドラインは、2 つのサブコマンド `double` と `triple` 、および位置パラメータ `NUMBER` またはオプションパラメータ `--number` をサポートしています。

コマンドラインでは次のコマンドを実行できます。

  1. $ python calculator.pyダブル1020$ python calculator.py トリプル
  2. --number=1545$ python calculator.py double --helpINFO: ヘルプを表示しています
  3. コマンド 'calculator.py double --help'.NAME calculator.py
  4. double概要calculator.py double数値位置引数
  5. NUMBERNOTES 位置引数にはフラグ構文も使用できます 

IV. 要約

fireの使い方はとてもシンプルです。Pythonオブジェクトを定義して、あとはfireに任せるだけです。非常にPythonらしいので、人気があります。

上記で示したものに加えて、fire はさらに多くの種類の Python オブジェクトをサポートし、多くの強力な機能を備えています。これらについては、次のセクションで説明します。