المستوى المطلوب: مبتدئ. المقال مناسب لأي حد بيتعامل مع GitHub وموقع ويب، حتى لو أول مرة يسمع عن "إمكانية الوصول".
أتمتة فحص إمكانية الوصول في الـ CI: امنع كسر موقعك لذوي الإعاقة قبل الدمج
لو ضفت زرًا جديدًا بلون باهت أو صورة من غير وصف، ممكن تكسر موقعك لآلاف المستخدمين من غير ما تحس. هنا هتخلّي فحص إمكانية الوصول يشتغل تلقائيًا على كل Pull Request، فيوقف الخطأ قبل ما يوصل الإنتاج — في أقل من دقيقتين ومن غير أي تكلفة.
المشكلة باختصار
معظم الفرق بتختبر الشكل والوظيفة، وبتنسى إمكانية الوصول (Accessibility). النتيجة: مستخدم بيستعمل قارئ شاشة أو بيتنقّل بالكيبورد يلاقي الموقع مكسور بالنسبة له. حسب تقرير WebAIM Million لسنة 2024، 95.9% من أكبر مليون صفحة رئيسية فيها أخطاء WCAG واضحة، بمتوسط حوالي 57 خطأ لكل صفحة. ودي مش أرقام تجميلية؛ في الولايات المتحدة وحدها اترفعت آلاف القضايا القانونية بسبب مواقع غير متاحة.
يعني إيه إمكانية الوصول؟ مثال قبل التعريف
تخيّل مبنى مدخله سلّم بس. الشخص اللي على كرسي متحرك مش هيقدر يدخل، مش لأنه مش عايز، لكن لأن التصميم نفسه أغلق الباب في وشه. لو حطينا منحدر (ramp) جنب السلّم، الكل بيدخل: اللي ماشي على رجليه، واللي على كرسي، وحتى اللي معاه عربية أطفال.
الموقع بالظبط زي المبنى. إمكانية الوصول هي "المنحدر" الرقمي. علميًا: هي إن الموقع يشتغل صح مع التقنيات المساعدة (assistive tech) زي قارئ الشاشة (screen reader) والتنقّل بالكيبورد، مع الالتزام بمعايير WCAG 2.2 الصادرة عن W3C. أمثلة عملية: كل صورة ليها نص بديل (alt)، كل حقل إدخال ليه تسمية (label)، والتباين اللوني بين النص والخلفية كافٍ عشان ضعاف البصر يقدروا يقروا.
الحل: خلّي pa11y-ci يفحص كل Pull Request
الطريقة الشائعة إن حد يفتح الموقع بإيده مرة كل شوية ويراجع. الطريقة دي بتفشل لأنها بتعتمد على إنك تفتكر، وبتكتشف المشكلة بعد ما توصل المستخدم. البديل: أداة اسمها pa11y-ci بتفحص صفحاتك آليًا مقابل معايير WCAG، وتكسر البناء (build) لو لقت أخطاء. تحت الكابوت بتشغّل متصفح Chrome بلا واجهة، وبتستخدم محرك axe-core لاكتشاف المشاكل.
- ثبّت الأداة:
npm i -D pa11y-ci - عرّف الصفحات اللي عايز تفحصها في ملف إعداد اسمه
.pa11yci. - شغّلها داخل GitHub Actions على كل Pull Request.
{
"defaults": {
"standard": "WCAG2AA",
"timeout": 30000,
"threshold": 0
},
"urls": [
"http://localhost:3000/",
"http://localhost:3000/products",
"http://localhost:3000/checkout"
]
}هنا threshold: 0 معناها: أي خطأ واحد يكفي إن البناء يفشل. دلوقتي شغّل الفحص أوتوماتيك في خط الـ CI: