Python の fire を使ってみる(コマンドインタフェースの自動生成)

1. エグゼクティブサマリー

fire は,コマンドインタフェースを自動生成するライブラリである.Python の関数やクラスに対して fire.Fire() を呼び出すだけで,コマンドライン引数の解析やサブコマンドの生成が自動的に行われる.

fire のインストールから基本的な使い方までを扱う.具体的には,関数を fire に登録して引数付きで呼び出す方法,複数関数をサブコマンドとして登録する方法,デフォルト引数付き関数を利用する方法,クラスのコンストラクタとメソッドを fire で公開する方法を説明する.

fire の使用法の詳細: https://github.com/google/python-fire/blob/master/docs/using-cli.md

2. 前準備(必要ソフトウェアの入手)

ここでは、最低限の事前準備について説明する。機械学習や深層学習を行う場合は、NVIDIA CUDA、Visual Studio、Cursorなどを追加でインストールすると便利である。これらについては別ページ https://www.kkaneko.jp/cc/dev/aiassist.htmlで詳しく解説しているので、必要に応じて参照してください。

Python 3.12 のインストール(Windows 上) [クリックして展開]

以下のいずれかの方法で Python 3.12 をインストールする。Python がインストール済みの場合、この手順は不要である。

方法1:winget によるインストール

管理者権限コマンドプロンプトで以下を実行する。管理者権限のコマンドプロンプトを起動するには、Windows キーまたはスタートメニューから「cmd」と入力し、表示された「コマンドプロンプト」を右クリックして「管理者として実行」を選択する。

winget install --scope machine --id Python.Python.3.12 -e --silent --disable-interactivity --force --accept-source-agreements --accept-package-agreements --override "/quiet InstallAllUsers=1 PrependPath=1 Include_pip=1 Include_test=0 Include_launcher=1 InstallLauncherAllUsers=1"

--scope machine を指定することで、システム全体(全ユーザー向け)にインストールされる。このオプションの実行には管理者権限が必要である。インストール完了後、コマンドプロンプトを再起動すると PATH が自動的に設定される。

方法2:インストーラーによるインストール

  1. Python 公式サイト(https://www.python.org/downloads/)にアクセスし、「Download Python 3.x.x」ボタンから Windows 用インストーラーをダウンロードする。
  2. ダウンロードしたインストーラーを実行する。
  3. 初期画面の下部に表示される「Add python.exe to PATH」に必ずチェックを入れてから「Customize installation」を選択する。このチェックを入れ忘れると、コマンドプロンプトから python コマンドを実行できない。
  4. 「Install Python 3.xx for all users」にチェックを入れ、「Install」をクリックする。

インストールの確認

コマンドプロンプトで以下を実行する。

python --version

バージョン番号(例:Python 3.12.x)が表示されればインストール成功である。「'python' は、内部コマンドまたは外部コマンドとして認識されていません。」と表示される場合は、インストールが正常に完了していない。

AIエディタ Windsurf のインストール(Windows 上) [クリックして展開]

Pythonプログラムの編集・実行には、AIエディタの利用を推奨する。ここでは、Windsurfのインストールを説明する。Windsurf がインストール済みの場合、この手順は不要である。

管理者権限コマンドプロンプトで以下を実行する。管理者権限のコマンドプロンプトを起動するには、Windows キーまたはスタートメニューから「cmd」と入力し、表示された「コマンドプロンプト」を右クリックして「管理者として実行」を選択する。

winget install --scope machine --id Codeium.Windsurf -e --silent --disable-interactivity --force --accept-source-agreements --accept-package-agreements --custom "/SP- /SUPPRESSMSGBOXES /NORESTART /CLOSEAPPLICATIONS /DIR=""C:\Program Files\Windsurf"" /MERGETASKS=!runcode,addtopath,associatewithfiles,!desktopicon"
powershell -Command "$env:Path=[System.Environment]::GetEnvironmentVariable('Path','Machine')+';'+[System.Environment]::GetEnvironmentVariable('Path','User'); windsurf --install-extension MS-CEINTL.vscode-language-pack-ja --force; windsurf --install-extension ms-python.python --force; windsurf --install-extension Codeium.windsurfPyright --force"

--scope machine を指定することで、システム全体(全ユーザー向け)にインストールされる。このオプションの実行には管理者権限が必要である。インストール完了後、コマンドプロンプトを再起動すると PATH が自動的に設定される。

関連する外部ページ

Windsurf の公式ページ: https://windsurf.com/

fire のインストール [クリックして展開]

管理者権限コマンドプロンプトで以下を実行する。管理者権限のコマンドプロンプトを起動するには、Windows キーまたはスタートメニューから「cmd」と入力し、表示された「コマンドプロンプト」を右クリックして「管理者として実行」を選択する。

python -m pip install -U fire

3. 実行のための準備とその確認手順(Windows 前提)

3.1 プログラムファイルの準備

第5章に掲載するソースコードをテキストエディタ(メモ帳,Windsurf 等)に貼り付け,hoge.py として保存する(文字コード:UTF-8).本記事では複数のプログラム例を扱うため,例ごとに hoge.pymulti.pygreet.py などのファイル名で保存する.

3.2 実行コマンド

コマンドプロンプトでファイルの保存先ディレクトリに移動し,以下のように実行する.

python hoge.py 100

クラスの例では,コマンドライン引数としてオプション名と値を指定する.

python hoge.py --qty 5 --weight 170.51 --name 'apple' total

3.3 動作確認チェックリスト

確認項目期待される結果
関数の例:python hoge.py 100 を実行108.0(引数 100 に 1.08 を掛けた値)が出力される
複数関数の例:python multi.py add 3 5 を実行8(3 + 5 の結果)が出力される
デフォルト引数の例:python greet.py Alice を実行Hello, Alice(デフォルト値が使用される)が出力される
クラスの例:python hoge.py --qty 5 --weight 170.51 --name 'apple' total を実行852.55(5 * 170.51 の結果)が出力される

4. 概要・使い方・実行上の注意

本章では,fire を用いた4つの使用パターンを説明する.各パターンのソースコードは第5章に掲載している.

4.1 関数を fire に登録する

hoge.py のようなファイル名で保存する.関数 foofire.Fire(foo) に渡すことで,コマンドラインから引数を指定して呼び出せるようになる.

端末(Windows のコマンドプロンプトなど)を開き,次を実行する.

python hoge.py 100
python hoge.py 150
python hoge.py 400

4.2 複数関数の登録

fire では,複数の関数をまとめて登録できる.multi.py のようなファイル名で保存する.

端末(Windows のコマンドプロンプトなど)を開き,次を実行する.fire.Fire() を引数なしで呼び出すと,モジュール内のすべての関数がサブコマンドとして登録される.

python multi.py add 3 5
python multi.py multiply 4 6

4.3 デフォルト引数付き関数

関数にデフォルト引数を設定すると,コマンドライン実行時にその引数を省略できる.greet.py のようなファイル名で保存する.

端末(Windows のコマンドプロンプトなど)を開き,次を実行する.--greeting を省略した場合はデフォルト値 'Hello' が使用される.

python greet.py Alice
python greet.py Alice --greeting Hi

4.4 クラスのコンストラクタとメソッド

hoge.py のようなファイル名で保存する.クラス Cfire.Fire(C) に渡すことで,コンストラクタ引数をコマンドラインオプションとして指定し,属性やメソッドにサブコマンドとしてアクセスできる.

端末(Windows のコマンドプロンプトなど)を開き,次を実行する.

python hoge.py --qty 5 --weight 170.51 --name 'apple' qty
python hoge.py --qty 5 --weight 170.51 --name 'apple' weight
python hoge.py --qty 5 --weight 170.51 --name 'apple' name
python hoge.py --qty 5 --weight 170.51 --name 'apple' total

5. ソースコード

5.1 関数の例(hoge.py)

import fire

def foo(a):
    return a * 1.08

if __name__ == '__main__':
    fire.Fire(foo)

5.2 複数関数の例(multi.py)

import fire

def add(a, b):
    return a + b

def multiply(a, b):
    return a * b

if __name__ == '__main__':
    fire.Fire()

5.3 デフォルト引数付き関数の例(greet.py)

import fire

def greet(name, greeting='Hello'):
    return f'{greeting}, {name}'

if __name__ == '__main__':
    fire.Fire(greet)

5.4 クラスの例(hoge.py)

import fire

class C:
    def __init__(self, qty, weight, name):
        self.qty = qty
        self.weight = weight
        self.name = name

    def total(self):
        return self.qty * self.weight

if __name__ == '__main__':
    fire.Fire(C)

6. まとめ

fire によるコマンドインタフェースの自動生成

fire は,コマンドインタフェースを自動生成するライブラリである.fire.Fire() を呼び出すだけで,コマンドライン引数の解析が自動的に行われる.

関数の登録

fire.Fire(foo) のように関数を渡すことで,その関数の引数をコマンドラインから指定できる.デフォルト引数を設定した場合は,実行時にその引数を省略できる.

複数関数のサブコマンド化

fire.Fire() を引数なしで呼び出すと,モジュール内のすべての関数がサブコマンドとして登録される.

クラスの公開

fire.Fire(C) のようにクラスを渡すと,コンストラクタ引数をコマンドラインオプションとして指定し,属性やメソッドにサブコマンドとしてアクセスできる.

インストール

fire は python -m pip install -U fire でインストールできる.