用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/YunosukeYoshino/ImageScraper --skill ty-pro命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | ty-pro |
| description | Python型安全性をtyで強化。型アノテーション追加、型エラー修正、境界バリデーション実装時に使用。 |
tyを使ったPython型チェックと型安全なコード設計。
型エラー修正進捗:
- [ ] Step 1: ty check実行でエラー特定
- [ ] Step 2: エラー分類(真の問題 vs 抑制候補)
- [ ] Step 3: 修正実装
- [ ] Step 4: ty check再実行で確認
Step 1: エラー特定
uv run ty check src/
Step 2: エラー分類
# ty: ignore[rule]で抑制Step 3-4: 修正→確認のループ
uv run ty check src/ # 型チェック
uv run ty check path/to/file.py # 単一ファイル
isinstance、TypeGuardで絞り込み# ✅ 推奨: ルール指定
result = func() # ty: ignore[invalid-assignment]
# ✅ 複数ルール
value = data["key"] # ty: ignore[possibly-unbound, invalid-assignment]
# ⚠️ 最終手段: 全抑制(サードパーティ起因のみ)
result = untyped_lib.call() # type: ignore
from typing import no_type_check
@no_type_check
def legacy_code():
# この関数内は型チェックされない
pass
# ❌ Anyを漏らす
def process(data: Any) -> Any: ...
# ✅ 境界で受けて即変換
def process(data: object) -> Result:
validated = parse_input(data) # object → 精密型
return handle(validated)
# ✅ 理由付きcast
# SDK returns untyped but we know it's always int
count = cast(int, sdk.get_count())
from typing import TypedDict
class UserInput(TypedDict):
name: str
age: int
def validate_user(data: object) -> UserInput:
if not isinstance(data, dict):
raise ValueError("Expected dict")
if "name" not in data or "age" not in data:
raise ValueError("Missing required fields")
return {"name": str(data["name"]), "age": int(data["age"])}
from typing import TypeGuard
def is_string_list(val: object) -> TypeGuard[list[str]]:
return isinstance(val, list) and all(isinstance(x, str) for x in val)
| 機能 | 用途 |
|---|---|
Protocol | 構造的型付け(インターフェース) |
TypedDict | JSON/dict契約 |
Literal | 判別ユニオン |
NewType | ドメインID(UserId等) |
Self | Fluent API |
TypeGuard | カスタムナローイング |
# ty: ignore を理由なく追加# type: ignoreをファイル先頭に)[tool.ty.rules]
# エラーレベル調整
index-out-of-bounds = "warn"
unused-ignore-comment = "error" # 不要な抑制を検出
ty.toml(プロジェクト)pyproject.toml の [tool.ty]