Agent Skills by ALSEL
Anthropic Claudeソフトウェア開発⭐ リポ 0品質スコア 50/100

python-pypi-package-builder

Pythonライブラリのビルド・テスト・リント・バージョニング・PyPI公開までをエンドツーエンドでカバーするスキル。setuptools、hatchling、flit、poetryの4つのビルドバックエンド、PEP 440/セマンティックバージョニング、Trusted Publishing(OIDC)、mypy、pre-commit、GitHub Actions CI/CDに対応し、本番品質のパッケージ開発全工程を支援する。pip installable なSDK・CLIツール・フレームワークプラグインの作成や、pyproject.tomlのセットアップ・PyPI公開を行う際に活用できる。

description の原文を見る

End-to-end skill for building, testing, linting, versioning, and publishing a production-grade Python library to PyPI. Covers all four build backends (setuptools+setuptools_scm, hatchling, flit, poetry), PEP 440 versioning, semantic versioning, dynamic git-tag versioning, OOP/SOLID design, type hints (PEP 484/526/544/561), Trusted Publishing (OIDC), and the full PyPA packaging flow. Use for: creating Python packages, pip-installable SDKs, CLI tools, framework plugins, pyproject.toml setup, py.typed, setuptools_scm, semver, mypy, pre-commit, GitHub Actions CI/CD, or PyPI publishing.

SKILL.md 本文

Python PyPI パッケージビルダースキル

本番環境対応の Python ライブラリを PyPI に構築、テスト、リント、バージョン管理、型チェック、 公開するための完全でバトルテスト済みのガイド — 最初のコミットからコミュニティ対応のリリースまで。

AI エージェント向け指示: このファイル全体を読んでから、1行のコードも記述してファイルも作成しないでください。すべての決定 — レイアウト、バックエンド、バージョン管理戦略、パターン、CI — にはここで決定ルールがあります。決定木に従って順序通りに進めてください。このスキルはあらゆる Python パッケージタイプ(ユーティリティ、SDK、CLI、プラグイン、データライブラリ)に適用できます。セクションをスキップしないでください。


クイックナビゲーション

このファイル内のセクション説明内容
1. スキルトリガーこのスキルを読み込む時期
2. パッケージタイプ判定何を構築しているか特定する
3. フォルダ構造判定src/ vs flat vs monorepo
4. ビルドバックエンド判定setuptools / hatchling / flit / poetry
5. PyPA パッケージング フロー標準的な公開パイプライン
6. プロジェクト構造テンプレートすべてのオプション向けの完全なレイアウト
7. バージョン管理戦略PEP 440、semver、動的 vs 静的
リファレンスファイル説明内容
references/pyproject-toml.md4つのバックエンドテンプレート、setuptools_scmpy.typed、ツール設定
references/library-patterns.mdOOP/SOLID、型ヒント、コアクラス設計、ファクトリ、プロトコル、CLI
references/testing-quality.mdconftest.py、ユニット/バックエンド/非同期テスト、ruff/mypy/pre-commit
references/ci-publishing.mdci.ymlpublish.yml、Trusted Publishing、TestPyPI、CHANGELOG、リリースチェックリスト
references/community-docs.mdREADME、ドキストリング、CONTRIBUTING、SECURITY、アンチパターン、マスターチェックリスト
references/architecture-patterns.mdバックエンドシステム(プラグイン/ストラテジ)、設定レイヤー、トランスポートレイヤー、CLI、バックエンド注入
references/versioning-strategy.mdPEP 440、SemVer、プレリリース、setuptools_scm 詳細、flit 静的、決定エンジン
references/release-governance.mdブランチ戦略、ブランチ保護、OIDC、タグ作成者検証、無効なタグ防止
references/tooling-ruff.mdRuff のみセットアップ(black/isort 置換)、mypy 設定、pre-commit、asyncio_mode=auto

スキャフォルドスクリプト: python skills/python-pypi-package-builder/scripts/scaffold.py --name your-package-name を実行して、ディレクトリレイアウト全体、スタブファイル、pyproject.toml を1つのコマンドで生成します。


1. スキルトリガー

ユーザーが以下を望む場合、このスキルを読み込みます:

  • Python パッケージまたはライブラリを作成、スキャフォルド、または PyPI に公開する
  • pip インストール可能な SDK、ユーティリティ、CLI ツール、またはフレームワーク拡張機能を構築する
  • Python プロジェクト向けに pyproject.toml、リント、mypy、pre-commit、GitHub Actions を設定する
  • バージョン管理(setuptools_scm、PEP 440、semver、静的バージョン管理)を理解する
  • PyPA 仕様を理解する:py.typedMANIFEST.inRECORD、classifiers
  • Trusted Publishing(OIDC)または API トークンを使用して PyPI に公開する
  • 既存パッケージをモダン Python パッケージング標準に従うようリファクタリングする
  • Python ライブラリに型ヒント、プロトコル、ABC、またはデータクラスを追加する
  • OOP/SOLID デザインパターンを Python パッケージに適用する
  • ビルドバックエンド(setuptools、hatchling、flit、poetry)を選択する

以下のようなフレーズでもトリガーされます: 「Python SDK を構築する」、「ライブラリを公開する」、「PyPI CI を設定する」、 「pip パッケージを作成する」、「PyPI に公開するにはどうする」、「pyproject.toml ヘルプ」、「PEP 561 型指定」、 「setuptools_scm バージョン」、「semver Python」、「PEP 440」、「git タグリリース」、「Trusted Publishing」。


2. パッケージタイプ判定

コードを書く前に、ユーザーが何を構築しているか特定してください。各タイプには異なるパターンがあります。

判定表

タイプコアパターンエントリーポイント主要依存関係パッケージ例
ユーティリティライブラリ純関数 + ヘルパー関数のモジュールインポート API のみ最小限arrowhumanizeboltonsmore-itertools
API クライアント / SDKメソッド、認証、リトライロジック付きクラスインポート API のみhttpx または requestsboto3stripe-pythonopenai
CLI ツールコマンド関数 + 引数パーサー[project.scripts] または [project.entry-points]click または typerblackruffhttpierich
フレームワークプラグインプラグインクラス、フック登録[project.entry-points."framework.plugin"]フレームワーク依存関係pytest-*django-*flask-*
データ処理ライブラリクラス + 関数型パイプラインインポート API のみオプション:numpypandaspydanticmarshmallowcerberus
混合 / 汎用上記の組み合わせ可変可変多くの実際のパッケージ

判定ルール: 不明な場合はユーザーに確認してください。パッケージはタイプを組み合わせることができます(例:CLI エントリーポイント付き SDK) — 構造的決定の主要なタイプを使用して、上に二次タイプパターンを追加します。

各タイプの実装パターンについては、references/library-patterns.md を参照してください。

パッケージ命名規則

  • PyPI 名:すべて小文字、ハイフン — my-python-library
  • Python インポート名:アンダースコア — my_python_library
  • 利用可能性を確認:開始前に https://pypi.org/search/ で確認
  • 人気のあるパッケージのシャドウイングを避ける(pip install <name> が最初に失敗することを確認)

3. フォルダ構造判定

判定木

パッケージが 5 個以上の内部モジュール、または複数のコントリビューター、または複雑なサブパッケージを持つ?
├── はい → src/ レイアウトを使用
│         理由:開発中に誤ってアンインストールされたコードのインポートを防止;
│         ソースをプロジェクトルートファイルから分離;大規模プロジェクト向け PyPA 推奨。
│
├── いいえ → 単一モジュール、フォーカスされたパッケージか(例:1 ファイル + ヘルパー)?
│         ├── はい → フラットレイアウトを使用
│         └── いいえ(中規模複雑さ) → フラットレイアウトを使用、拡張したら src/ に移行
│
└── 1 つのネームスペース下の複数関連パッケージか(例:myorg.http、myorg.db)?
          └── はい → ネームスペース/monorepo レイアウトを使用

クイックルール概要

状況使用
新規プロジェクト、将来サイズ不明src/ レイアウト(最も安全なデフォルト)
単一目的、1~4 モジュールフラットレイアウト
大規模ライブラリ、多数のコントリビューターsrc/ レイアウト
1 つのリポジトリ内の複数パッケージネームスペース / monorepo
古いフラットプロジェクトのマイグレーションフラットを保持;次のメジャーバージョンで src/ に移行

4. ビルドバックエンド判定

判定木

ユーザーがバージョンを git タグから自動的に導出する必要があるか?
├── はい → setuptools + setuptools_scm を使用
│         (git tag v1.0.0 → それがリリースワークフローそのもの)
│
└── いいえ → ユーザーがオールインワンツール(依存関係 + ビルド + 公開)を希望するか?
          ├── はい → poetry を使用(v2+ は標準 [project] テーブルをサポート)
          │
          └── いいえ → パッケージが C 拡張なし純 Python か?
                    ├── はい、最小限の設定を希望 → flit を使用
                    │   (ゼロ設定、__version__ から自動検出)
                    │
                    └── はい、モダン & 高速を希望 → hatchling を使用
                        (ゼロ設定、プラグインシステム、setup.py 不要)

パッケージが C/Cython/Fortran 拡張を持つか?
└── はい → setuptools を MUST で使用(ネイティブ拡張対応の唯一のバックエンド)

バックエンド比較

バックエンドバージョンソース設定C 拡張最適用途
setuptools + setuptools_scmgit タグ(自動)pyproject.toml + オプション setup.py シムはいgit タグリリースを行うプロジェクト;複雑さあり
hatchling手動またはプラグインpyproject.toml のみいいえ新規純 Python プロジェクト;高速、モダン
flit__init__.py 内の __version__pyproject.toml のみいいえ非常にシンプルな単一モジュールパッケージ
poetrypyproject.toml フィールドpyproject.toml のみいいえ統合された依存関係管理を望むチーム

4 つの完全な pyproject.toml テンプレートについては、references/pyproject-toml.md を参照してください。


5. PyPA パッケージング フロー

ソースコードから ユーザーインストールまでの標準的なエンドツーエンドフロー。 公開前にすべてのステップを理解する必要があります。

1. ソースツリー
   バージョン管理(git)内のコード
   └── pyproject.toml はメタデータ + ビルドシステムを記述

2. ビルド
   python -m build
   └── dist/ 内に 2 つのアーティファクトを生成:
       ├── *.tar.gz   → ソース配布(sdist)
       └── *.whl      → ビルド済み配布(wheel) — pip 優先

3. 検証
   twine check dist/*
   └── メタデータ、README レンダリング、PyPI 互換性をチェック

4. テスト公開(最初のリリースのみ)
   twine upload --repository testpypi dist/*
   └── 検証:pip install --index-url https://test.pypi.org/simple/ your-package

5. 公開
   twine upload dist/*          ← 手動フォールバック
   OR GitHub Actions publish.yml  ← 推奨(Trusted Publishing / OIDC)

6. ユーザーインストール
   pip install your-package
   pip install "your-package[extra]"

主要 PyPA コンセプト

コンセプト意味
sdistソース配布 — ソース + メタデータ;wheel が利用不可の場合に使用
wheel (.whl)事前ビルド済みバイナリ — pip が site-packages に直接抽出;ビルドステップなし
PEP 517/518pyproject.toml [build-system] テーブル経由の標準ビルドシステムインターフェース
PEP 621pyproject.toml 内の標準 [project] テーブル;すべてのモダンバックエンドがサポート
PEP 639license キーを SPDX 文字列として(例:"MIT""Apache-2.0") — {text = "MIT"} でない
PEP 561py.typed 空マーカーファイル — このパッケージが型情報を配布することを mypy/IDE に告知

完全な CI ワークフローと公開セットアップについては、references/ci-publishing.md を参照してください。


6. プロジェクト構造テンプレート

A. src/ レイアウト(新規プロジェクト向け推奨デフォルト)

your-package/
├── src/
│   └── your_package/
│       ├── __init__.py           # 公開 API:__all__、__version__
│       ├── py.typed              # PEP 561 マーカー — 空ファイル
│       ├── core.py               # 主要実装
│       ├── client.py             # (API クライアントタイプ)またはリムーブ
│       ├── cli.py                # (CLI タイプ)click/typer コマンド、またはリムーブ
│       ├── config.py             # 設定 / 設定データクラス
│       ├── exceptions.py         # カスタム例外階層
│       ├── models.py             # データクラス、Pydantic モデル、TypedDicts
│       ├── utils.py              # 内部ヘルパー(プライベートの場合は _utils 接頭辞)
│       ├── types.py              # 共有型エイリアス、TypeVars
│       └── backends/             # (プラグインパターン) — 不要な場合はリムーブ
│           ├── __init__.py       # プロトコル / ABC インターフェース定義
│           ├── memory.py         # デフォルトゼロ依存実装
│           └── redis.py          # オプション重い実装
├── tests/
│   ├── __init__.py
│   ├── conftest.py               # 共有フィクスチャ
│   ├── unit/
│   │   ├── __init__.py
│   │   ├── test_core.py
│   │   ├── test_config.py
│   │   └── test_models.py
│   ├── integration/
│   │   ├── __init__.py
│   │   └── test_backends.py
│   └── e2e/                      # オプション:エンドツーエンドテスト
│       └── __init__.py
├── docs/                         # オプション:mkdocs または sphinx
├── scripts/
│   └── scaffold.py
├── .github/
│   ├── workflows/
│   │   ├── ci.yml
│   │   └── publish.yml
│   └── ISSUE_TEMPLATE/
│       ├── bug_report.md
│       └── feature_request.md
├── .pre-commit-config.yaml
├── pyproject.toml
├── CHANGELOG.md
├── CONTRIBUTING.md
├── SECURITY.md
├── LICENSE
├── README.md
└── .gitignore

B. フラットレイアウト(小規模 / フォーカスされたパッケージ)

your-package/
├── your_package/         # ← ルート内、src/ 内ではない
│   ├── __init__.py
│   ├── py.typed
│   └── ... (同じ内部構造)
├── tests/
└── ... (同じトップレベルファイル)

C. ネームスペース / Monorepo レイアウト(複数関連パッケージ)

your-org/
├── packages/
│   ├── your-org-core/
│   │   ├── src/your_org/core/
│   │   └── pyproject.toml
│   ├── your-org-http/
│   │   ├── src/your_org/http/
│   │   └── pyproject.toml
│   └── your-org-cli/
│       ├── src/your_org/cli/
│       └── pyproject.toml
├── .github/workflows/
└── README.md

各サブパッケージは独自の pyproject.toml を持ちます。PEP 420 暗黙的ネームスペースパッケージを経由して your_org ネームスペースを共有します(ネームスペースルートに __init__.py なし)。

内部モジュールガイドライン

ファイル目的含めるべき時期
__init__.py公開 API サーフェス;再エクスポート;__version__常に
py.typedPEP 561 型指定パッケージマーカー(空)常に
core.py主要クラス / メインロジック常に
config.py設定データクラス、または Pydantic モデル設定可能な場合
exceptions.py例外階層(YourBaseError → 詳細)常に
models.pyデータモデル / DTO / TypedDictsデータ重い場合
utils.py内部ヘルパー(公開 API の一部ではない)必要に応じて
types.py共有 TypeVarTypeAliasProtocol 定義複雑な型指定の場合
cli.pyCLI エントリーポイント(click/typer)CLI タイプのみ
backends/プラグイン/ストラテジパターン交換可能な実装が必要な場合
_compat.pyPython バージョン互換性シム3.9~3.13 互換性が必要な場合

7. バージョン管理戦略

PEP 440 — 標準

標準形式:  N[.N]+[{a|b|rc}N][.postN][.devN]

例:
  1.0.0          安定版リリース
  1.0.0a1        アルファ(プレリリース)
  1.0.0b2        ベータ
  1.0.0rc1       リリース候補
  1.0.0.post1    ポストリリース(例:パッケージング修正のみ)
  1.0.0.dev1     開発スナップショット(PyPI 向けではない)

セマンティックバージョニング(推奨)

MAJOR.MINOR.PATCH

MAJOR:破壊的な API 変更(公開関数/クラス/引数の削除/名前変更)
MINOR:新機能、完全に後方互換
PATCH:バグ修正、API 変更なし

setuptools_scm を使用した動的バージョン管理(git タグワークフロー推奨)

# どのように動作するか:
git tag v1.0.0          →  インストール済みバージョン = 1.0.0
git tag v1.1.0          →  インストール済みバージョン = 1.1.0
(タグ後のコミット)     →  バージョン = 1.1.0.post1  (接尾辞は PyPI アップロード時に削除)

# コード内 — setuptools_scm 使用時は絶対にハードコードしない:
from importlib.metadata import version, PackageNotFoundError
try:
    __version__ = version("your-package")
except PackageNotFoundError:
    __version__ = "0.0.0-dev"    # アンインストール開発チェックアウト向けフォールバック

必須 pyproject.toml 設定:

[tool.setuptools_scm]
version_scheme = "post-release"
local_scheme   = "no-local-version"   # PyPI アップロード破壊の +g<hash> を防止

重要: すべての CI チェックアウトステップで常に fetch-depth: 0 を設定します。完全な git 履歴がないと、 setuptools_scm はタグを見つけられず、ビルドバージョンは沈黙裏に 0.0.0+dev にフォールバックします。

静的バージョン管理(flit、hatchling 手動、poetry)

# your_package/__init__.py
__version__ = "1.0.0"    # 毎回リリース前に更新

依存関係の バージョン指定 ベストプラクティス

# [project] dependencies 内:
"httpx>=0.24"            # 最小バージョン — ライブラリ向け推奨
"httpx>=0.24,<1.0"       # 既知の破壊的変更が存在する場合のみ上限
"httpx==0.27.0"          # アプリケーション内でのみ正確にピン留め、ライブラリではない

# ライブラリ内では決してこれを行わない — ユーザーの依存関係解決を破壊:
# "httpx~=0.24.0"        # 厳しすぎる
# "httpx==0.27.*"        # 壊れやすい

バージョンバンプ → リリースフロー

# 1. CHANGELOG.md を更新 — [Unreleased] エントリを [x.y.z] - YYYY-MM-DD に移動
# 2. チェンジログをコミット
git add CHANGELOG.md
git commit -m "chore: prepare release vX.Y.Z"
# 3. タグをプッシュ — これにより publish.yml が自動的にトリガー
git tag vX.Y.Z
git push origin main --tags
# 4. GitHub Actions を監視 → https://pypi.org/project/your-package/ で検証

4 つのバックエンド向け完全な pyproject.toml テンプレートについては、references/pyproject-toml.md を参照してください。


次のステップ

判定と構造を理解した後:

  1. pyproject.toml を設定references/pyproject-toml.md 4 つのバックエンドテンプレート(setuptools+scm、hatchling、flit、poetry)、完全なツール設定、 py.typed セットアップ、バージョン管理設定。

  2. ライブラリコードを記述references/library-patterns.md OOP/SOLID 原則、型ヒント(PEP 484/526/544/561)、コアクラス設計、ファクトリ関数、 __init__.py、プラグイン/バックエンドパターン、CLI エントリーポイント。

  3. テストとコード品質を追加references/testing-quality.md conftest.py、ユニット/バックエンド/非同期テスト、parametrize、ruff/mypy/pre-commit セットアップ。

  4. CI/CD と公開を設定references/ci-publishing.md ci.ymlpublish.yml (Trusted Publishing (OIDC、API トークン不要))、CHANGELOG 形式、 リリースチェックリスト。

  5. コミュニティ / OSS 向けポリッシュreferences/community-docs.md README セクション、ドキストリング形式、CONTRIBUTING、SECURITY、Issue テンプレート、 アンチパターンテーブル、マスターリリースチェックリスト。

  6. バックエンド、設定、トランスポート、CLI を設計references/architecture-patterns.md バックエンドシステム(プラグイン/ストラテジパターン)、Settings データクラス、HTTP トランスポートレイヤー、 click/typer での CLI、バックエンド注入ルール。

  7. バージョン管理戦略を選択・実装references/versioning-strategy.md PEP 440 標準形式、SemVer ルール、プレリリース識別子、setuptools_scm 詳細、 flit 静的バージョン管理、決定エンジン(DEFAULT/BEGINNER/MINIMAL)。

  8. リリース管理と公開パイプラインをセキュア化references/release-governance.md ブランチ戦略、ブランチ保護ルール、OIDC Trusted Publishing セットアップ、CI でのタグ作成者検証、 タグフォーマット実装、完全に管理された publish.yml

  9. Ruff でツール作業を簡素化references/tooling-ruff.md Ruff のみセットアップで black/isort/flake8 置換、mypy 設定、pre-commit フック、 asyncio_mode=auto(@pytest.mark.asyncio 削除)、マイグレーションガイド。

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
github
リポジトリ
github/awesome-copilot
ライセンス
MIT
最終更新
不明

Source: https://github.com/github/awesome-copilot / ライセンス: MIT

関連スキル

汎用ソフトウェア開発⭐ リポ 39,967

doubt-driven-development

重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 1,175

apprun-skills

TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。

by yysun
OpenAIソフトウェア開発⭐ リポ 797

desloppify

コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。

by Git-on-my-level
汎用ソフトウェア開発⭐ リポ 39,967

debugging-and-error-recovery

テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

test-driven-development

テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

incremental-implementation

変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。

by addyosmani
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: github · github/awesome-copilot · ライセンス: MIT