
في بيئة تطوير البرمجيات الحديثة، لم يعد اختبار الكود وتحسين جودته أمرًا اختياريًا، بل ضرورة حتمية لضمان
استقرار التطبيقات وسهولة صيانتها. وبينما تتوفر العديد من الأدوات التي تساعد على تحليل الكود واختباره، يبرز
GrumPHP كأداة فريدة من نوعها، تعمل كحارس شخصي لكودك، تمنعك من ارتكاب الأخطاء قبل أن تصل إلى مستودع
Git.
في هذا المقال المتكامل، سنستعرض كل ما تحتاج معرفته عن GrumPHP: ما هو، كيف يعمل، كيفية تثبيته،
تكوينه، دمجه مع أدوات أخرى، وأفضل الممارسات لاستخدامه. كما سنقارن بينه وبين أدوات مشابهة، ونقدم دليلًا
عمليًا لتحسين جودة الكود باستخدامه.
ما هو GrumPHP؟
GrumPHP هو أداة مفتوحة المصدر تُستخدم لتشغيل مجموعة من الفحوصات على الكود البرمجي قبل تنفيذ عملية الـ commit
في Git. يعمل GrumPHP كـ "hook" يمنعك من إرسال كود غير مطابق للمعايير أو يحتوي على أخطاء إلى مستودع Git، مما
يعزز من جودة الكود ويمنع المشاكل قبل حدوثها.
لماذا سُمي GrumPHP بهذا الاسم؟
الاسم مستوحى من شخصية
"Grumpy" في القصص الخيالية، وهو شخص دائم التذمر. كذلك GrumPHP "يتذمر" عندما تحاول إرسال كود غير نظيف، ويمنعك
من ذلك حتى تصلحه!
مميزات GrumPHP
✅ يمنع إرسال الكود غير النظيف إلى Git
✅ يدعم العديد من أدوات تحليل الكود مثل PHPStan، PHP-CS-Fixer،
PHPUnit
✅ قابل للتخصيص بدرجة عالية
✅ سهل التثبيت والتكوين
✅ يدعم Git Hooks تلقائيًا
كيفية تثبيت GrumPHP
1. باستخدام Composer
composer require --dev phpro/grumphp
2. إعداد ملف التكوين
قم بإنشاء ملف grumphp.yml في جذر المشروع:
parameters:
git_hook_variables:
EXEC_GRUMPHP_COMMAND: 'vendor/bin/grumphp git:pre-commit'
tasks:
phpstan:
level: max
phpcsfixer:
config: '.php-cs-fixer.dist.php'
phpunit: ~
3. تثبيت Git Hook
vendor/bin/grumphp git:init
الآن، في كل مرة تحاول فيها تنفيذ git commit، سيقوم GrumPHP بتشغيل المهام المحددة في ملف التكوين.
المهام (Tasks) التي يدعمها GrumPHP
GrumPHP يدعم مجموعة واسعة من المهام التي يمكن تشغيلها قبل تنفيذ الـ commit، منها:
✅ PHPStan
✅
PHP-CS-Fixer
✅ PHP_CodeSniffer
✅ PHPUnit
✅ Psalm
✅ Composer
✅ YAML Lint
✅ JSON Lint
✅
ESLint (لمشاريع JavaScript)
✅ Twig Lint
مثال عملي: تكوين GrumPHP مع Laravel
ملف grumphp.yml:
parameters:
tasks:
phpstan:
level: 8
configuration: phpstan.neon
phpcsfixer:
config: '.php-cs-fixer.dist.php'
phpunit:
config_file: phpunit.xml
composer:
file: composer.json
خطوات التنفيذ:
تأكد من وجود الملفات phpstan.neon, .php-cs-fixer.dist.php, و phpunit.xml.
نفذ vendor/bin/grumphp git:init.
قم بعمل git commit، ولاحظ كيف يمنعك GrumPHP من إرسال الكود إذا كان يحتوي على أخطاء.
فوائد استخدام GrumPHP
🛡️ يمنع الأخطاء قبل حدوثها
🧼 يحافظ على نظافة الكود
🤝 يعزز التعاون بين أعضاء الفريق
⚙️ يتكامل
بسهولة مع أدوات CI مثل GitHub Actions، GitLab CI، وJenkins
🧠 يساعد المطورين على الالتزام بمعايير
الكود
مقارنة GrumPHP مع أدوات أخرى
الأداة |
الوظيفة الأساسية |
التكامل مع Git |
دعم المهام المتعددة |
سهولة التكوين |
GrumPHP |
Git pre-commit hook |
✅ |
✅ |
✅ |
Husky (JS) |
Git hooks لـ JavaScript |
✅ |
✅ |
متوسط |
CaptainHook |
Git hooks عام |
✅ |
✅ |
متوسط |
Pre-commit (Python) |
Git hooks متعددة اللغات |
✅ |
✅ |
صعب قليلاً |
أفضل الممارسات لاستخدام GrumPHP
🔁 قم بتحديث المهام بشكل دوري
🧪 اختبر التكوين على فرع منفصل قبل
دمجه
🧩 استخدم إضافات مخصصة عند الحاجة
🧼 حافظ على بساطة ملف التكوين
🧭 دمج GrumPHP مع أدوات CI
لمزيد من الحماية
نصائح متقدمة
تجاهل ملفات معينة
parameters:
ignore_unstaged_changes: true
tasks:
phpstan:
ignore_patterns:
- tests/*
تشغيل GrumPHP يدويًا
vendor/bin/grumphp run
التحقق من التكوين
vendor/bin/grumphp configure
تكامل GrumPHP مع أدوات أخرى
- مع PHPStan
GrumPHP يتكامل بسلاسة مع PHPStan
لتحليل
الأنواع واكتشاف الأخطاء المنطقية.
- مع PHP-CS-Fixer
يحافظ على تنسيق الكود باستخدام PHP-CS-Fixer.
- مع PHPUnit
يشغل اختبارات
الوحدة
تلقائيًا قبل تنفيذ commit.
- مع Composer
يتحقق من صحة ملفات composer.json و composer.lock.
الأسئلة الشائعة (FAQ)
1. هل يمكن استخدام GrumPHP في المشاريع القديمة؟
نعم، يمكن تهيئته تدريجيًا، وتخصيص المهام لتناسب
المشروع.
2. هل يعمل GrumPHP على أنظمة Windows؟
نعم، لكنه يعمل بشكل أفضل على أنظمة Linux وMac. تأكد
من
إعداد Git Hooks بشكل صحيح.
3. هل يمكن تجاوز GrumPHP مؤقتًا؟
نعم، باستخدام الخيار --no-verify:
git commit -m "رسالة" --no-verify
4. كيف يمكنني إضافة مهمة مخصصة؟
يمكنك استخدام script لتشغيل أي أمر:
tasks:
script:
scripts:
- './scripts/check-something.sh'
5. هل يمكن استخدام GrumPHP مع أدوات JavaScript؟
نعم، يمكن تشغيل ESLint وPrettier وغيرها من الأدوات
عبر
مهام script أو npm-script.
روابط مفيدة
- Psalm
خاتمة
GrumPHP ليس مجرد أداة، بل هو حارس جودة يعمل بصمت خلف الكواليس، يمنعك من ارتكاب الأخطاء قبل أن تراها. باستخدامه، يمكنك التأكد من أن كل سطر كود يتم إرساله إلى مستودع Git قد تم فحصه بدقة، مما يعزز من الثقة في المشروع، ويقلل من الأخطاء في بيئة الإنتاج. إذا كنت مطور PHP جاد في تحسين جودة كودك، فإن GrumPHP هو أحد أفضل الأدوات التي يمكنك إضافتها إلى ترسانتك البرمجية. "لا تنتظر حتى تقع المشكلة، امنعها قبل أن تبدأ — هذا هو جوهر GrumPHP."