Click

デコレータを使用してコマンドを定義する、強力で広く使用されているPython CLIライブラリ。Flaskの開発者によって作成されました。

pythonclidecoratorflask

GitHub概要

pallets/click

Python composable command line interface toolkit

スター16,668
ウォッチ182
フォーク1,465
作成日:2014年4月24日
言語:Python
ライセンス:BSD 3-Clause "New" or "Revised" License

トピックス

cliclickpalletspython

スター履歴

pallets/click Star History
データ取得日時: 2025/7/25 02:00

フレームワーク

Click

概要

ClickはPythonでコマンドラインインターフェースを構築するための強力で美しいライブラリです。デコレータを使用してコマンドを定義するアプローチが特徴で、Flaskフレームワークの開発者らによって作成されました。読みやすく保守しやすいコードでCLIアプリケーションを作成できます。

詳細

Clickは2014年に初回リリースされ、Python CLI開発の分野で長年にわたって定番として使用されてきました。現在のバージョンは8.x系で、Python 3.7以降をサポートしています。デコレータベースのAPIにより、直感的でクリーンなコード記述を可能にし、Flask、Poetry、Black、pytestなど多くの著名なプロジェクトで採用されています。

主な特徴

  • デコレータベースAPI: @click.command()などのデコレータで簡潔にコマンドを定義
  • 自動ヘルプ生成: コマンドのdocstringから自動的にヘルプメッセージを生成
  • 型検証: 引数とオプションの型検証とエラーハンドリング
  • テストサポート: CliRunnerによるCLIアプリケーションの自動テスト機能
  • サブコマンド: 複雑なCLI構造を持つアプリケーションの作成をサポート
  • カラーサポート: ターミナル出力でのカラー表示機能

メリット・デメリット

メリット

  • 保守性: デコレータによる宣言的な記述で保守しやすいコード
  • 豊富な機能: パラメータ検証、プロンプト、ファイル処理など充実した内蔵機能
  • テスト容易性: CliRunnerによる包括的なテストサポート
  • エコシステム: Flaskと同じPallets Projectによる一貫した開発環境
  • 実績: 多くの企業とオープンソースプロジェクトでの採用実績

デメリット

  • 外部依存関係: 標準ライブラリではないため追加インストールが必要
  • 学習コスト: デコレータとClickの概念の理解が必要
  • オーバーヘッド: 単純なスクリプトには機能が過剰な場合がある

主要リンク

書き方の例

import click

@click.command()
@click.option('--count', default=1, help='Number of greetings.')
@click.option('--name', prompt='Your name',
              help='The person to greet.')
def hello(count, name):
    """Simple program that greets NAME for a total of COUNT times."""
    for _ in range(count):
        click.echo(f'Hello, {name}!')

@click.group()
def cli():
    """A simple CLI with subcommands."""
    pass

@cli.command()
@click.argument('filename')
def process(filename):
    """Process the given file."""
    click.echo(f'Processing {filename}')

@cli.command()
@click.option('--verbose', is_flag=True, help='Enable verbose output.')
def status(verbose):
    """Show status information."""
    if verbose:
        click.echo('Verbose mode enabled')
    click.echo('Status: OK')

if __name__ == '__main__':
    hello()  # 単一コマンドの場合
    # cli()  # グループコマンドの場合