Codexによるread-onlyローカルレビューを実行する。Triggers on: '/codex-review', 'Codexでレビューして', 'クロスモデルレビューして'
quality-check
品質ゲート(lint・型チェック・テスト)を実行し、必須ゲート通過を機械可読な結果で返す。Triggers on: '/quality-check', '品質チェック', 'QCして', 'quality gate'
含まれるファイル(1)
- SKILL.md10.3 KB
SKILL.md(原文)
インストールする前に、エージェントに与えられる指示の中身を確認できます。
品質ゲートチェック
プロジェクトの 自動修正 → lint → 型チェック → テスト を順に実行し、必須ゲート(Lint・型チェック・テストのパス)を通します。結果は人間向けサマリーと、呼び出し元が判定に使える機械可読な形式の両方で返します。
必須ゲートにはこのほか「セルフレビュー」「CI」も含まれますが、本スキルはそのうち自動実行できる Lint / 型チェック / テストを担います。
手順
<!-- 正本: docs/plugin-path-conventions.md -->スクリプトの実行形(重要・本スキルが実行する全スクリプト共通): 本スキルはプラグインとして配布されるため、実行するスクリプト(
quality-check-runner)はユーザーのプロジェクトroot ではなく、プラグイン配下にある。スクリプトを実行する際は必ず PATH 上のランチャー経由でclaude-harness-run <スクリプト名>の形式(パス・バージョン・引用符を付けない。この形だけがBash(claude-harness-run:*)の1行で allowlist できる)を用い、相対パスscripts/<スクリプト名>.shでは呼び出さないこと。claude-harness-run: command not foundになった場合のみbash "<プラグインルート>/scripts/<スクリプト名>.sh"にフォールバックする(パスは引用符で囲む。プラグインルートはスキル起動時の「Base directory for this skill」から解決した絶対パス。${CLAUDE_PLUGIN_ROOT}は表記上のプレースホルダであり環境変数ではない)。フォールバックした場合はユーザーにランチャー導入を案内すること。
単独コマンドとして実行する(重要・全スクリプト共通): 各スクリプトは上記の形のまま、シェル変数へ代入せず(
RESULT=$(…)としない)、同じ Bash 呼び出しに後続コマンドを繋げない(; echo "$RESULT"やjq … <<<"$RESULT"を続けない)こと。ローカル変数を展開する後続コマンドがあると、permission の静的解析が「解析不能」と判定して allowlist 到達前に拒否され、headless 実行が止まる(実測済み)。stdout の JSON と exit code は Bash ツールの実行結果からそのまま読む。
1. プロジェクト設定の確認(コマンド特定)
CLAUDE.md および package.json 等から、以下のコマンドを特定する(意味理解が必要なため LLM が行う):
- auto-fix 系コマンド(0個以上): lint --fix / format / organize-imports など、機械的に直せる範囲を直すコマンド
- リントコマンド(チェック用)
- 型チェックコマンド
- テストコマンド
渡せるコマンドの形(重要): 手順2のスクリプトはコマンドをシェルに渡さず直接実行する(Issue #223。Bash(claude-harness-run:*) の allow が、ランチャーへ直接渡す文字列で settings.json の deny を迂回する経路にならないようにするため)。したがって:
- シェル構文を含めない(
;&&|||>$(…)`クォート グロブ)。CLAUDE.md にnpm run lint && npm run lint:cssのように書かれていてもそのまま渡さない。プロジェクト側の1コマンド(package.jsonの scripts / Makefile のターゲット)に該当するものがあればそれを渡し、無ければそのゲートは省略して未実行として報告する(繋げるために自分でシェル構文を組み立てない) - 実行できるのは同梱 allowlist(
scripts/config/command-allowlist.txt)に載っている実行系だけ。npm run …/pytest/cargo testなどは通り、rm/curl/bashは通らない。bundle exec/uv run/python3 -m/npx --noは実行対象も一覧に載っている必要がある(bundle exec rspecは可、bundle exec rm -rf /は不可)。cargo run/go run/node <ファイル>/cargo installのように呼び出し側が実行対象を指名する形も通らない - 環境変数が要る場合は
claude-harness-run --env KEY=VALUE …で渡す(KEY=V cmdの前置形は使えない)
契約に反するコマンドを渡すと、手順2はどのゲートも実行せずに exit 4 で拒否し、理由と書き直し方を stderr に出す。
該当するコマンドが存在しないものは省略する(手順2のスクリプトが「スキップ」として扱い、失敗とはしない)。ただし lint / 型チェック / テストのいずれも特定できなかった場合、手順2は result: "skip"(exit 3)を返す。pass に読み替えず、未検証として報告する(手順2・手順3)。
2. quality-check-runner.sh の実行
自動修正の事前適用 → lint → 型チェック → テストの順序実行、exit code に基づく gates.*.status 判定、機械可読 JSON の構築は、決定的な処理として scripts/quality-check-runner.sh に切り出されている。
claude-harness-run quality-check-runner \
--auto-fix "<auto-fixコマンド1>" \
--auto-fix "<auto-fixコマンド2>" \
--lint "<リントコマンド>" \
--typecheck "<型チェックコマンド>" \
--test "<テストコマンド>"
- 手順1で特定できなかったコマンドは、対応する
--auto-fix/--lint/--typecheck/--testフラグごと省略する(0個以上の--auto-fixを検出順に指定。--lint/--typecheck/--testは1回のみ指定可) - 各コマンドの生出力(lintエラー箇所・型エラー内容・失敗テストの詳細)は stderr に転記される。手順4の失敗分析はこの stderr 出力を使う
実行結果の解釈(品質結果と実行エラーを混同しない): 品質判定に使ってよいのは stdout が妥当な JSON としてパースできた場合だけ。次の順で判定する:
- stdout が空、または JSON としてパースできない → 実行エラーとして扱う(品質 fail ではない)。stderr のメッセージをそのまま報告し、手順3以降に進まず中断する。原因は主に次の2系統:
- ランチャー段階の失敗(
quality-check-runnerが起動される前に終了。exit69= プラグインルート/実行系を解決できない、66= target が見つからない、64= 引数不正、command not found= ランチャー未導入)。この場合は上記注記のフォールバック形を試し、ランチャー導入をユーザーに案内する - runner 段階の失敗(exit
2= jq 不在、exit1+ 空 stdout = CLI引数不正、exit4= コマンドの形が契約に反する〈シェル構文を含む/allowlist に無い実行系〉) - exit
4の場合は品質 fail ではない。stderr の指示に従い、手順1へ戻ってそのプロジェクトの1コマンドを特定し直して再実行する。書き直せない場合はそのゲートを省略した実行に切り替え、省略した事実を手順3で報告する(シェル構文を自分で組み立て直したり、bash -c等の別経路で実行して回避したりしない——それは塞いだ迂回路を再び開くことになる)
- ランチャー段階の失敗(
- stdout が妥当な JSON → 品質結果として解釈する。exit code は
resultがpassなら 0、failなら 1、skipなら 3- JSON の
resultと exit code が食い違う場合は実行エラー扱いとし、暗黙に pass へ倒さない result: "skip"(exit 3)はゲートが1つも実行されなかった状態。品質 fail ではないが、passにも読み替えない。手順1でコマンドを取りこぼしていたなら特定し直して再実行し、それでもskipなら未検証(⊘ SKIP)として手順3で報告する(総合判定をPASSにしない)
- JSON の
出力 JSON のフィールド定義と件数抽出の仕様の正本は、プラグイン配下の scripts/specs/quality-check-runner.md(ここには複製しない)。**cwd 起点の相対パス scripts/specs/quality-check-runner.md では導入先プロジェクトの同名ファイルを誤って参照しうるため、Read する場合はスキル起動時の「Base directory for this skill」を起点に <base>/../../scripts/specs/quality-check-runner.md として解決すること。
3. 結果サマリー
手順2で得た stdout の JSON({result, auto_fix, gates})を、機械可読な結果として最後にそのまま出力する(呼び出し元のスキル/エージェントが判定に使う)。result が "skip" の場合もそのまま出力し、"pass" に書き換えない。
あわせて gates.* の内容から人間向けサマリー(✅ パス / ❌ 失敗 / ⊘ スキップ)を組み立てて提示する:
## 品質ゲートチェック結果
### 自動修正 (適用された場合)
- {auto_fix.summary}
| チェック | 結果 | 詳細 |
|---------|------|------|
| リント | ✅/❌/⊘ | errors, warnings |
| 型チェック | ✅/❌/⊘ | errors |
| テスト | ✅/❌/⊘ | passed/failed/skipped |
### 総合判定: ✅ PASS / ❌ FAIL / ⊘ SKIP(ゲート未実行)
4. 失敗時の対応
gates.*.status が fail のゲートがある場合:
- スクリプト実行時に stderr へ転記された生出力(
--- <gate>: <cmd> ---区切り)からエラー内容を分析 - 修正方法を提案
- ユーザーの指示に応じて修正を実施し、手順2から再実行
自律実行コンテキスト(feature-implementer などのサブエージェント呼び出し)では、呼び出し元が機械可読な結果を見て修正ループを管理する。
レビュー
まだレビューはありません。使ってみた感想をお寄せください。
同じリポジトリのスキル
概要と使いどころ
調査(read-only)または雑務(workspace-write)をCodexへ委譲し、結論をJSONで受け取る。Triggers on: '/codex-task', 'Codexで調べて', 'Codexにやらせて', 'Codexへ委譲'
Conventional Commits形式でコミットする。Triggers on: '/commit', 'コミットして', 'commit changes'
恒常的な設計決定を ADR として記録する(退役する機能仕様から ADR 昇格の要否を判定するモードを併せ持つ)。定常フローの必須ステップではなく、必要時に呼ぶ。Triggers on: '/create-adr', 'ADRを書いて', '設計判断を記録', 'ADR昇格を判定'
仕様(チケットの完了条件・受入基準)からE2Eテストを実装する(非対話)。Triggers on: '/create-e2e', 'E2Eテストを書いて', 'E2Eテストを追加して'
機能仕様ドキュメントから要件チケットを作成する、または親要件チケットを実装チケット群に分解する。Triggers on: '/create-ticket', 'チケットを作成', 'Issueを作って', 'create ticket', '実装チケットに分解'