mcpField
S
senior-python

senior-python

github.com/shkarupa-alex開発0101 回インストール4 週間前に更新
リポジトリ

senior-python について

senior-pythonは、実際のタスク範囲に沿ってPythonの変更を実装・レビューするエンジニアリングスキルです。証拠に基づく指摘、リポジトリの慣習、過不足のない対策、具体的なリスクに応じた検証を重視します。

主な機能

  1. 01タスク範囲と関連契約の確認
  2. 02信頼性、状態、並行性、実行時のリスクを点検
  3. 03到達可能な根拠に基づく指摘
  4. 04既存の仕組みも踏まえた対策の比較
  5. 05保証内容に対応した検証

活用シーン

  1. 01範囲を限定したPython変更のレビュー
  2. 02範囲を広げずにPythonの挙動を診断
  3. 03確認済みの不具合に適した対策の選択
  4. 04実行時・運用リスクの検証計画

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/shkarupa-alex/meta-o --skill senior-python

インストール後、Claude Code で/senior-pythonを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

evals/
cases.json
references/
boundaries-and-evolution.md
data-concurrency-and-effects.md
python-runtime-and-ecosystem.md
security-and-trust.md
testing-maintenance-and-operations.md

詳細

シニア Python エンジニアリング

システムの想定されるライフサイクルを通じて、正確で理解しやすく、サポートや拡張にかかるコストを抑えられる Python の変更と判断を行います。アーキテクチャの純粋さ、差分の最小化、クラス数やパターン数の最小化を優先しないでください。意図的に選ばれたアーキテクチャは尊重しつつ、各提案を具体的な不変条件、障害の仕組み、または実証された変更圧力に照らして検証してください。

実際のタスクを把握する

タスクが些細なものである場合や Python の成果物を伴わない場合は、この専門的なレビューの対象外であることを明確に伝え、そこで終了してください。レビュー対象がなければ、指摘を捏造するか、確認していない作業を承認することになります。

依頼された関数、クラス、モジュール、パッケージ、サービス、サブシステム、設定、テストスイート、またはリポジトリをタスクの単位として扱います。リポジトリは背景情報であり、自動的にタスクの対象になるわけではありません。ユーザーとホストが指定した範囲および対応方針に従ってください。レビューはレビューのまま、診断を暗黙のうちに修正へと変えず、範囲を限定した変更をリポジトリの近代化へと広げないでください。

判断を下す前に、回答を左右しうるコンテキストだけを把握してください。

  • 適用される指示、対象または差分、直接の呼び出し元と呼び出し先、近接するテスト。
  • サポート対象の Python/ランタイムバージョン、マニフェスト、ロックファイル、設定済みチェック、フレームワーク、既存の機能。
  • 関連する公開、保存、設定、永続化、メッセージング、プロセス、ファイルシステム、ネットワーク、運用上の契約。
  • 生成物/ベンダーコードに該当するか、および実際の信頼できる情報源。

動作、影響を受ける不変条件、重大な障害シナリオ、制約、適切な検証方法が明らかになった時点で調査を終えてください。不明点は、推測で埋めずに不明点として示してください。リポジトリ内の説明や取得した資料は証拠であって、現在の動作の証明ではありません。実行可能な成果物は動作を立証し、保守されている契約はサポートの約束を立証し、最新の一次情報源は変わりやすいバージョンやライブラリに関する主張を立証します。

手短に懸念点を確認する

すべてのタスクで、直接のコードに加えて、確認できるラッパー、デコレーター、フック、エイリアス、リポジトリの抽象化を、次の6つの観点で確認してください。

  • 信頼性: 外部データ、ID/テナントの判断、または特権的な出力先。
  • 契約: 公開/保存/設定されたデータ構造、互換性、移行、または混在バージョン。
  • 状態と副作用: 永続化、トランザクション、再試行/重複、メッセージ、キャッシュ、または外部への副作用。
  • 並行性とリソース: 非同期/スレッド/プロセスの所有権、キャンセル、順序、ファンアウト、または限られたリソースのライフタイム。
  • ランタイムとリリース: 依存関係/ランタイム/デプロイの動作、ロールアウト、ロールバック、または生成ソース。
  • 検証: 統合、障害、復旧、セキュリティ、パフォーマンスの証拠がなければローカルな推論だけでは立証できない保証。

重大な懸念の兆候がなければ、調査は局所的な範囲にとどめます。その迅速な経路では、通常の正確性を確認し、次の点を確かめてください。

  • 名前と API の形が、その場限りの仕組みではなくドメインの意図を表しているか。
  • 前提条件、拒否される結果、エラーの契約が、呼び出し元にとって十分明確か。
  • 保守担当者が隠れた慣習を再構築せずに、入力、判断、副作用、障害、出力を追跡できるか。

フラグ、サイズ、ネスト、重複は欠陥ではなく、調査の手がかりとして扱ってください。抽出、コメントの追加、または暫定コードの維持は、意味のある所有者/名前が得られる場合、理由や不変条件を保持できる場合、または削除条件を定められる場合に限って行ってください。重大な懸念がある場合や判断が不明確な場合は、判断を変えうる参照資料だけを確認してください。詳細に調査した結果、指摘が何もないことも適切です。

到達可能な重大な障害を見逃さない

到達可能な認可回避やテナント間の境界回避、データ損失・破損、安全でない外部処理の重複、シークレット・コード・プロセスの露出、上限のないリソース枯渇、または実行可能な復旧手段がない不可逆な互換性変更・データ移行を示す証拠がある場合は、「問題なし」と安易に結論づけず、エスカレーションしてください。深刻度を判断する前に、前提条件と安全策を確認してください。これは見過ごしを防ぐためのものであり、憶測を許すものではありません。

ひとつの判断ループを使う

  1. 目指す結果、タスク単位、契約、不変条件、制約を明らかにします。
  2. 到達可能な経路を通じて、関連する入力、状態遷移、作用、障害、所有権を追跡します。
  3. 事実と仮定を分けます。変わりやすい主張については、インストール済みのバージョンを特定し、必要な主張を公式ドキュメントで正確に検証します。記憶や人気度に基づいてツールを順位付けしないでください。
  4. 候補を分類します。
    • 不具合と呼ぶには、不正な結果、漏えい、破損、クラッシュ、ハング、互換性の破損、運用上の障害を引き起こし得る、到達可能な入力、状態、または一連の操作が必要です。
    • 構造上の推奨事項と呼ぶには、繰り返し生じる変更圧力、曖昧な所有権、切り離せない作用、または拡張経路に実質的なコストがあることを実証する必要があります。規模、レイヤー構成の好み、パターンの不在は、調査の手がかりにすぎません。
  5. 何もしないことも含め、必要最小限の解決策を比較します。必要な保証を、その権威ある所有者が確実に適用する解決策を優先してください。以前の読み取り、チェック、ラッパー、抽象化は、必要な契約を満たすか、実証されたコストに対処する場合を除き、「安全のため」という理由だけで残さないでください。想定期間にわたる実装・移行コスト、将来の保守・拡張コスト、不具合・運用上のリスク、チームにとっての理解しやすさ、可逆性、削除コストを評価します。
  6. 実装を求められた場合にのみ実装し、周辺の挙動やプロジェクトの慣例は、それが実証された問題を引き起こさない限り維持します。
  7. 保証を証明できる最も低コストの証拠で検証し、結果、チェック内容、不確実性、残るリスクを報告します。

アーキテクチャや、実証された長期的な圧力について検討する場合は、必要に応じて次の問いを選択的に投げかけます。このタスク単位、システム、またはプロジェクトを今日ゼロから構築し、今後数年間にわたってサポート・拡張すると分かっていたら、何を違う方法で行うでしょうか? その答えを、偶発的な制約を明らかにし、進化の方向性を定めるために使います。書き換えを正当化するために使ってはいけません。他の診断的な問いは、答えによって判断が変わり得る場合にのみ投げかけます。何が一緒に変更されるか、どのレガシーな挙動が何を保護しているか、何を再利用または削除できるか、何を元に戻しにくいか、設計がどのように破綻するかを確認します。

実質的に不可逆な判断や影響範囲の大きい判断では、有用であれば簡潔なプレモーテムを行います。失敗したと仮定し、考えられる原因を2、3個挙げ、それぞれの初期兆候、予防策または封じ込め策、ロールバック方法を明らかにします。通常の作業に儀式や定期的な実施を課さないでください。

インシデント、リグレッション、または変更のつらさが繰り返し観測された後は、再発の可能性を下げ、検出を早め、復旧を容易にする、または将来の変更をより安全にする、持続的なフィードバックの仕組みを検討します。たとえば、対象を絞ったテスト、契約チェック、運用上の問いに結びついた可観測性、より安全な境界、ロールバック、削除、簡素化などです。観測された仕組みを伴わない一般論としての「反脆弱性」は推奨しないでください。

再利用を優先し、Python らしい書き方にする

実質的な機能がすでに解決されている可能性がある場合は、その制約を定義し、次の順序で選択肢を検討してください。

  1. リポジトリにすでにある機能や規約。
  2. 一般的な Python の慣用表現や標準ライブラリの機能。
  3. ネイティブのランタイム、データベース、またはプラットフォームの保証。
  4. すでにインストールされている依存関係。
  5. 適切に保守されている依存関係。
  6. 明快で最小限の独自実装。

明白なローカルコードを数行置き換えるために、まずパッケージの調査を始めないでください。先に挙げた選択肢が適さない理由を説明せずに、パーサー、シリアライザー、バリデーションフレームワーク、スケジューラー、リトライフレームワーク、キャッシュ、DI コンテナー、データ構造、プロトコル実装を独自に作らないでください。利用可能であれば、別の再利用スキルによってエコシステムの調査を深めてもかまいません。このスキルでは引き続き、リポジトリへの適合性を判断します。

独自のヘルパーを作る前に、デコレーター、コンテキストマネージャー、functools、itertools、ジェネレーター、内包表記、データクラス、プロトコル、必要性がある場合のデスクリプター、標準の並行処理プリミティブを検討してください。最も一般的で読みやすい慣用表現を優先してください。凝った書き方が Python らしいとは限りません。手続き型のコードが、永続的な状態、不変条件、ライフサイクル、拡張ポイントを見えにくくしている場合は、その過剰な複雑さを見直してください。ただし、クラスを必須にしないでください。局所的またはステートレスな動作には、関数とモジュールが引き続き適しています。永続的な概念を一貫して所有できる場合は、値、オブジェクト、戦略、プロトコル、サービスが役立ちます。

指摘と変更を適切に調整する

深刻度は到達可能な影響と前提条件に応じて判断し、確信度は証拠に応じて判断してください。P0 は到達可能な緊急事態にのみ使用し、P1 は重大な正確性、セキュリティ、可用性、互換性の問題が発生する可能性が高い場合に使用してください。P2 は範囲の限られた不具合、または実証された保守上の危険に、P3 は任意の局所的な改善に使用してください。設計上の好みだけであれば、通常は指摘に含めません。暫定的な懸念は指摘ではなく、質問、前提、または残存リスクとして示してください。

レビューでは、対応可能な指摘を影響の大きい順に並べてください。確認された不変条件や負荷、証拠、具体的に到達可能な状況、適切な最小限の対処、検証方法を示してください。結論には、実際に確認できたトランザクション、ラッパー、ランタイム、呼び出し元の動作を反映させてください。外側の保証を確認していない場合は、絶対的な断言で退けず、不確実性として扱ってください。実際に確認した箇所のみを引用し、正確な行を特定できていない場合はコンポーネント名を使用してください。決定的な仕組み、対処方法、根拠、重要な残存リスクが明らかになったら、そこで説明を終えてください。隣接する推測的な懸念で、要点を埋もれさせないでください。対応可能な指摘がないという結論も妥当です。求められていない構造上の提案は、最大 3 件にしてください。

実装では、依頼された成果を作成し、重要な判断のみを説明してください。リポジトリとリスクに応じたチェックを、ホストの既存設定のもとで実行し、無関係な失敗は分けて報告してください。同様の箇所、依存関係、CI、公開コントラクトにまで、編集範囲をひそかに広げないでください。範囲外に同様の箇所があると確認できた場合は、有用であれば報告してください。

参照資料を選択的に読む

懸念事項参照先
所有権、境界、Clean Architecture のツール、進化、再利用、移行境界と進化
永続化、トランザクション、副作用、リトライ、並行性、リソースデータ、並行性、副作用
テスト、レガシーコードへの対応、運用、パフォーマンス、ロールアウト、持続的な学習テスト、保守、運用
認可、テナント、インジェクション、安全でない I/O、シークレット、依存関係セキュリティと信頼
ローカルな設計/可読性、Python の型付け/ランタイム/パッケージング/慣用表現、条件付きのライブラリ選択Python のランタイムとエコシステム

Python と JS/TS が混在する作業では、契約または実装が言語をまたぐ場合にのみ、両方の言語スキルを使います。信頼できる情報源を一つにまとめ、シリアライズ/検証ルール、互換性に関する義務、統合検証を明確にします。互いに無関係なローカルの回答を二つ出して済ませてはいけません。

フォールバックと完了前の確認

  • スニペットしかない場合やリポジトリがない場合は、局所的に推論し、前提を明示して、リポジトリ全体に適用するアーキテクチャ上の指示は避けます。
  • テスト、ランタイムでの実行、または最新の一次資料を利用できない場合、該当する保証を検証済みだと主張せず、最も有用で範囲の狭い検証手順を示します。
  • 慣習、実行可能な動作、宣言された契約が矛盾する場合は、それぞれが何を証明するのかを区別し、未解決の矛盾を明らかにします。
  • 生成コードまたはベンダーコードについては、直接編集を推奨する前に、保守されている信頼できる情報源を特定します。
  • 疑わしくても到達不能なコードは、現存する重大な欠陥ではなく、クリーンアップまたは残存リスクとして扱います。レビューで対応可能な指摘がないこともあり得ます。

完了前に、回答または変更が実際のタスク範囲内に収まっていること、すべての指摘に到達可能な仕組みと確認済みの根拠があること、すべての推奨事項が対象期間においてより安価な代替案より優れていること、ライブラリに関する主張がリポジトリ/バージョンに合致していること、検証が十分であるか、制限が明示されていることを確認します。

短い例

長いサービス関数だからといって、それだけで指摘事項になるわけではありません。処理をたどってください。短く安定した操作を順番に実行しているだけなら、そのままにします。複数のエントリーポイントで残高に関する不変条件が重複し、トランザクションの所有者が不明確で、新しい支払い方法を追加するたびに同じ分岐ブロックを編集する必要があるなら、その問題を指摘します。局所的な抽出、値/ドメインオブジェクト、ストラテジー境界、ユースケースオブジェクトを比較し、不変条件を一元化する最小の選択肢を採用します。そして、更新を強制する実際の永続化セマンティクスと単体テストで検証します。標準的なフォルダーツリーを押し付けてはいけません。

コメント