mcpField
P
pre-push

pre-push

github.com/morphet81テスト・品質083 回インストール24 週間前に更新
リポジトリ

pre-push について

pre-pushは、コードをリモートにプッシュする前にプロジェクトのチェックを実行するスキルです。npmのpre-pushスクリプトがあればそれを使い、なければ言語に応じたlint、テスト、ビルドを検出して結果を報告します。

主な機能

  1. 01既存のnpm pre-pushスクリプトを実行
  2. 02プロジェクトの言語とチェックを検出
  3. 03独立したチェックを並列実行
  4. 04コマンドと成否を報告
  5. 05不足しているツールや依存関係を特定

活用シーン

  1. 01リモートへのプッシュ前にコードを確認
  2. 02利用可能なlintとテストを実行
  3. 03プッシュ前にビルド状態を確認
  4. 04不足するチェックツールや依存関係を特定

インストール

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

$npx skills add https://github.com/morphet81/cheat-sheets --skill pre-push

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

詳細

リモートへのプッシュ前に、コード品質を確保するためのチェックを実行します。

使い方:

  • /pre-push - 現在のプロジェクトですべてのプッシュ前チェックを実行します

手順:

  1. npm のプッシュ前スクリプトを確認します:

    • 現在のディレクトリに package.json があるか確認します
    • 見つかった場合は、scripts セクションに pre-push スクリプトがあるか確認します
    • スクリプトがある場合は、npm run pre-push を実行して結果を報告します
    • 成功した場合は、ユーザーに知らせてここで終了します
  2. プッシュ前スクリプトがない場合は、プロジェクトを自動判別し、チェックを並行して実行します:

    a. プロジェクトの種類を特定します:

    • package.json を確認します(Node.js/JavaScript/TypeScript プロジェクト)
    • pyproject.toml、setup.py、requirements.txt を確認します(Python プロジェクト)
    • Cargo.toml を確認します(Rust プロジェクト)
    • go.mod を確認します(Go プロジェクト)
    • その他の言語固有のファイルを確認します

    b. プロジェクトの種類に応じて、利用可能なチェック(リンティング、テスト、ビルド)を検出します。 次に、Task ツール(subagent_type: general-purpose)を使い、run_in_background: true を指定して、依存関係のないチェックを並行して実行します:

    • 依存関係のないチェックごとにエージェントを 1 つ起動します(例:リンティング用エージェント、テスト用エージェント、ビルド用エージェント)
    • 相互に依存しないチェックは同時に実行します。通常、リンティングとテストは独立していますが、ビルドは型チェックに依存する場合があります

    c. リンティングチェック:

    • Node.js/JavaScript/TypeScript:

      • ESLint を確認します:package.json のスクリプトに eslint があるか、.eslintrc* ファイルがあるかを確認します
      • Prettier を確認します:package.json のスクリプトに prettier があるか、.prettierrc* ファイルがあるかを確認します
      • TypeScript を確認します:package.json のスクリプトに tsc があるか、tsconfig.json ファイルがあるかを確認します
      • 実行します:npm run lint または npx eslint .、npm run type-check または npx tsc --noEmit
    • Python:

      • pylint、flake8、black、mypy、ruff を確認します
      • 利用可能なリンターを実行します(例:pylint src/、flake8 .、black --check .、mypy .)
    • Rust:

      • cargo fmt --check と cargo clippy を実行します
    • Go:

      • go fmt ./... と golint ./... または go vet ./... を実行します

    d. テストチェック:

    • Node.js: package.json にテストスクリプトがあるか確認します

      • npm test または npm run test:ci(利用可能な場合)を実行します
    • Python:

      • pytest、unittest、nose2 を確認します
      • pytest、python -m pytest、または python -m unittest discover を実行します
    • Rust:

      • cargo test を実行します
    • Go:

      • go test ./... を実行します

    e. ビルドチェック:

    • 該当する場合は、コンパイルエラーがないことを確認するため、プロジェクトのビルドを試みます
    • Node.js: npm run build(スクリプトがある場合)
    • Rust: cargo build
    • Go: go build ./...
  3. 結果を報告します:

    • 並行して実行したすべてのエージェントの完了を待ち、結果を集約します
    • 実施したすべてのチェックを明確に要約します
    • 各チェックの合格/不合格を報告します
    • チェックに失敗した場合は、エラーを示して修正方法を提案します
    • 透明性を確保するため、実行したコマンドを記載します
    • すべてのチェックに合格した場合は、コードをプッシュできる状態であることを確認します
  4. 例外的なケースへの対応:

    • テストやリンティングツールが検出されない場合は、ユーザーに警告し、チェックなしで続行するか尋ねます
    • 依存関係が不足していてコマンドが失敗した場合は、インストールコマンドを提案します
    • モノレポまたはワークスペースの場合は、検出して適切に対応します

出力例:

## Pre-Push Checks

### Linting
ESLint passed
Prettier check passed
TypeScript compilation passed

### Testing
All tests passed (24 tests, 0 failures)

### Build
Build successful

---

All pre-push checks passed! Code is ready to push.

Commands run:
- npm run lint
- npm test
- npm run build

失敗した場合:

## Pre-Push Checks

### Linting
ESLint failed

Error in src/components/Button.tsx:
  15:7  error  'onClick' is missing in props validation  react/prop-types

### Testing
All tests passed

---

Pre-push checks failed. Please fix the issues above before pushing.

コメント