standalone-python-scripts について
PEP 723メタデータとuvを使って単一ファイルのPythonスクリプトを作成する開発者向けスキルです。対応Pythonバージョン、依存関係、直接実行、検証を案内し、複数モジュールのプロジェクトは対象外です。
主な機能
- 01Pythonのバージョン対応状況を確認
- 02PEP 723メタデータで依存関係を宣言
- 03uvのshebangでスクリプトを実行
- 04CLI引数にはClickを優先
- 05メタデータと直接実行を検証
活用シーン
- 01一度限りのPython自動化スクリプトを作成
- 02単一ファイルのCLIユーティリティを構築
- 03プロジェクト設定ファイルなしで外部依存を追加
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ streamofron/ agent-skills --skill standalone-python-scriptsインストール後、Claude Code で/standalone-python-scriptsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/arrow.mdclick.mdpep-0723.mdpython-versions.mduv-scripts.md詳細
スタンドアロン Python スクリプト
PEP 723 のインラインメタデータと uv を使って依存関係を管理する、単一ファイルの Python スクリプトを作成するためのガイドラインです。
使用する場面
- スタンドアロンの Python スクリプト(単一ファイルで、pyproject.toml はなし)を作成する場合
- CLI ツールやユーティリティスクリプトを作成する場合
- 外部依存関係を含む、簡単な自動化スクリプトや単発のスクリプトを作成する場合
対象外: 複数のモジュールやパッケージ、または pyproject.toml/setup.py 構成を持つ大規模な Python プロジェクト。
手順
-
Python バージョンのサポート状況を確認する —
requires-pythonを設定する前に、対象のバージョンがサポート終了(EOL)を迎えておらず、EOL まで少なくとも 1 年あることを確認します。現在の状況は https://devguide.python.org/versions/ で確認してください。ユーザーから明示的に求められた場合に限り、古いバージョンを対象にします。 -
依存関係を最小限にする — 明確に時間を節約できるか、不可欠な機能を提供する外部パッケージのみを追加します。可能な場合は標準ライブラリを優先します。
-
PEP 723 のインラインメタデータを追加する — スクリプトの先頭で、次の
# /// scriptブロック形式を使って依存関係を宣言します。# /// script # requires-python = ">=3.12" # dependencies = [ # "click>=8.1", # "arrow>=1.3", # ] # /// -
uv のシバンを使う — スクリプトに標準ライブラリ以外の依存関係がある場合は、次を使用します。
#!/usr/bin/env -S uv run --scriptこれにより、
./script.pyで直接実行できます。 -
引数の解析には Click を優先する — スクリプトで CLI 引数が必要な場合は、argparse やその他のライブラリより Click を使用します。
-
日付と時刻の処理には Arrow を優先する — スクリプトで日付や時刻を扱う場合は、datetime やその他のライブラリより Arrow を使用します。
-
実行可能にする — スクリプトを作成したら、
chmod +x script.pyを実行して、直接実行できるようにします。
例
#!/usr/bin/env -S uv run --script
# /// script
# requires-python = ">=3.12"
# dependencies = [
# "click>=8.1",
# "arrow>=1.3",
# ]
# ///
import click
import arrow
@click.command()
@click.option("--name", default="World", help="Name to greet")
@click.option("--date", is_flag=True, help="Show today's date")
def main(name, date):
"""Greet someone and optionally show the date."""
click.echo(f"Hello, {name}!")
if date:
click.echo(f"Today is {arrow.now().format('YYYY-MM-DD')}")
if __name__ == "__main__":
main()
注意点
- 過剰な設計: 簡単な作業に依存関係を追加しないでください。
datetimeで十分なら Arrow を追加せず、argparseで足りるなら Click を追加しないでください。 - シバンの不足:
#!/usr/bin/env -S uv run --scriptがないと、./script.pyで直接実行できません。 - 無効なメタデータブロック:
# /// scriptブロックは先頭に置き、PEP 723 の形式に正確に従う必要があります。 - chmod の実行忘れ: 直接実行するには、スクリプトに実行権限(
chmod +x)が必要です。 - バージョンの変動: uv がパッケージを解決する際の予期しない変更を避けるため、依存関係には最低バージョンを指定します。
検証
スクリプトを作成したら、次の手順を実行します。
- メタデータブロックが有効であることを確認します:
uv run --script script.py --help - スクリプトを直接実行します:
./script.py - 依存関係がインストールされ、スクリプトが期待どおりに動作することを確認します
簡単なチェックリスト:
Is the Python version still supported (not EOL, >1 year to EOL)?
Does the script have a shebang line?
Is the PEP 723 metadata block present and valid?
Are dependencies minimal and justified?
Is the script executable (chmod +x)?