Agent Skills by ALSEL
Anthropic Claudeその他⭐ リポ 0品質スコア 50/100

test-driven-development

テストを先に記述するTDD(テスト駆動開発)手法に従い、機能追加やバグ修正の実装コードを書く前に適用するスキルです。Red-Green-Refactorのサイクルを通じて、品質の高いコードを体系的に構築します。

description の原文を見る

Use when implementing any feature or bugfix, before writing implementation code

SKILL.md 本文

テスト駆動開発 (TDD)

概要

テストを最初に書く。失敗するのを見る。最小限のコードを書いて合格させる。

核となる原則: テストが失敗するのを見なければ、そのテストが正しいことをテストしているかどうか分からない。

ルールの文字通りに違反することは、ルールの精神に違反することである。

使うタイミング

常に:

  • 新機能
  • バグ修正
  • リファクタリング
  • 動作の変更

例外 (人間のパートナーに相談):

  • 一時的なプロトタイプ
  • 生成されたコード
  • 設定ファイル

「今回だけ TDD をスキップしよう」と考えている? 止めなさい。それは言い訳だ。

鉄の法則

テストが失敗することなく、本番コードを書いてはいけない

テストより先にコードを書いた? 削除しろ。最初からやり直す。

例外はない:

  • 「参考」として保つな
  • テストを書きながら「適応」させるな
  • 見るな
  • 削除とは削除のことだ

テストから新規で実装する。以上。

Red-Green-Refactor

digraph tdd_cycle {
    rankdir=LR;
    red [label="RED\nWrite failing test", shape=box, style=filled, fillcolor="#ffcccc"];
    verify_red [label="Verify fails\ncorrectly", shape=diamond];
    green [label="GREEN\nMinimal code", shape=box, style=filled, fillcolor="#ccffcc"];
    verify_green [label="Verify passes\nAll green", shape=diamond];
    refactor [label="REFACTOR\nClean up", shape=box, style=filled, fillcolor="#ccccff"];
    next [label="Next", shape=ellipse];

    red -> verify_red;
    verify_red -> green [label="yes"];
    verify_red -> red [label="wrong\nfailure"];
    green -> verify_green;
    verify_green -> refactor [label="yes"];
    verify_green -> green [label="no"];
    refactor -> verify_green [label="stay\ngreen"];
    verify_green -> next;
    next -> red;
}

RED - テストが失敗することを確認

何が起こるべきかを示す最小限のテストを 1 つ書く。

<Good> ```typescript test('retries failed operations 3 times', async () => { let attempts = 0; const operation = () => { attempts++; if (attempts < 3) throw new Error('fail'); return 'success'; };

const result = await retryOperation(operation);

expect(result).toBe('success'); expect(attempts).toBe(3); });

明確な名前、実際の動作をテスト、1 つのこと
</Good>

<Bad>
```typescript
test('retry works', async () => {
  const mock = jest.fn()
    .mockRejectedValueOnce(new Error())
    .mockRejectedValueOnce(new Error())
    .mockResolvedValueOnce('success');
  await retryOperation(mock);
  expect(mock).toHaveBeenCalledTimes(3);
});

曖昧な名前、モックをテスト、コードではない </Bad>

要件:

  • 1 つの動作
  • 明確な名前
  • 実際のコード (不可避な場合を除きモックなし)

RED を確認 - テストが失敗するのを見る

必須。スキップするな。

npm test path/to/test.test.ts

以下を確認:

  • テストが失敗する (エラーではなく)
  • 失敗メッセージが期待通り
  • 機能がないため失敗する (タイポではなく)

テストが合格した? 既存の動作をテストしている。テストを修正する。

テストがエラーになった? エラーを修正して、正しく失敗するまで再実行する。

GREEN - 最小限のコード

テストを合格させるための最も単純なコードを書く。

<Good> ```typescript async function retryOperation<T>(fn: () => Promise<T>): Promise<T> { for (let i = 0; i < 3; i++) { try { return await fn(); } catch (e) { if (i === 2) throw e; } } throw new Error('unreachable'); } ``` 合格させるのに十分なだけ </Good> <Bad> ```typescript async function retryOperation<T>( fn: () => Promise<T>, options?: { maxRetries?: number; backoff?: 'linear' | 'exponential'; onRetry?: (attempt: number) => void; } ): Promise<T> { // YAGNI } ``` 過度に設計されている </Bad>

機能を追加したり、他のコードをリファクタしたり、テストを超えて「改善」してはいけない。

GREEN を確認 - テストが合格するのを見る

必須。

npm test path/to/test.test.ts

以下を確認:

  • テストが合格する
  • 他のテストも合格する
  • 出力が清潔 (エラーなし、警告なし)

テストが失敗した? テストではなくコードを修正する。

他のテストが失敗した? 今すぐ修正する。

REFACTOR - クリーンアップ

GREEN の後のみ:

  • 重複を削除
  • 名前を改善
  • ヘルパーを抽出

テストを GREEN に保つ。動作を追加しない。

繰り返す

次の機能のための次のテストが失敗します。

良いテスト

品質良い悪い
最小限1 つのこと。名前に「and」? 分ける。test('validates email and domain and whitespace')
明確名前が動作を説明するtest('test1')
意図を示す望まれる API を実証するコードが何をすべきかを不明瞭にする

順序が重要な理由

「後でテストを書いて動作を確認しよう」

コードの後に書かれたテストは即座に合格する。合格は何も証明しない:

  • 間違ったことをテストしているかもしれない
  • 動作ではなく実装をテストしているかもしれない
  • 忘れた境界ケースを逃すかもしれない
  • バグを捕捉するのを見たことがない

テスト優先は、テストが実際に何かをテストしていることを証明するために、テストが失敗するのを見ることを強制する。

「すべての境界ケースを手動でテスト済み」

手動テストはアドホック。すべてをテストしたと思っているが:

  • 何をテストしたかの記録がない
  • コードが変更された時に再実行できない
  • プレッシャーの下で簡単にケースを忘れる
  • 「試したときに動いた」≠ 包括的

自動テストは体系的。毎回同じ方法で実行される。

「X 時間の作業を削除するのは浪費」

サンク・コスト・フォールシー。その時間はすでに過去のもの。今のあなたの選択:

  • 削除して TDD で書き直す (さらに X 時間、高い信頼)
  • 保って後でテストを追加 (30 分、低い信頼、バグの可能性)

「浪費」は信頼できないコードを保つことだ。実際のテストなしの動作するコードは技術的負債。

「TDD は独断的で、実利的であることは適応を意味する」

TDD は実利的:

  • コミット前にバグを見つける (コミット後のデバッグより速い)
  • リグレッションを防ぐ (テストが瞬時に破損を捕捉)
  • 動作を文書化 (テストはコードの使い方を示す)
  • リファクタリングを可能にする (テストが破損を捕捉するため自由に変更)

「実利的」なショートカット = 本番環境でのデバッグ = 遅い。

「テスト後は同じ目標を達成する - それは儀式ではなく精神だ」

いいえ。テスト後は「これは何をするか?」に答える テスト優先は「これは何をすべきか?」に答える

テスト後は実装によってバイアスがかかる。構築したものをテストする、必要とされるものではない。覚えている境界ケースを確認し、発見したケースではない。

テスト優先は実装前に境界ケースの発見を強制する。テスト後は覚えているすべてを確認 (覚えていない)。

30 分のテスト後 ≠ TDD。カバレッジを得て、テストが動作することの証明を失う。

よくある言い訳

言い訳現実
「テストするには単純すぎる」単純なコードは壊れる。テストは 30 秒。
「後でテストする」テストの合格は何も証明しない。
「テスト後は同じ目標を達成する」テスト後 = 「これは何をするか?」 テスト優先 = 「これは何をすべきか?」
「すでに手動でテスト済み」アドホック ≠ 体系的。記録がない、再実行できない。
「X 時間の削除は浪費」サンク・コスト・フォールシー。検証されないコードの保持は技術的負債。
「参考として保持して、テストを優先に書く」適応させる。それはテスト後だ。削除とは削除のことだ。
「最初に探索が必要」いい。探索を破棄して、TDD で開始する。
「テストが難しい = 設計が不明確」テストを聞く。テストが難しい = 使いづらい。
「TDD は遅くなる」TDD はデバッグより速い。実利的 = テスト優先。
「手動テストが速い」手動は境界ケースを証明しない。毎回の変更を再テストする。
「既存コードにテストがない」改善している。既存コードにテストを追加する。

赤旗 - 停止して最初からやり直す

  • テストの前のコード
  • 実装後のテスト
  • テストが即座に合格
  • テストが失敗した理由を説明できない
  • 後で追加されたテスト
  • 「今回だけ」を正当化する
  • 「すでに手動でテスト済み」
  • 「テスト後は同じ目的を達成する」
  • 「精神の問題で儀式ではない」
  • 「参考として保持」または「既存コードを適応」
  • 「すでに X 時間費やした、削除は浪費」
  • 「TDD は独断的、私は実利的」
  • 「これは異なる理由は...」

これらすべての意味: コードを削除。TDD で最初からやり直す。

例: バグ修正

バグ: 空のメールが受け入れられる

RED

test('rejects empty email', async () => {
  const result = await submitForm({ email: '' });
  expect(result.error).toBe('Email required');
});

RED を確認

$ npm test
FAIL: expected 'Email required', got undefined

GREEN

function submitForm(data: FormData) {
  if (!data.email?.trim()) {
    return { error: 'Email required' };
  }
  // ...
}

GREEN を確認

$ npm test
PASS

REFACTOR 複数のフィールドに必要な場合は検証を抽出する。

検証チェックリスト

作業完了前に:

  • 新しい関数/メソッドにはテストがある
  • 実装する前に各テストが失敗するのを見た
  • 各テストが期待される理由で失敗した (タイポではなく機能がない)
  • 各テストを合格させるための最小限のコードを書いた
  • すべてのテストが合格する
  • 出力が清潔 (エラーなし、警告なし)
  • テストは実際のコードを使用 (不可避な場合を除きモックなし)
  • 境界ケースとエラーがカバーされている

すべてのボックスをチェックできない? TDD をスキップした。最初からやり直す。

詰まった時

問題解決策
テスト方法が分からない望まれた API を書く。最初にアサーションを書く。人間のパートナーに相談する。
テストが複雑すぎる設計が複雑すぎる。インターフェースを簡素化。
すべてをモックする必要があるコードが密結合。依存性注入を使用。
テストセットアップが巨大ヘルパーを抽出。まだ複雑? 設計を簡素化。

デバッグ統合

バグが見つかった? それを再現するテストが失敗します。TDD サイクルに従う。テストは修正を証明し、リグレッションを防ぐ。

テストなしでバグを修正しない。

テスト・アンチパターン

モックやテストユーティリティを追加する場合は、@testing-anti-patterns.md を読んで一般的な落とし穴を回避する:

  • モックの動作ではなく実際の動作をテスト
  • テスト専用メソッドを本番クラスに追加
  • 依存関係を理解せずにモック

最終ルール

本番コード → テストが存在し最初に失敗した
それ以外 → TDD ではない

人間のパートナーの許可なしに例外なし。

制限事項

  • このスキルを、上記で説明されたスコープと明確に一致するタスク時のみ使用する。
  • 出力を、環境固有の検証、テスト、または専門家レビューの代替として扱わない。
  • 必要な入力、権限、安全境界、または成功基準が不足している場合は停止して明確化を求める。

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

詳細情報

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

Source: https://github.com/sickn33/antigravity-awesome-skills / ライセンス: MIT

関連スキル

汎用その他⭐ リポ 1,982

superfluid

Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper

by LeoYeAI
汎用その他⭐ リポ 100

civ-finish-quotes

実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。

by huxiuhan
汎用その他⭐ リポ 1,110

nookplot

Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。

by BankrBot
汎用その他⭐ リポ 59

web3-polymarket

Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。

by elophanto
汎用その他⭐ リポ 52

ethskills

Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。

by jiayaoqijia
汎用その他⭐ リポ 44

xxyy-trade

このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。

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