VS CodeまたはJetBrains IDE用Axeアクセシビリティリンターでカスタムコンポーネントをリントする

This page is not available in the language you requested. You have been redirected to the English version of the page.
Link to this page copied to clipboard

VS CodeまたはJetBrains IDEでカスタムコンポーネントをリントする手順

Free Trial
Not for use with personal data

この記事では、Visual Studio Code (VS Code)用のAxeアクセシビリティリンター拡張機能、またはJetBrains用のプラグインを設定して、カスタムコンポーネントのアクセシビリティエラーを見つける方法を紹介します。

important

この記事は、 VS Code用Axeアクセシビリティリンター拡張機能JetBrains用プラグインのユーザー向けです。Axe DevTools Linter RESTエンドポイントのユーザーは、 RESTエンドポイントでカスタムコンポーネントをリントする を参照してください。

カスタムコンポーネントのリントの概要を読みたい方は、 カスタムコンポーネントのリントを参照してください。

この手順書を利用するには、以下がインストールされている必要があります:

Visual Studio Code用

JetBrains IDE用

アクセシビリティエラーの例

拡張機能を使用してソースコードをリントすると、アクセシビリティエラーがIDE内で赤い波線で表示されます。例えば、次のHTMLは img 要素に alt 属性がない利用例を示しています。これは、VS Codeで示されるアクセシビリティエラーです。

<img src="path/to/image.jpg"/>

(これはリントのデモンストレーションのための簡単な例であり、実際の具体例ではありません。)

拡張機能はエラーのある行を強調表示し、マウスカーソルをエラーの上に置くとツールチップを提供します。この img 要素に alt 属性がないため、拡張機能からIDE内で(VS Codeが表示されます)アクセシビリティエラーが発生します:

alt属性が欠如しているため、img要素のエラーを表示している拡張機能を示します。

カスタム画像コンポーネント

この例では、開発者は custom-imageと呼ばれるカスタムコンポーネントを作成しました。次のサンプルは custom-image カスタムコンポーネントの使用例です:

<custom-image path="images/image.jpg"></custom-image>

この例では、 custom-image コンポーネントは img 要素を作成し、 path 属性(カスタムコントロールの実装によって src 属性にマッピングされる)を持ちます。拡張機能は custom-imageimg の間にマッピングがないため、エラーを示しませんが、出力の img 要素には alt 属性が欠けています:

カスタムコンポーネントが設定されていない時にエラーが検出されないことを示しています。

マッピング custom-imageimg

マッピングを提供する場合、 custom-imageimg、Axe DevTools Linterはカスタムコンポーネントを標準HTML要素としてマップし、アクセシビリティエラーを見つけることができます。マッピングを指定するには、 global-components 構成オプションを axe-linter.yml 構成ファイルで使用します:

global-components:
  custom-image: img

拡張機能は、今やアクセシビリティエラーを強調表示し、マウスカーソルをエラーの上に置くとツールチップを提供します:

カスタムコンポーネントにalt属性が欠けているために検出されたエラーを示します。

上記と同じマッピングを以下のいずれかの構文を使用して示すこともできます:

global-components:
  custom-image:
    element: img

または、 element を省略して el:

global-components:
  custom-image:
    el: img
important

要素のマッピングを使用すると、カスタムコンポーネントのすべての属性が生成された要素にコピーされ、その生成された要素がリンティングされます。

アクセシビリティの問題を修正する

属性を追加して alt のアクセシビリティ問題を修正することができます: custom-image エラーがなくなり、IDEに赤い波線が表示されなくなります(VS Codeで確認済み):

<custom-image path="images/image.jpg" alt="alt text"></custom-image>

カスタムコンポーネントが適切に構成され、VS Codeで適切な属性が使用されていることを示します。

属性をマッピングする

場合 alternative-text カスタム画像コンポーネントが代替テキストを示すために異なる属性を使用している場合、その属性を構成で指定できます。たとえば、

コンポーネントが custom-image 属性を使用している場合、 alternative-text の代わりに以下のように: altこの場合、

<custom-image path="images/image.jpg" alternative-text="alt text"></custom-image>

属性と alternative-text 属性との間にマッピングを指定できます alt として attributes 配列を axe-linter.yml ファイルで次のように:

global-components:
  custom-image:
    element: img
    attributes:
      - alternative-text: alt

この global-components 構成は、以前の1つのカスタムコンポーネントと1つのHTML要素のマッピングとは少し異なります。要素だけの場合、キー(custom-image)から値(img)へのマッピングを使用します。 attributes 配列を含めることで、生成されたHTML要素を指定するために element プロパティ(または el)を使用する必要があります。

この変更によりエラーが修正され、IDEに赤い波線は表示されません(VS Codeで確認済み)。

important

配列を構成で指定したため、拡張機能が attributes から custom-image へマップするとき、 img 配列内の attributes に一致する属性のみ が生成されたHTML要素にコピーされます。

も省略して attributesattrs:

global-components:
  custom-image:
    element: img
    attrs:
      - alternative-text: alt

特別な属性値: <text>aria-*

次のように custom-button コンポーネントを使用すると仮定します:

<custom-button aria-controls="expand-region" aria-expanded="false" aria-colindex="1" message="Show Region"></custom-button>

(カスタムボタンは、ここに含まれていないJavaScriptとCSSを使用して、 divを表示または非表示にします。)

この使用法には2つの問題があります:

  1. この custom-button コンポーネントを直接 button 要素にマッピングすると、ボタンに表示されるテキストコンテンツがありません。ただし、コンポーネント作者の意図としては、 message 属性がテキストコンテンツとして使用されるべきです: <button> 属性の message </button>
  2. 生成された button 要素には button の暗黙的な役割があり、 aria-colindex 属性は誤りであり削除されるべきです。

通常、このHTMLにはエラーが発生しないのは、 custom-buttonbuttonの間にマッピングがないからです。しかし、 custom-button との間に単純なマッピングを作成すると、 button 次のようになります:

global-components:
  custom-button: button

エラーが2つ発生します(VS Codeが表示されています):

カスタムボタンコンポーネントと単純なマッピングを使用したとき、属性が正しく構成されていない場合にエラーが2つ表示されます。

特別な <text>

最初の問題( button 要素へのテキストコンテンツが message 属性から来る問題)に対応するために、上記で識別された button-name (IDEのツールチップに表示されている)として、特別な <text> 値を使用することができます。この場合、 message 属性のテキストを生成された button 要素のテキストコンテンツにコピーする必要があります。

拡張機能で、 message 属性がHTML button 要素のテキストコンテンツとされるべきことを設定するには、 <text> 特別な axe-linter.yml 値を設定ファイルで使用してください:

global-components:
  custom-button:
    element: button
    attributes:
      - message: <text>

あなたが message 属性を <text>として定義したため、拡張機能にその属性がHTML button 要素のテキストコンテンツと置き換えるものと見なすよう指示しています。属性の値と共に。 message 要素のテキストコンテンツと置き換えるものと見なすよう指示しています。属性の値と共に。

残念なことに、 attributes 配列を使用すると、生成された button 要素に渡された属性は message 属性のみでした。配列に含まれていない属性は渡されません。これは、拡張機能で不正な attributes がキャッチされなかったことを意味します。 aria-colindex がキャッチされなかったことを意味します。

使用方法 aria-*

特別な aria-* すべてのARIA属性を渡すための値は、以下のように表示されます:

global-components:
  custom-button:
    element: button
    attributes:
      - message: <text>
      - aria-*

aria-* オプションを使用すると、すべてのaria-オプションが出力されるHTML要素にコピーされるため、正しくリンティングされます。

このエラーは、 button 要素に暗黙的な role="button" があり、 aria-colindex ボタンに使用すると無効です。 aria-*では、すべてのARIA属性が出力される要素にコピーされ、無効な aria-colindex 属性も含まれます。

<element>

複雑なコンポーネントでは、特定の場合にデフォルト要素とは異なるHTML要素を出力したいことがあります。例えば、通常はボタンとして動作し、他の状態ではプレースホルダー画像として機能するボタンコンポーネントがあるかもしれません。 <element> 値を使うことで、出力される要素を決定する属性をカスタムコンポーネントに指定できます。

global-components:
  my-button:
    element: button
    attributes:
      - use: <element>

この場合、 use 属性が my-button コンポーネントに付与され、出力される要素を示します。 img 出力された alt 要素には

VS Codeに、alt属性が欠落しているカスタムコンポーネントが表示される。

すべての属性を暗黙的に渡す

もしも要素マッピングのみ(マッピングが attributes 配列を使用していない)が使われていた場合、デフォルトで全ての属性が button 要素にコピーされます。この場合の設定は以前に示しました:

global-components:
  custom-button: button

IDEに表示されるエラーに加えて(ここではVS Codeが表示されています):

VS Codeのスクリーンショットは、単純な要素マッピングが出力要素にすべての属性をコピーし、2つのエラーを引き起こす様子を示しています。

上記の例は、カスタムコンポーネントのリンティングを開始する際の実用的な第一歩として、要素マッピングを開始し(すべての属性を標準HTML要素にコピーすることにより)、次に設定に追加すべき属性を確認することを示しています:

  1. カスタムコンポーネントの属性のいずれかが異なる属性にマッピングされるべきかどうか。
  2. 使用する必要があるかどうか、 <text> または。 aria-*

デフォルト属性

デフォルト属性を使用すると、一つの属性を他の属性にマッピングするのではなく、設定ファイルで属性の値を設定できます。例えば、以下のサンプル設定では、 custom-menu コンポーネントが li 要素にマッピングされ、 roleメニュー

global-components:
  custom-menu:
    element: li
    attributes:
      - role:
          name: null
          default: menu

そのため、 role 属性にはデフォルト値として メニューが設定ファイル内に設定されているため、ユーザーは role 属性を指定する必要がありません。つまり、カスタムコンポーネントの実装が出力要素にこれらの属性を生成し、その値を設定することで、ユーザーがコンポーネントを利用する際に設定する必要を無くしています。 custom-menu

場合によっては、 name 値は null に設定されており、これによりAxe DevTools Linterはユーザーが指定した role 属性を無視します。 custom-menu リンティングされたコード内の

note

で指定された値は、文字列でなければなりません。 default ことを確認してください。

関連記事

Axe DevTools Linterの設定

カスタムコンポーネントとRESTエンドポイント

構成済みコンポーネントライブラリ

Axe DevTools Linter for React Native

CI/CDレポートでカスタムコンポーネントの違反を分析