عبدالفتاح الصلوي

GrumPHP: أتمتة المهام في مشاريع PHP

كتبها : عبدالفتاح الصلوي / في رصيف : PHP

GrumPHP: أتمتة المهام في مشاريع PHP

في بيئة تطوير البرمجيات الحديثة، لم يعد اختبار الكود وتحسين جودته أمرًا اختياريًا، بل ضرورة حتمية لضمان استقرار التطبيقات وسهولة صيانتها. وبينما تتوفر العديد من الأدوات التي تساعد على تحليل الكود واختباره، يبرز 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.

روابط مفيدة

- المستودع الرسمي لـ GrumPHP 

- دليل التكوين الرسمي

- قائمة المهام المدعومة

- مستودع PHPStan

- PHP-CS-Fixer

- Psalm


خاتمة

GrumPHP ليس مجرد أداة، بل هو حارس جودة يعمل بصمت خلف الكواليس، يمنعك من ارتكاب الأخطاء قبل أن تراها. باستخدامه، يمكنك التأكد من أن كل سطر كود يتم إرساله إلى مستودع Git قد تم فحصه بدقة، مما يعزز من الثقة في المشروع، ويقلل من الأخطاء في بيئة الإنتاج. إذا كنت مطور PHP جاد في تحسين جودة كودك، فإن GrumPHP هو أحد أفضل الأدوات التي يمكنك إضافتها إلى ترسانتك البرمجية. "لا تنتظر حتى تقع المشكلة، امنعها قبل أن تبدأ — هذا هو جوهر GrumPHP."

علامات ذات صلة :