eslint-plugin-jsx-a11y: React Uygulamalarında Erişilebilirliği Garanti Altına Almak
Günümüz web dünyasında kullanıcı deneyimi her şeyden önemli. Ancak bu deneyimin sadece belirli bir kesim için değil, herkes için erişilebilir olması kritik bir gereklilik. React ve JSX ile geliştirilen modern web uygulamaları, sundukları dinamizmle birlikte erişilebilirlik konusunda bazı zorlukları da beraberinde getirebilir. İşte tam da bu noktada eslint-plugin-jsx-a11y devreye girerek, geliştiricilerin erişilebilirlik standartlarına uygun kod yazmalarına yardımcı olan güçlü bir araç haline geliyor.
eslint-plugin-jsx-a11y Nedir ve Neden Önemlidir?
Web erişilebilirliği, web sitelerinin ve uygulamalarının engelli bireyler de dahil olmak üzere herkes tarafından kolayca kullanılabilmesini ifade eder. Bu, görme engelliler için ekran okuyucular, motor engelliler için klavye navigasyonu veya işitme engelliler için altyazılar gibi çeşitli adaptasyonları içerir. eslint-plugin-jsx-a11y, JavaScript linter’ı ESLint için özel olarak tasarlanmış bir eklentidir ve React veya benzeri JSX tabanlı projelerde erişilebilirlik (a11y) kurallarını otomatik olarak denetler.
Neden Erişilebilirlik Günümüzde Bu Kadar Önemli?
Erişilebilirlik, sadece yasal bir zorunluluk olmanın ötesinde (örneğin WCAG standartları), etik bir sorumluluk ve iş stratejisinin ayrılmaz bir parçasıdır. Erişilebilir bir web sitesi daha geniş bir kitleye ulaşır, kullanıcı memnuniyetini artırır ve hatta arama motoru optimizasyonuna (SEO) olumlu katkı sağlar. Engelli bireylerin internet kullanım oranları arttıkça, bu konuya verilen önem de katlanarak artmaktadır.
ESLint ve Plugin Mimarisi
ESLint, kodunuzdaki hataları ve stil tutarsızlıklarını belirlemek için kullanılan popüler bir statik kod analiz aracıdır. Güçlü plugin mimarisi sayesinde, farklı diller, framework’ler veya özel gereksinimler için özelleştirilebilir. eslint-plugin-jsx-a11y de bu mimariden faydalanarak, JSX sözdizimi içinde erişilebilirlik kurallarını uygulamak üzere geliştirilmiştir.
JSX ve Erişilebilirlik Sorunları
React gibi kütüphanelerle JSX kullanırken, bazen farkında olmadan erişilebilirlik sorunlarına yol açabiliriz. Örneğin, bir
alt özelliği olmayan bir resim eklemek veya klavye navigasyonunu bozan bileşenler oluşturmak yaygın hatalardır. Bu plugin, bu tür potansiyel sorunları derleme veya çalışma zamanından önce tespit etmenizi sağlar.
Kurulum ve Yapılandırma Adımları
eslint-plugin-jsx-a11y‘yi projenize entegre etmek oldukça basittir ve geliştirme sürecinizin erken aşamalarında erişilebilirlik sorunlarını yakalamanıza yardımcı olur.
Gereksinimler
Bu eklentiyi kullanabilmek için projenizde ESLint’in kurulu ve yapılandırılmış olması gerekmektedir. Genellikle React projelerinde eslint-plugin-react gibi diğer eklentilerle birlikte kullanılır.
npm veya yarn ile Kurulum
Öncelikle, eklentiyi projenizin geliştirme bağımlılıklarına eklemeniz gerekir:
npm install --save-dev eslint-plugin-jsx-a11y
# veya
yarn add --dev eslint-plugin-jsx-a11y
.eslintrc Dosyası Yapılandırması
Kurulumdan sonra, ESLint yapılandırma dosyanız olan .eslintrc.js, .eslintrc.json veya package.json dosyanızda eklentiyi etkinleştirmeniz gerekir. Aşağıda tipik bir .eslintrc.js yapılandırması gösterilmiştir:
// .eslintrc.js
module.exports = {
extends: [
'eslint:recommended',
'plugin:react/recommended',
'plugin:jsx-a11y/recommended', // Burası önemli!
'plugin:prettier/recommended'
],
plugins: [
'react',
'jsx-a11y' // Eklentiyi belirtiyoruz
],
parserOptions: {
ecmaFeatures: {
jsx: true
},
ecmaVersion: 2020,
sourceType: 'module'
},
settings: {
react: {
version: 'detect' // React sürümünü otomatik algıla
}
},
rules: {
// İsteğe bağlı olarak bazı kuralları özelleştirebilirsiniz
// 'jsx-a11y/anchor-is-valid': ['error', {
// components: ['Link'],
// specialLink: ['hrefLeft', 'hrefRight'],
// aspects: ['noHref', 'invalidHref', 'preferButton']
// }]
}
};
Önerilen Yapılandırmalar (recommended, strict)
eslint-plugin-jsx-a11y iki ana yapılandırma seti sunar:
plugin:jsx-a11y/recommended: Genel olarak iyi bir başlangıç noktasıdır ve çoğu yaygın erişilebilirlik kuralını içerir. Yeni başlayanlar ve çoğu proje için idealdir.plugin:jsx-a11y/strict: Daha katı kurallar içerir ve erişilebilirlik konusunda taviz vermek istemeyen projeler için uygundur. Daha fazla hata ve uyarı ile karşılaşabilirsiniz, ancak daha yüksek bir erişilebilirlik seviyesi sağlar.
Başlıca Kurallar ve Kullanım Alanları
Eklenti, yüzlerce farklı erişilebilirlik kuralını denetler. İşte en sık karşılaşılan ve önemli olanlardan bazıları:
alt-text Kuralı
Bu kural, ,
ve elementlerinin erişilebilir bir alternatif metne (alt özelliği) sahip olmasını sağlar. Ekran okuyucular, görsel içeriği bu metinler aracılığıyla kullanıcılara iletir.
// Hatalı örnek
// Doğru örnek
// Dekoratif resimler için boş alt metin

anchor-is-valid Kuralı
Bu kural, elementlerinin geçerli bir href özelliğine sahip olmasını veya bir olay işleyici (onClick gibi) ile etkileşimli olmasını denetler. Boş href="#" kullanımı genellikle erişilebilirlik sorunlarına yol açar.
// Hatalı örnek
Tıkla
// Doğru örnek (eğer bir düğme gibi davranacaksa)
// Doğru örnek (geçerli bir bağlantı)
Sayfaya Git
no-static-element-interactions Kuralı
Bu kural,
gibi statik HTML elementlerine onClick, onKeyDown gibi olay işleyicileri eklenmesini engeller. Bu elementler varsayılan olarak etkileşimli değildir ve klavye ile odaklanılamazlar, bu da erişilebilirlik sorunlarına yol açar. Bunun yerine anlamsal HTML elementleri (, ) kullanılmalıdır.
// Hatalı örnek
Tıklanabilir Alan
// Doğru örnek
tabindex-no-positive Kuralı
Bu kural, tabIndex özelliğinin pozitif bir değer almasını yasaklar. Pozitif tabIndex değerleri, klavye navigasyon sırasını beklenmedik bir şekilde değiştirebilir ve kullanıcılar için kafa karıştırıcı olabilir. Genellikle tabIndex="0" (elementi doğal sırasına göre odaklanılabilir yapar) veya tabIndex="-1" (programatik olarak odaklanabilir ancak klavye ile atlanabilir yapar) kullanılır.
// Hatalı örnek
Özel Sıra
// Doğru örnek
Odaklanabilir Div
role-has-required-aria-props Kuralı
Bu kural, belirli ARIA rolleri için gerekli olan aria-* özelliklerinin varlığını denetler. Örneğin, bir role="checkbox" elementi aria-checked özelliğine sahip olmalıdır.
// Hatalı örnek
Seçenek
// Doğru örnek
Seçenek
Erişilebilirlik Neden Bu Kadar Kritik?
Web erişilebilirliği, sadece teknik bir konu olmanın ötesinde, geniş kapsamlı etkileri olan stratejik bir konudur.
Yasal Yükümlülükler ve WCAG Standartları
Birçok ülke, web sitelerinin belirli erişilebilirlik standartlarına uymasını zorunlu kılan yasalara sahiptir. Web İçeriği Erişilebilirlik Yönergeleri (WCAG), dünya genelinde kabul görmüş bir standarttır ve web içeriğini daha erişilebilir hale getirmek için bir dizi kılavuz ve başarı kriteri sunar. Bu standartlara uymamak, yasal yaptırımlara ve davalara yol açabilir.
Kullanıcı Deneyimi ve Kapsayıcılık
Erişilebilir bir web sitesi, herkesin bilgiye ve hizmetlere eşit şekilde ulaşmasını sağlar. Bu, engelli bireylerin yanı sıra yaşlılar, geçici olarak engelli olanlar (örneğin kolu kırık olanlar) veya düşük bant genişliğine sahip kullanıcılar için de daha iyi bir deneyim anlamına gelir. Kapsayıcı tasarım, daha geniş bir kullanıcı tabanına ulaşmanın anahtarıdır.
SEO ve Performans İlişkisi
Erişilebilirlik uygulamaları genellikle SEO ile örtüşür. Örneğin, anlamsal HTML kullanımı, doğru başlık hiyerarşisi, alt metinler ve klavye navigasyonu, arama motorlarının içeriğinizi daha iyi anlamasına ve dizine eklemesine yardımcı olur. Temiz, iyi yapılandırılmış ve erişilebilir kod genellikle daha iyi performans gösterir.
Marka İmajı ve Sosyal Sorumluluk
Erişilebilirliğe yatırım yapmak, bir şirketin sosyal sorumluluk bilincini ve kapsayıcılığa olan bağlılığını gösterir. Bu, marka itibarını güçlendirir ve daha pozitif bir halk algısı oluşturur. Günümüz tüketicileri, etik değerlere sahip şirketleri tercih etme eğilimindedir.
En İyi Uygulamalar ve İpuçları
eslint-plugin-jsx-a11y harika bir başlangıç noktası olsa da, tam erişilebilirlik sağlamak için daha fazlası gereklidir.
Otomatik Denetimlerin Ötesi
Linter'lar ve otomatik araçlar, erişilebilirlik sorunlarının büyük bir kısmını yakalayabilir, ancak her şeyi kapsamazlar. Karmaşık etkileşimler, bağlam tabanlı sorunlar veya genel kullanıcı deneyimi gibi konularda insan denetimi ve manuel testler vazgeçilmezdir.
Anlamsal HTML Kullanımı
Mümkün olduğunca doğru HTML elementlerini kullanın ( yerine
Klavye Navigasyonu
Tüm etkileşimli elementlerin klavye ile erişilebilir ve kullanılabilir olduğundan emin olun. Sekme tuşu ile tüm odaklanabilir elementler arasında geçiş yapılabilmeli ve Enter/Space tuşları ile etkileşim kurulabilmelidir. Odak halkalarının (focus rings) görünür olduğundan emin olun.
Ekran Okuyucu Testleri
Uygulamanızı VoiceOver (macOS), NVDA (Windows) veya JAWS (Windows) gibi ekran okuyucularla test edin. Bu, görme engelli bir kullanıcının sitenizi nasıl deneyimlediğini anlamanın en iyi yoludur.
Geliştirici Ekibini Eğitme
Tüm geliştirici ekibinizin erişilebilirlik ilkeleri konusunda bilgi sahibi olması önemlidir. Düzenli eğitimler ve farkındalık çalışmaları, erişilebilirliği geliştirme sürecinin doğal bir parçası haline getirecektir.
Sık Karşılaşılan Sorunlar ve Çözümleri
Eklentiyi kullanırken bazı yaygın durumlarla karşılaşabilirsiniz.
Yanlış Pozitifler ve Nasıl Yönetilir
Bazen eslint-plugin-jsx-a11y, özel bileşenleriniz veya belirli tasarım desenleriniz nedeniyle yanlış pozitif uyarılar verebilir. Bu durumlarda, kuralı belirli bir satır veya dosya için devre dışı bırakmak mümkün olsa da, öncelikle alternatif ve erişilebilir bir çözüm bulmaya çalışmalısınız.
// Belirli bir satır için kuralı devre dışı bırakma
// eslint-disable-next-line jsx-a11y/no-static-element-interactions
Tıklanabilir Alan
Ancak bu, son çare olmalı ve yalnızca kuralın gerçekten uygulanamadığı veya yanlış bir uyarı olduğu durumlarda kullanılmalıdır.
Custom Bileşenlerde Erişilebilirlik
Kendi özel React bileşenlerinizi oluştururken, bu bileşenlerin de erişilebilir olduğundan emin olmalısınız. Örneğin, bir bileşeni oluşturuyorsanız, içeride bir elementi kullanmalı veya uygun ARIA rolleri ve özelliklerini (role="button", aria-pressed vb.) sağlamalısınız.
Dinamik İçerik Yönetimi
SPA'larda (Tek Sayfa Uygulamaları) içerik dinamik olarak değiştiğinde, ekran okuyucuların bu değişikliklerden haberdar olması önemlidir. aria-live bölgeleri gibi ARIA özelliklerini kullanarak, önemli güncellemelerin kullanıcılara duyurulmasını sağlayabilirsiniz.
Kuralları Devre Dışı Bırakma (ve ne zaman yapılmamalı)
ESLint kurallarını devre dışı bırakmak kolaydır, ancak bu kararı dikkatlice vermelisiniz. Bir kuralı devre dışı bırakmadan önce, neden bu kuralın var olduğunu ve onu devre dışı bırakmanın potansiyel erişilebilirlik etkilerini tam olarak anlamalısınız. Genellikle, bir kuralı devre dışı bırakmak yerine, kodunuzu kurala uygun hale getirmek daha iyi bir yaklaşımdır.
Sonuç
eslint-plugin-jsx-a11y, React ve JSX tabanlı uygulamalarınızda erişilebilirliği geliştirme yolculuğunuzda paha biçilmez bir müttefiktir. Geliştirme sürecinin erken aşamalarında potansiyel sorunları tespit ederek, maliyetli düzeltmelerden kaçınmanıza ve herkes için daha kapsayıcı bir web deneyimi sunmanıza yardımcı olur. Ancak unutmayın, bu eklenti sadece bir araçtır; gerçek erişilebilirlik, geliştiricilerin bu konuya olan farkındalığı ve taahhüdüyle sağlanır. Web'i herkes için daha iyi bir yer haline getirmek için erişilebilirliği önceliklendirelim!
SSS (Sık Sorulan Sorular)
eslint-plugin-jsx-a11y sadece React için mi geçerli?
Hayır, eslint-plugin-jsx-a11y özellikle JSX sözdizimi ile çalışan tüm kütüphaneler ve framework'ler için kullanılabilir. React en popüler kullanım alanı olsa da, Preact, Vue (JSX ile kullanıldığında) veya diğer JSX tabanlı projelerde de faydalıdır.
Tüm kuralları etkinleştirmeli miyim?
Başlangıç için plugin:jsx-a11y/recommended yapılandırması iyi bir denge sunar. Daha katı bir yaklaşım benimsemek isterseniz plugin:jsx-a11y/strict kullanabilirsiniz. Tüm kuralları tek tek etkinleştirmek yerine, bu hazır yapılandırmaları kullanmak genellikle daha pratik ve etkilidir.
Kuralları devre dışı bırakmak ne zaman uygun?
Kuralları devre dışı bırakmak son çare olmalıdır. Genellikle, kuralın yanlış pozitif olduğu veya mevcut teknolojilerle erişilebilir bir alternatifin mümkün olmadığı çok özel ve nadir durumlar için ayrılmalıdır. Devre dışı bırakmadan önce, erişilebilirlik uzmanlarına danışmanız veya alternatif çözümler aramanız şiddetle tavsiye edilir.
Erişilebilirlik için başka hangi araçları kullanmalıyım?
eslint-plugin-jsx-a11y'nin yanı sıra, tarayıcı eklentileri (Lighthouse, axe DevTools), manuel testler, ekran okuyucu testleri ve hatta gerçek kullanıcı testleri gibi araçları ve yöntemleri bir arada kullanmak, kapsamlı bir erişilebilirlik stratejisi için önemlidir.
WCAG standartlarına uymak neden önemli?
WCAG standartlarına uymak, yasal yükümlülükleri yerine getirmenin yanı sıra, uygulamanızın daha geniş bir kitle tarafından kullanılabilir olmasını sağlar. Bu, kullanıcı deneyimini artırır, marka itibarını güçlendirir ve kapsayıcı bir dijital ortam oluşturulmasına katkıda bulunur.