Synthèse automatique
Fournit des règles d'implémentation pour dessiner une cible de fléchettes avec p5.js : ordre des couches, découpage du « spider » en deux étapes et conversion des coordonnées physiques (mm) vers les coordonnées écran.
Points forts
- Ordre de dessin explicite en 10 étapes, avec justification du découpage du spider en partie extérieure et partie bull.
- Règle nette de séparation entre coordonnées physiques (mm) et coordonnées écran via une classe CoordinateTransform.
- Formules concrètes pour aligner les rayons sur les frontières de segments avec (i - 0.5) * SEGMENT_ANGLE.
- Conseils de test (ordre d'appel entre lignes et cercles) et de rétrocompatibilité via une fonction dépréciée.
Limites
- Très lié à un projet précis : il dépend de constantes et d'une classe CoordinateTransform qui ne sont pas fournies.
- Ne traite que le rendu de la cible, sans logique de score, de lancer ou d'interaction.
- Les exemples de test supposent un framework de mocks (spy) qui n'est pas précisé.
À consulter lors de l'implémentation, des tests ou de la revue du rendu p5.js d'une cible de fléchettes.
Inutile pour d'autres types de visualisation canvas ou si vous n'utilisez ni p5.js ni ce modèle de coordonnées.
Analyse de sécurité
SûrThis is a pure reference/documentation skill describing dartboard rendering patterns with p5.js. Declared allowed-tools is only Read, and the body contains no bash, network calls, file writes, credential handling, or obfuscated payloads. All code blocks are illustrative TypeScript/p5.js drawing examples with no executable side effects beyond rendering.
Aucun point d'attention détecté
Comment cette analyse est faiteExemples
ダーツボードの描画をp5.jsで実装してください。スパイダーは外側とブルの2ステップに分け、描画順序の原則に従ってください。スパイダーの放射線がブルの色に隠れてしまいます。drawSpiderOuter と drawSpiderBull に分割して描画順序を修正してください。drawSpiderOuter のテストを書いてください。すべての放射線が同心円より前に描画されることを検証してください。name: dartboard-rendering description: ダーツボード描画の実装知識とベストプラクティス。p5.jsを使用した描画順序、レイヤリング、座標系の扱いに関する専門知識を提供します。実装・テスト・レビュー時に参照してください。 allowed-tools: Read
Dartboard Rendering Knowledge
ダーツボード描画に関する実装パターンとベストプラクティスを定義します。
描画順序の原則
基本原則: 外側から内側へ、下レイヤーから上レイヤーへ
ダーツボードは以下の順序で描画することで、正しいレイヤリングを実現します:
1. 背景クリア
2. ダブルリング(170mm円全体、赤/緑交互)
3. アウターシングル(162mm円全体、黒/ベージュ交互)
4. トリプルリング(107mm円全体、赤/緑交互)
5. インナーシングル(99mm円全体、黒/ベージュ交互)
6. ★ 外側スパイダー(放射線 + リング境界の同心円)
7. アウターブル(緑色、半径7.95mm)
8. インナーブル(赤色、半径3.175mm)
9. ★ ブル用スパイダー(ブル境界の同心円)
10. セグメント番号
スパイダー(ワイヤー境界線)の2ステップ描画
重要: スパイダーは必ず2ステップに分けて描画する
問題: 一度に描画すると色が被る
// ❌ 悪い例: 全てのスパイダーを一度に描画
drawAllRings();
drawAllSpiders(); // 放射線がブルの色に被る!
drawBull();
解決策: スパイダーを分割描画
// ✅ 良い例: スパイダーを2ステップに分ける
drawAllRings();
drawSpiderOuter(); // 1. 放射線 + リング境界の同心円
drawBull(); // ブルエリアの色を塗る
drawSpiderBull(); // 2. ブル境界の同心円
理由:
- 放射線がブルエリアの色を塗る前に描画されないと、放射線が色に被って見えなくなる
- ブル境界の円はブルエリアの色を塗った後に描画しないと、境界線が見えない
セグメント境界の角度計算
問題: セグメントの真ん中に配置されてしまう
// ❌ 悪い例: セグメントの真ん中に配置される
const angle = -Math.PI / 2 + i * SEGMENT_ANGLE;
解決策: 0.5個分ずらす
// ✅ 良い例: セグメント境界に配置される
const angle = -Math.PI / 2 + (i - 0.5) * SEGMENT_ANGLE;
理由:
drawRingSegments()関数が(index - 0.5) * SEGMENT_ANGLEを使用してセグメントを描画している- スパイダーの放射線も同じ計算式を使うことで、セグメント境界に正確に配置される
座標系の分離原則
物理座標(mm)vs 画面座標(pixel)
鉄則: ビジネスロジックは必ず物理座標で処理し、描画時のみ画面座標に変換する。
// ✅ 良い例
const physicalRadius = BOARD_PHYSICAL.rings.doubleOuter; // 170mm
const screenRadius = transform.physicalDistanceToScreen(physicalRadius);
p5.circle(center.x, center.y, screenRadius * 2);
// ❌ 悪い例
const radius = 170; // 物理座標?画面座標?不明確
p5.circle(center.x, center.y, radius * 2);
CoordinateTransform クラスの使用
// 座標変換の例
const center = transform.getCenter(); // ボード中心の画面座標
const radius = transform.physicalDistanceToScreen(170); // 物理→画面
const width = transform.physicalDistanceToScreen(1.5); // 線幅も変換
p5.js 描画最適化
描画状態の設定はループ外で
// ✅ 良い例: 共通設定はループ外で一度だけ
p5.noStroke(); // ループ外で設定
SEGMENTS.forEach(() => {
p5.fill(color);
p5.arc(...);
});
// ❌ 悪い例: 毎回設定する
SEGMENTS.forEach(() => {
p5.noStroke(); // 20回呼ばれる(無駄)
p5.fill(color);
p5.arc(...);
});
実装パターン
drawSpiderOuter() - 外側スパイダー
export function drawSpiderOuter(p5: p5Types, transform: CoordinateTransform): void {
// 1. 放射線(セグメント境界): 20本
// - ボード中心からboardEdge(225mm)まで
// - (i - 0.5) * SEGMENT_ANGLE でセグメント境界に配置
// 2. リング境界の同心円: 4本
// - ダブル外側(170mm)
// - ダブル内側(162mm)
// - トリプル外側(107mm)
// - トリプル内側(99mm)
}
drawSpiderBull() - ブル用スパイダー
export function drawSpiderBull(p5: p5Types, transform: CoordinateTransform): void {
// ブル境界の同心円: 2本
// - アウターブル(7.95mm)
// - インナーブル(3.175mm)
}
テスト時の考慮事項
描画順序の検証
// 放射線→同心円の順序を検証
const allCalls = [...lineSpy.mock.invocationCallOrder, ...circleSpy.mock.invocationCallOrder];
const lineCalls = lineSpy.mock.invocationCallOrder;
const circleCalls = circleSpy.mock.invocationCallOrder;
// 最後の放射線 < 最初の同心円
expect(Math.max(...lineCalls)).toBeLessThan(Math.min(...circleCalls));
後方互換性の保持
/**
* @deprecated drawSpiderOuter と drawSpiderBull を個別に呼び出すことを推奨
*/
export function drawSpider(p5: p5Types, transform: CoordinateTransform): void {
drawSpiderOuter(p5, transform);
drawSpiderBull(p5, transform);
}
よくある間違いと対策
1. 描画順序の間違い
間違い: スパイダーを一度に全て描画 対策: スパイダーを2ステップに分ける(外側→ブル塗り→ブル用)
2. 座標系の混在
間違い: 物理座標と画面座標が混在 対策: 常に物理座標で計算し、描画直前に変換
3. セグメント境界のずれ
間違い: i * SEGMENT_ANGLE でセグメント中央に配置
対策: (i - 0.5) * SEGMENT_ANGLE で境界に配置
4. 描画最適化の不足
間違い: ループ内で毎回描画状態を設定 対策: 共通設定はループ外で一度だけ
使用方法
このskillは以下のコンテキストで参照してください:
- テスト作成時: test-writerサブエージェントで描画順序やスパイダー分割を考慮
- 実装時: implementサブエージェントで正しい描画パターンを適用
- レビュー時: review-fileサブエージェントで描画順序の正しさを検証
このドメイン知識を常に参照し、ダーツボード描画に関わる実装やテストを作成してください。
Du fichier au premier essai
Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.
Consulter la source et ses fichiers annexesCe téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.
1. Télécharger le fichier
Télécharger SKILL.mdDepuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/dartboard-rendering-mmbizjtm/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.
Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.
mkdir -p '.skill-downloads/dartboard-rendering-mmbizjtm' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/dartboard-rendering-mmbizjtm/download' --output '.skill-downloads/dartboard-rendering-mmbizjtm/SKILL.md.part' && mv '.skill-downloads/dartboard-rendering-mmbizjtm/SKILL.md.part' '.skill-downloads/dartboard-rendering-mmbizjtm/SKILL.md'2. Vérifier les prérequis
Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.
Outils déclarés par l’auteur (à vérifier dans votre agent) : Read
Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.
Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.
3. Charger la skill
Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.
Claude Code
test -f '.skill-downloads/dartboard-rendering-mmbizjtm/SKILL.md' && test -s '.skill-downloads/dartboard-rendering-mmbizjtm/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/dartboard-rendering' && cp -R '.skill-downloads/dartboard-rendering-mmbizjtm' '.claude/skills/dartboard-rendering'OpenSkills
OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.
Installation officielle d’OpenSkillsopenskills install './.skill-downloads/dartboard-rendering-mmbizjtm'openskills read 'dartboard-rendering-mmbizjtm'La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.
Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.
openskills syncMode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.
4. Faire un premier essai
Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :
Lis .skill-downloads/dartboard-rendering-mmbizjtm/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.
Bonnes pratiques React Hook Form
Developpement
Maîtrisez React Hook Form : évitez les anti-patterns, gérez les abonnements, et traitez correctement reset, dirty state et entrées contrôlées.
Migration Emotion vers Mantine
Developpement
Migrer les styled-components Emotion vers des composants Mantine avec style props et modules CSS. Pour convertir .styled.tsx ou supprimer les imports @emotion.
Détecteur de dérive de périmètre
Developpement
Analyse les diffs git par rapport à une intention pour détecter la dérive de périmètre, fichiers non liés et PR trop larges, puis suggère de garder, diviser ou justifier.