סקיל Pre-Commit
setup-pre-commit הוא סקיל לקלוד קוד שמקים אוטומטית מנגנון בדיקות שרץ לפני כל קומיט. הוא מתקין Husky, מגדיר lint-staged שמריץ Prettier על הקבצים, ומוסיף בדיקות טייפ והרצת טסטים ל-hook. כך כל קוד שנכנס לריפו עובר אוטומטית פורמט, בדיקת טיפוסים וטסטים, ובעיות נתפסות עוד לפני שהן מגיעות ל-main. הסקיל מזהה את מנהל החבילות של הפרויקט ומתאים את עצמו אליו, ומדלג בחן על שלבים שאין להם סקריפט. בפרויקטי הפיתוח שאני מוביל, שער בדיקות לפני קומיט הוא הדרך הזולה ביותר לשמור על איכות קוד. במדריך תקבלו את שלבי ההקמה, ארבעה תרחישי שימוש, וצ'קליסט לעבודה נכונה.
פקודת התקנה
npx skills add mattpocock/skills@setup-pre-commit -g -y
ההתקנה מתבצעת דרך מנהל החבילות הרשמי של הסקילים בפקודה אחת. הסקיל הוא קובץ Markdown פתוח מהמאגר של מאט פוקוק. אפשר להוריד ולבדוק את הקוד דרך הכפתורים שבראש העמוד.
מה הסקיל כולל?
הסקיל מתעד הקמה מלאה של pre-commit hook: זיהוי מנהל החבילות, התקנת Husky ו-lint-staged, הגדרת Prettier, והוספת בדיקות טייפ וטסטים שרצים אוטומטית לפני קומיט.
קוד הסקיל המלא
---
name: setup-pre-commit
description: Set up Husky pre-commit hooks with lint-staged (Prettier), type checking, and tests in the current repo. Use when user wants to add pre-commit hooks, set up Husky, configure lint-staged, or add commit-time formatting/typechecking/testing.
---
# Setup Pre-Commit Hooks
## What This Sets Up
- **Husky** pre-commit hook
- **lint-staged** running Prettier on all staged files
- **Prettier** config (if missing)
- **typecheck** and **test** scripts in the pre-commit hook
## Steps
### 1. Detect package manager
Check for `package-lock.json` (npm), `pnpm-lock.yaml` (pnpm), `yarn.lock` (yarn), `bun.lockb` (bun). Use whichever is present. Default to npm if unclear.
### 2. Install dependencies
Install as devDependencies:
```
husky lint-staged prettier
```
### 3. Initialize Husky
```bash
npx husky init
```
This creates `.husky/` dir and adds `prepare: "husky"` to package.json.
### 4. Create `.husky/pre-commit`
Write this file (no shebang needed for Husky v9+):
```
npx lint-staged
npm run typecheck
npm run test
```
**Adapt**: Replace `npm` with detected package manager. If repo has no `typecheck` or `test` script in package.json, omit those lines and tell the user.
### 5. Create `.lintstagedrc`
```json
{
"*": "prettier --ignore-unknown --write"
}
```
### 6. Create `.prettierrc` (if missing)
Only create if no Prettier config exists. Use these defaults:
```json
{
"useTabs": false,
"tabWidth": 2,
"printWidth": 80,
"singleQuote": false,
"trailingComma": "es5",
"semi": true,
"arrowParens": "always"
}
```
### 7. Verify
- [ ] `.husky/pre-commit` exists and is executable
- [ ] `.lintstagedrc` exists
- [ ] `prepare` script in package.json is `"husky"`
- [ ] `prettier` config exists
- [ ] Run `npx lint-staged` to verify it works
### 8. Commit
Stage all changed/created files and commit with message: `Add pre-commit hooks (husky + lint-staged + prettier)`
This will run through the new pre-commit hooks — a good smoke test that everything works.
## Notes
- Husky v9+ doesn't need shebangs in hook files
- `prettier --ignore-unknown` skips files Prettier can't parse (images, etc.)
- The pre-commit runs lint-staged first (fast, staged-only), then full typecheck and tests
מה זה setup-pre-commit ולמה הסקיל הזה שונה?
setup-pre-commit פותר בעיה מוכרת: קוד לא תקין שנכנס לריפו. בלי שער בדיקות, קל לעשות קומיט לקוד שלא עבר פורמט, ששובר טיפוסים, או שמכשיל טסטים, והבעיה מתגלה רק מאוחר יותר, אצל מישהו אחר או ב-CI. הסקיל מקים שער אוטומטי שתופס את זה ברגע הקומיט.
מה שמייחד אותו הוא שזו הקמה מלאה ומותאמת, לא רק עצה. הסקיל מזהה את מנהל החבילות של הפרויקט, מתקין Husky ו-lint-staged, מגדיר Prettier אם חסר, ובונה hook שמריץ פורמט, בדיקת טיפוסים וטסטים לפני כל קומיט. הוא מספיק חכם כדי לדלג בחן על שלבים שאין להם סקריפט מתאים, ולהודיע על כך, במקום לשבור את ה-hook. התוצאה היא שער בדיקות שעובד מהרגע הראשון.
ההבדל מורגש באיכות הריפו. במקום קוד לא עקבי שמצטבר, כל קומיט עובר סטנדרט. בשילוב עם סקיל diagnosing-bugs, פחות באגים בכלל מגיעים רחוק, כי הרבה מהם נתפסים כבר בשער הקומיט.
מה setup-pre-commit נותן לקלוד קוד?
הסקיל מוסיף לקלוד את היכולת להקים שער איכות אוטומטי, כך שכל קוד שנכנס לריפו עובר פורמט, בדיקת טיפוסים וטסטים ללא מאמץ ידני.
שער איכות אוטומטי
הסקיל מקים hook שרץ לפני כל קומיט ומריץ פורמט, בדיקת טיפוסים וטסטים. כך בעיות נתפסות ברגע הקומיט ולא מאוחר יותר, וכל קוד שנכנס לריפו עומד בסטנדרט, בלי שאף אחד צריך לזכור להריץ בדיקות ידנית.
זיהוי והתאמה לפרויקט
הסקיל מזהה את מנהל החבילות של הפרויקט, npm, pnpm, yarn או bun, ומתאים את הפקודות אליו. הוא גם מגדיר Prettier אם חסר. כך ההקמה עובדת נכון בכל פרויקט בלי התאמות ידניות.
דילוג חכם על מה שחסר
אם בפרויקט אין סקריפט לבדיקת טיפוסים או לטסטים, הסקיל מדלג עליו בחן ומודיע, במקום לבנות hook שבור שנכשל בכל קומיט. כך השער תמיד עובד, ומתאים בדיוק למה שקיים בפרויקט.
lint-staged יעיל
במקום להריץ פורמט על כל הקוד, הסקיל מגדיר lint-staged שמריץ Prettier רק על הקבצים שב-staging. כך הבדיקה מהירה, רצה רק על מה שהשתנה, ולא מעכבת את הקומיט שלא לצורך.
ארבע היכולות הופכות שמירה על איכות קוד מתלויה במשמעת אישית למובנית בתהליך. בעבודות שלי, שער בדיקות לפני קומיט מנע הצטברות של קוד לא עקבי ובאגים, וזה ביטוח זול במיוחד.
למי הסקיל הזה מתאים?
מובילי פיתוח וצוותים: זה הקהל המובהק. שער בדיקות אחיד מבטיח שכל מפתח מכניס קוד באותו סטנדרט. השילוב עם סקיל resolving-merge-conflicts שומר על ריפו נקי ומסודר.
מפתחי סולו: גם כשעובדים לבד, קל לשכוח להריץ פורמט או טסטים. הסקיל הופך את זה לאוטומטי, כך שהקוד נשאר נקי בלי לזכור.
פרויקטים עם כמה תורמים: כשאנשים שונים נוגעים בקוד, שער בדיקות מונע אי עקביות ומבטיח שכל תרומה עומדת בסטנדרט. זה מוריד עומס מסקירות הקוד.
צוותים שעובדים עם סוכני AI: כשסוכן מבצע קומיטים, שער בדיקות אוטומטי תופס בעיות לפני שהן נכנסות. גם בעבודות אוטומציה שלי, בדיקות אוטומטיות הן חלק ממערכת אמינה.
מפתחים מתחילים: השער מלמד הרגלים טובים, פורמט עקבי ובדיקות, מההתחלה, ומונע טעויות נפוצות שמגיעות לריפו.
מי שפחות יתאים: סקריפט חד-פעמי קטן בלי טסטים או טיפוסים לא זקוק לשער מלא. הסקיל מבריק דווקא בפרויקטים שאמורים לחיות ולהתפתח, שבהם איכות עקבית חשובה.
איך setup-pre-commit עזר לי בפרויקטים אמיתיים
קוד עקבי בלי משמעת ידנית
בפרויקט, קוד נכנס בפורמטים שונים כי לא כולם הריצו Prettier. הסקיל הקים lint-staged שמריץ פורמט אוטומטית בכל קומיט. מאותו רגע כל הקוד היה עקבי, בלי שאף אחד צריך לזכור, וזה הוריד רעש מסקירות הקוד.
שבירת טיפוסים נתפסה מוקדם
שגיאות טיפוסים היו מגיעות ל-CI ומעכבות. הוספת בדיקת טיפוסים ל-hook תפסה אותן ברגע הקומיט, אצל המפתח עצמו. הבעיות נפתרו מיד במקום במחזור ה-CI, וזה קיצר את לולאת המשוב משמעותית.
טסטים שרצו אוטומטית לפני קומיט
מפתחים שכחו להריץ טסטים, ולפעמים קומיט שבר משהו. הסקיל הוסיף הרצת טסטים ל-hook, כך שקוד ששובר טסט פשוט לא עובר קומיט. רשת הביטחון הזאת מנעה כניסה של רגרסיות לריפו.
התאמה מהירה לפרויקט קיים
פרויקט השתמש ב-pnpm ולא היה לו סקריפט typecheck. הסקיל זיהה את מנהל החבילות, התאים את הפקודות, ודילג בחן על שלב בדיקת הטיפוסים תוך הודעה. ההקמה עבדה מהרגע הראשון בלי תיקונים ידניים.
ארבעת המקרים מראים שהסקיל הופך שמירה על איכות קוד ממשימה שתלויה בזיכרון למובנית בתהליך. כשהבדיקות רצות אוטומטית לפני קומיט, הריפו נשאר נקי ועקבי, ובעיות נתפסות מוקדם ובזול.
סיכום
סקיל setup-pre-commit הוא כלי מצוין לכל פרויקט שאמור לחיות לאורך זמן. הוא מקים אוטומטית שער בדיקות לפני קומיט, עם פורמט, בדיקת טיפוסים וטסטים, מותאם למנהל החבילות של הפרויקט, כך שאיכות הקוד נשמרת בלי מאמץ ידני.
אם אתם מתחילים, בקשו מקלוד להקים pre-commit hook עם הסקיל. תוך דקות יהיה לכם שער שמריץ פורמט ובדיקות בכל קומיט. תרגישו את ההבדל באיכות ובעקביות של הריפו כבר מהקומיט הראשון.
בפוסטים הבאים אמשיך לסקור סקילים שמשדרגים את איכות הפיתוח. האתר של דביר נעמן מרכז את כל הכלים, השיטות והליווי שאני מציע לעסקים שרוצים לבנות תוכנה איכותית עם בינה מלאכותית.
שיתוף הסקיל
שאלות ותשובות
מה זה בעצם הסקיל setup-pre-commit?
זה סקיל לקלוד קוד שמקים אוטומטית מנגנון בדיקות שרץ לפני כל קומיט. הוא מתקין Husky, מגדיר lint-staged עם Prettier, ומוסיף בדיקת טיפוסים והרצת טסטים. כך כל קוד שנכנס לריפו עובר פורמט ובדיקות אוטומטית, ובעיות נתפסות עוד לפני שהן מגיעות לענף הראשי.
מה זה pre-commit hook?
זה סקריפט שרץ אוטומטית לפני שקומיט מתבצע בגיט, ויכול לחסום אותו אם משהו לא תקין. הסקיל משתמש בו כדי להריץ פורמט, בדיקת טיפוסים וטסטים. כך הבדיקות קורות ברגע הקומיט, אצל המפתח, ולא מאוחר יותר ב-CI או אצל מישהו אחר.
איך מתקינים את הסקיל בקלוד קוד?
בפקודה אחת דרך מנהל החבילות הרשמי של הסקילים, כפי שמופיע בקופסת ההתקנה למעלה. הסקיל הוא קובץ Markdown פתוח מהמאגר של מאט פוקוק. אחרי ההתקנה בקשו מקלוד להקים pre-commit hook, והוא יתקין ויגדיר את הכול בפרויקט.
האם הסקיל יעבוד עם מנהל החבילות שלי?
כן. הסקיל מזהה את מנהל החבילות לפי קובץ ה-lock, npm, pnpm, yarn או bun, ומתאים את הפקודות אליו. כך ההקמה עובדת נכון בכל פרויקט, בלי שתצטרכו להתאים ידנית. אם לא ברור, הוא נופל בחזרה ל-npm כברירת מחדל.
מה קורה אם אין לי סקריפט טסטים או טיפוסים?
הסקיל מטפל בזה בחוכמה. אם בפרויקט אין סקריפט לבדיקת טיפוסים או לטסטים, הוא מדלג עליו ומודיע לכם, במקום לבנות hook שייכשל בכל קומיט. כך השער תמיד עובד, ומורכב בדיוק מהשלבים שרלוונטיים לפרויקט שלכם.
האם זה לא יאט את הקומיטים שלי?
הסקיל מגדיר lint-staged, שמריץ את הפורמט רק על הקבצים שב-staging ולא על כל הקוד. כך הבדיקה מהירה ורצה רק על מה שהשתנה. בדיקות טיפוסים וטסטים אכן לוקחות זמן, אבל זה זמן שחוסך הרבה יותר בהמשך, כי בעיות נתפסות מיד.
האם אפשר לעקוף את ה-hook כשצריך?
כן. במקרים חריגים אפשר לעקוף hook עם דגל מתאים בפקודת הקומיט. עם זאת, הסקיל מקים את השער כדי שיעבוד כברירת מחדל, כי הערך שלו הוא דווקא בכך שהוא רץ תמיד. עקיפה כדאית רק במצבים מיוחדים ולא כהרגל קבוע.
האם הסקיל מתאים גם לפרויקטים קיימים?
בהחלט. הוא עובד מצוין על פרויקט קיים: מזהה את מנהל החבילות, מתקין את הכלים, ומקים את ה-hook בלי לשבור את מה שקיים. זו דרך מהירה להוסיף שער איכות לפרויקט שכבר רץ, ולשפר את העקביות שלו מכאן והלאה.