pre-push について
pre-pushは、コードをリモートにプッシュする前にプロジェクトのチェックを実行するスキルです。npmのpre-pushスクリプトがあればそれを使い、なければ言語に応じたlint、テスト、ビルドを検出して結果を報告します。
主な機能
- 01既存のnpm pre-pushスクリプトを実行
- 02プロジェクトの言語とチェックを検出
- 03独立したチェックを並列実行
- 04コマンドと成否を報告
- 05不足しているツールや依存関係を特定
活用シーン
- 01リモートへのプッシュ前にコードを確認
- 02利用可能なlintとテストを実行
- 03プッシュ前にビルド状態を確認
- 04不足するチェックツールや依存関係を特定
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ morphet81/ cheat-sheets --skill pre-pushインストール後、Claude Code で/pre-pushを入力して読み込まれたか確認します。
詳細
リモートへのプッシュ前に、コード品質を確保するためのチェックを実行します。
使い方:
/pre-push- 現在のプロジェクトですべてのプッシュ前チェックを実行します
手順:
-
npm のプッシュ前スクリプトを確認します:
- 現在のディレクトリに
package.jsonがあるか確認します - 見つかった場合は、
scriptsセクションにpre-pushスクリプトがあるか確認します - スクリプトがある場合は、
npm run pre-pushを実行して結果を報告します - 成功した場合は、ユーザーに知らせてここで終了します
- 現在のディレクトリに
-
プッシュ前スクリプトがない場合は、プロジェクトを自動判別し、チェックを並行して実行します:
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
- ESLint を確認します:
-
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 ./...
-
結果を報告します:
- 並行して実行したすべてのエージェントの完了を待ち、結果を集約します
- 実施したすべてのチェックを明確に要約します
- 各チェックの合格/不合格を報告します
- チェックに失敗した場合は、エラーを示して修正方法を提案します
- 透明性を確保するため、実行したコマンドを記載します
- すべてのチェックに合格した場合は、コードをプッシュできる状態であることを確認します
-
例外的なケースへの対応:
- テストやリンティングツールが検出されない場合は、ユーザーに警告し、チェックなしで続行するか尋ねます
- 依存関係が不足していてコマンドが失敗した場合は、インストールコマンドを提案します
- モノレポまたはワークスペースの場合は、検出して適切に対応します
出力例:
## 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.
コメント
Markdown 対応