リモートへの push 前に品質チェック(build, lint, test, audit 等)を実行し、安全にプッシュする。プロジェクトのツールチェインを自動検出してチェックを行う。
git status --short
git branch -vv --contains HEAD
git log --oneline @{upstream}..HEAD 2>/dev/null || git log --oneline -5
以下を確認する:
AskUserQuestion でユーザーに報告し、先にコミットするか stash するか確認する。push は行わない。AskUserQuestionプロジェクトルートのファイル構成からツールチェインを自動検出し、 利用可能なチェックを順に実行する。
以下の優先順で検出する。該当しないものはスキップする。
Node.js プロジェクト(package.json が存在):
パッケージマネージャーの検出順: bun.lock → pnpm-lock.yaml → yarn.lock → package-lock.json。
該当するロックファイルのマネージャーを使用する。いずれもなければ npm を使用する。
| チェック | 条件 | コマンド |
|---|---|---|
| build | scripts.build が定義されている | <pm> run build |
| lint | scripts.lint が定義されている | <pm> run lint |
| type-check | scripts.typecheck または scripts.type-check が定義されている | <pm> run typecheck or <pm> run type-check |
| test | scripts.test が定義されている | <pm> run test |
| audit | 常に実行 | <pm> audit (pnpm の場合は pnpm audit --prod) |
Python プロジェクト(pyproject.toml / setup.py / setup.cfg が存在):
| チェック | 条件 | コマンド |
|---|---|---|
| lint | ruff がインストール済み | ruff check . |
| type-check | mypy がインストール済み | mypy . |
| test | pytest がインストール済み | pytest |
Rust プロジェクト(Cargo.toml が存在):
| チェック | 条件 | コマンド |
|---|---|---|
| build | 常に実行 | cargo build |
| lint | clippy がインストール済み | cargo clippy -- -D warnings |
| test | 常に実行 | cargo test |
| audit | cargo-audit がインストール済み | cargo audit |
Go プロジェクト(go.mod が存在):
| チェック | 条件 | コマンド |
|---|---|---|
| build | 常に実行 | go build ./... |
| vet | 常に実行 | go vet ./... |
| lint | golangci-lint がインストール済み | golangci-lint run |
| test | 常に実行 | go test ./... |
Ansible プロジェクト(ansible.cfg または playbook.yml が存在):
| チェック | 条件 | コマンド |
|---|---|---|
| lint | ansible-lint がインストール済み | ansible-lint |
| syntax-check | 常に実行 | ansible-playbook --syntax-check <playbook> |
Docker プロジェクト(Dockerfile または compose.yml / docker-compose.yml が存在):
| チェック | 条件 | コマンド |
|---|---|---|
| lint | hadolint がインストール済み | hadolint Dockerfile |
| build | Dockerfile が存在 | docker build --check . |
| compose-config | compose.yml / docker-compose.yml が存在 | docker compose config --quiet |
Makefile / Taskfile(Makefile / Taskfile.yml が存在):
lint, check, test, build ターゲットが定義されていれば実行する。
AskUserQuestion で承認を得てから実行する。すべてのチェックに通過したら(またはチェック不要の場合):
AskUserQuestion で最終確認を行うgit push <remote> <branch>
git push -u <remote> <branch>
--force や --force-with-lease はユーザーが明示的に要求した場合のみ使用する。各ステップの結果を以下の形式で表示する:
## Push 前チェック
**ブランチ:** feature/xxx → origin/feature/xxx
**コミット数:** 3 件
### push 対象コミット
- abcdef1 feat(auth): ログイン機能を追加
- abcdef2 fix(auth): バリデーションの修正
- abcdef3 test(auth): ログインのテストを追加
### 品質チェック
- ✓ build
- ✓ lint
- ✗ test(失敗)