mcpField
Q
quality-enforcement

quality-enforcement

github.com/noobygainsテスト・品質11559 回インストール3 日前に更新
リポジトリ

quality-enforcement について

quality-enforcementは、マージ前に測定可能な品質ルールを適用したい開発チーム向けのスキルです。Lint、型、テスト、ビルド、依存関係、複雑度、未使用コード、バンドルサイズのチェックを扱います。

主な機能

  1. 01各プルリクエストでのCIチェック
  2. 02Lintと厳格な型チェック基準
  3. 03引き下げ不可のカバレッジ基準
  4. 04ビルド・依存関係・サイズの検査
  5. 05複雑度と未使用コードの検査

活用シーン

  1. 01マージ前の品質ゲート設定
  2. 02プロジェクトのCI品質チェックリストの確認

インストール

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

$npx skills add https://github.com/noobygains/godmode --skill quality-enforcement

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

詳細

品質の強制

概要

品質の強制は自動化するものであり、努力目標ではありません。機械でチェックできるものは、すべてチェックする必要があります。

基本原則: CI で強制されない品質チェックは、存在しないも同然です。

例外なし。回避策なし。近道なし。

最優先の指針

NO CODE LANDS WITHOUT ALL QUALITY CHECKS PASSING

チェックに失敗したら、コードを修正してください。チェックを無効にしてはいけません。CI を回避してはいけません。

使用するタイミング

必ず次の前に実施してください:

  • コードをコミットする
  • プルリクエストを作成する
  • trunk にマージする
  • 本番環境にリリースする

特に次のような場合:

  • 「今回だけリンターを抑制しよう」(絶対にしない)
  • 「CI が遅すぎるので、手動でマージしよう」(CI を修正し、スキップしない)
  • 「型エラーはあるけれど、実行時には動く」(型を修正する)
  • 「重要な経路はテストされているので、カバレッジが下がってもよい」(カバレッジを回復する)

実行プロトコル

BEFORE any PR or merge:

1. LINT: Zero errors, zero warnings
2. TYPES: Zero type errors (strict mode)
3. TESTS: All passing, coverage meets threshold
4. BUILD: Clean build, no warnings
5. SIZE: Bundle/binary within budget (if applicable)
6. DEPS: No known vulnerabilities (critical/high)
7. COMPLEXITY: No functions exceeding complexity threshold

Any check fails = code is not ready. Fix before advancing.

品質チェックのリファレンス

チェック 1:リンティング
Standard: Zero errors AND zero warnings
設定値理由
エラー0譲れない基準
警告0警告は、無視することに慣れてしまうエラーになります
設定をコミットするはいすべてのコントリビューター間で一貫性を保つため
CI で強制するはいローカルでの上書きは関係ありません

警告はいずれエラーになります。 修正するか、ルールを調整してください。警告を放置してはいけません。

ルールを無効にする場合: チームが、そのルールはこのプロジェクトに適さないと明示的に合意した場合に限ります。理由を設定ファイルに記録してください。便宜上、インラインで無効にしてはいけません。

チェック 2:型安全性
Standard: Zero type errors, strict mode enabled

TypeScript:

{
  "compilerOptions": {
    "strict": true,
    "noUncheckedIndexedAccess": true,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true,
    "forceConsistentCasingInFileNames": true
  }
}

Python: strict モードで mypy または pyright を使用します。

アンチパターン問題修正
any 型型チェックが無効になる具体的な型またはジェネリクスを使用する
// @ts-ignore実際のエラーが隠される型エラーを修正する
# type: ignore同じ問題型エラーを修正する
strict ではないモード安全だという誤った安心感最初から strict を有効にする

any は、解決しないと自分で選んだ型エラーです。 any を使うたびに、その影響を受けるすべてのものについて型システムが弱まります。

チェック 3:テストカバレッジ
Standard: Coverage threshold that never decreases
指標下限目標
行カバレッジ80%90%+
分岐カバレッジ70%85%+
新規コードのカバレッジ90%100%(目指す値)

カバレッジのしきい値は、引き上げていくものです。 引き上げることはあっても、引き下げてはいけません。カバレッジが現在の水準を下回ったら CI が失敗するように設定してください。

カバレッジは必要ですが、それだけでは十分ではありません。アサーションが不十分な 100% のカバレッジは、厳密なアサーションを伴う 70% のカバレッジよりも質が低いです。カバレッジチェックは TDD の規律(godmode:test-first)と組み合わせてください。

チェック 4:ビルド
Standard: Clean build, zero warnings
  • ビルドが正常に完了すること
  • コンパイラー/ビルドの警告がゼロであること
  • 出力が期待される構造と一致すること
  • ビルド時に依存関係が不足していないこと
チェック 5:バンドルサイズの予算(フロントエンド)
Standard: Total bundle size within defined budget
対象予算ツール
初期 JS(圧縮後)<200KBwebpack-bundle-analyzer
CSS<50KBPurgeCSS check
画像最適化済み、WebP/AVIFimagemin
ページ全体の容量<1MBLighthouse

予算を設定し、CI で強制してください。 予算を超過したら、バンドルの内容を分析し、削除するか分割してください。

チェック 6:依存関係の監査
Standard: Zero critical or high vulnerabilities
言語コマンドCI との統合
JavaScriptnpm audit --audit-level=highhigh 以上で失敗
Pythonpip-audit または safety checkhigh 以上で失敗
Gogovulncheck ./...いずれかの検出で失敗
Rustcargo auditいずれかの検出で失敗

次の点も確認してください:

  • 不要な依存関係がないこと(各依存関係は実際に使われていますか?)
  • 重複する依存関係がないこと(同じパッケージの異なるバージョン)
  • 依存関係が保守されていること(最終更新が 12 か月以内)
チェック 7:複雑度メトリクス
Standard: No function exceeds complexity threshold
メトリクスしきい値ツール
循環的複雑度関数あたり <10ESLint(complexity ルール)、radon、gocyclo
関数の長さ<50 行リンターのルール
ファイルの長さ<400 行リンターのルール
パラメーター数関数あたり <5リンターのルール

複雑度がしきい値を超えた場合: リファクタリングします。関数を切り出します。条件分岐を簡素化します。しきい値を引き上げてはいけません。

チェック 8:デッドコード
Standard: No unused exports, variables, or dependencies
対象ツール
未使用のエクスポートts-prune、knip
未使用の依存関係depcheck、knip
未使用の変数リンター(no-unused-vars)
到達不能なコードリンター、型チェッカー

デッドコードは誤解を招くコードです。何かが依存しているように見せてしまいます。削除してください。

CI パイプラインテンプレート

# Minimum quality enforcement pipeline
quality-checks:
  steps:
    - name: Lint
      run: npm run lint
    - name: Type Check
      run: npm run typecheck
    - name: Test
      run: npm test -- --coverage
    - name: Coverage Check
      run: check-coverage --threshold 80
    - name: Build
      run: npm run build
    - name: Bundle Size
      run: bundlesize
    - name: Audit
      run: npm audit --audit-level=high

すべてのチェックを、すべての PR で実行します。マージする前に、すべて合格する必要があります。

認知の落とし穴

合理化実際
「ただのリンター警告で、エラーではない」無視した警告が、見逃すエラーになります。
「型エラーだが、実行時には動く」型があれば、まだ遭遇していない実行時エラーを防げます。
「カバレッジが 1%下がっただけで、大したことではない」PR ごとに 1%下がると、1 年で 50%になります。ラチェットは下がりません。
「CI をスキップしても、ローカルでテストした」ローカル環境は CI と異なります。だから CI があるのです。
「機能を追加したから、バンドルサイズが増えた」機能は追加するだけでなく、置き換えるか分割するべきです。
「脆弱性は開発用依存関係にある」開発用依存関係は CI で実行されます。CI にはシークレットがあります。それでもリスクです。
「関数は複雑だが、読みやすい」読みやすさは主観的だからこそ、複雑度の上限があるのです。
「デッドコードは後で必要になるかもしれない」Git が記録しています。削除してください。必要なら履歴から復元できます。

ガードレール — HALT して修正

  • 根拠を文書化せずに、リンターのルールをインラインで無効にする
  • 関連する課題を添えずに @ts-ignore または # type: ignore を使う
  • 設定ファイルでカバレッジのしきい値を下げる
  • マージのために CI をスキップまたは回避する
  • any 型がコードベース全体に広がる
  • 調査せずにバンドルサイズが増加する
  • 警告を許容可能なものとして扱う
  • 「開発用依存関係だから」という理由で監査の失敗を退ける

これらはすべて、チェックが壊れていることを意味します。コードをさらに書く前に、チェックを修正してください。

統合

相互補完:

  • godmode:test-first — テストは数あるチェックの 1 つです
  • godmode:completion-gate — 品質チェックは検証の証拠です
  • godmode:project-bootstrap — プロジェクトのセットアップ時にチェックを設定します
  • godmode:security-protocol — 依存関係の監査はセキュリティチェックです
  • godmode:performance-tuning — バンドルサイズはパフォーマンスチェックです

要点

Every quality check automated in CI. Every check passing before merge. No exceptions.

チェックを回避できるなら、いずれ回避されます。回避できないようにしてください。

コメント