コンテンツへスキップ

代替案、インスピレーション、比較

**Typer**のインスピレーション源、他の代替案との比較、そしてそれらから学んだこと。

はじめに

**Typer**は、他者の以前の仕事がなければ存在しませんでした。

その作成に役立った多くのツールが以前から作成されてきました。

以前のツール

argparse

argparseは、CLIを作成するためのPython標準ライブラリのモジュールです。

これは、CLIパラメータをstrlistとして読み取り、すべてを手動で解析するよりも優れた代替手段を提供します。

**Typer**にインスピレーションを与えた点

CLIパラメータを手動で読み取るだけよりも優れた開発エクスペリエンスを提供すること。

Hug

Hugは、APIとCLIを作成するためのライブラリであり、関数のパラメータを使用して必要なデータを宣言します。

これは、**FastAPI**と**Typer**の多くのアイデアにインスピレーションを与えました。

**Typer**にインスピレーションを与えた点

関数パラメータを使用してCLI引数とCLIオプションを宣言することで、開発エクスペリエンスが大幅に簡素化されます。

Plac

Placは、Hugと同様に、関数のパラメータを使用してCLIを作成するための別のライブラリです。

**Typer**にインスピレーションを与えた点

typer.run(some_function)を使用して、完全なアプリを作成せずに、関数をコマンドラインアプリとして簡単に使用できるようにします。

Pydantic

Pydanticは、標準的な最新のPython型アノテーションを使用してデータ検証を行うライブラリです。

これは、**FastAPI**を下支えしています。

**Typer**では使用されていませんが、(**FastAPI**を通じて)多くの設計にインスピレーションを与えました。

**Typer**にインスピレーションを与えた点

ライブラリ固有の型やクラスではなく、標準的なPython型アノテーションを使用して型を宣言し、データ検証とドキュメントに使用します。

Click

Clickは、PythonでCLIを作成するために最も広く使用されているライブラリの1つです。

これは非常に強力なツールであり、多くのCLIがこれを使用して構築されています。これは、**Typer**を下支えしているものです。

また、CLI引数とCLIオプションにパラメータを持つ関数を使用しますが、特定のCLI引数、CLIオプション、型などの宣言は、関数のデコレータで行われます。これにより、コードの冗長性(例:CLIオプション名--verboseと変数名verbose)と、同じ情報に関連する2つの場所(デコレータとパラメータ関数)間の同期が必要になります。

関数のデコレータを使用して、それらの関数の実際の値を変更し、それらを特定のクラスのインスタンスに変換します。これは巧妙な手法ですが、コードエディタはこの方法では優れた自動補完のサポートを提供できません。

当時(Python 2.x)利用可能な言語機能を使用して、優れたアイデアと設計で構築されました。

**Typer**はこれを次のように使用します。

すべて。🚀

**Typer**は主にClickの上にレイヤーを追加することで、コードをよりシンプルで使いやすくし、どこでも自動補完などを提供しますが、下部にはClickの強力な機能をすべて提供します。

ある人が指摘したように:"Clickを基盤としているのに型情報を追加しているのが良いですね。Me gusta!"

click-completion

click-completionはClickのプラグインです。ClickがBashの自動補完のみをサポートしていたときに、シェルの自動補完サポートを拡張するために作成されました。

以前のバージョンの**Typer**はclick-completionと深く統合されており、オプションの依存関係として使用していました。しかし、現在はすべての自動補完ロジックが**Typer**自体に内部的に実装されており、内部ロジックはclick-completionから多くの部分をインスピレーションを得て、一部を使用しています。

そして今、**Typer**は新しい機能、テスト、いくつかのバグ修正(プレーンなclick-completionとClickのバグ)、そしてPowerShellの最新バージョン(例:Windows 10に付属するデフォルトバージョン)を含むシェルのより良いサポートを追加することで、改善されました。

**Typer**にインスピレーションを与えた点

すべてのシェルで自動補完を提供します。

FastAPI

私は、コード内のすべて(およびその他の機能)に自動補完機能を持つAPIを簡単に構築する方法を提供するために**FastAPI**を作成しました。

**Typer**は「CLIのためのFastAPI」です。

可能な限りFastAPIと同じ設計と使用方法を使用しています。そのため、FastAPIを使用したことがある場合、Typerの使用方法も分かります。