フロントエンドチェックリスト（日本語訳）

[![Build Status](https://travis-ci.org/miya0001/Front-End-Checklist.svg?branch=master)](https://travis-ci.org/miya0001/Front-End-Checklist)

GitHubで公開されているフロントエンドチェックリストというドキュメントが、網羅されている内容が幅広く便利そうだったので、日本語に翻訳しました。

https://github.com/thedaviddias/Front-End-Checklist

日本語版は、以下のGitHubリポジトリにあります。GitHub側と自動的に連携するようにしておりますので、誤訳や誤りなどがあれば GitHub のプルリクエストまたは Issue で報告していただけると幸いです。

* https://github.com/miya0001/Front-End-Checklist
* [日本語版への貢献方法](https://github.com/miya0001/Front-End-Checklist/blob/master/README-ja.md)

最終更新日時: 2017-11-19 03:50:47+09:00 ([未翻訳](https://github.com/miya0001/Front-End-Checklist/compare/master...thedaviddias:master))

---

[![Front-End Checklist Logo](https://github.com/thedaviddias/Front-End-Checklist/blob/master/src/img/banners/front-end-checklist-banner-light.jpg?raw=true)](http://frontendchecklist.com)

<h2 align="center"><a href="http://frontendchecklist.com">Front-End Checklist</a></h2>

<p align="center">
  <em>The Front-End Checklist is an exhaustive list of all elements you need to have / to test before launching your site / HTML page to production.</em>
</p>

[![Join the chat at https://gitter.im/Front-End-Checklist/Lobby](https://badges.gitter.im/Front-End-Checklist/Lobby.svg)](https://gitter.im/Front-End-Checklist/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![Front‑End_Checklist followed](https://img.shields.io/badge/Front‑End_Checklist-followed-brightgreen.svg)](https://github.com/thedaviddias/Front-End-Checklist/)
[![Backers on Open Collective](https://opencollective.com/front-end-checklist/backers/badge.svg)](#backers) [![Sponsors on Open Collective](https://opencollective.com/front-end-checklist/sponsors/badge.svg)](#sponsors)
[![Contributors](https://img.shields.io/github/contributors/thedaviddias/Front-End-Checklist.svg)](https://github.com/thedaviddias/Front-End-Checklist/graphs/contributors)
[![StackShare](https://img.shields.io/badge/tech-stack-0690fa.svg?style=flat)](https://stackshare.io/thedaviddias/front-end-checklist)
[![CC0](https://img.shields.io/badge/license-CC0-green.svg)](https://creativecommons.org/publicdomain/zero/1.0/)



**フロントエンドチェックリスト**は、みなさんがウェブサイトや HTML ページを本番環境で公開する前に確認するべきあらゆる項目を網羅したリストです。



これは、フロントエンド開発者たちの数年に及ぶ経験にもとづいており、さらに他のオープンソースのチェックリストの内容も追加されています。

<a target='_blank' rel='nofollow' href='https://app.codesponsor.io/link/HxqChNNHFKFaMpEpEikk4EM4/thedaviddias/Front-End-Checklist'>
  <img alt='Sponsor' width='888' height='68' src='https://app.codesponsor.io/embed/HxqChNNHFKFaMpEpEikk4EM4/thedaviddias/Front-End-Checklist.svg' />
</a>



## 目次



1. **[Head](#head)**
2. **[HTML](#html)**
3. **[ウェブフォント](#ウェブフォント)**
4. **[CSS](#css)**
5. **[画像](#画像)**
6. **[JavaScript](#javascript)**
7. **[セキュリティ](#セキュリティ)**
8. **[パフォーマンス](#パフォーマンス-1)**
9. **[アクセシビリティ](#アクセシビリティ)**
10. **[SEO](#seo)**



## 利用方法



**フロントエンドチェックリスト**のすべての項目は大半のプロジェクトで必要とされていますが、いくつかの項目は省略できますし、必須でもありません。（たとえば管理用のウェブアプリケーションの場合は、RSSは必要ないでしょう。）私たちは三段階で重要度を評価しています。



* ![Low][low_img] は、**推奨**を意味していますが、個別のシチュエーションによっては省略することも可能です。
* ![Medium][medium_img] は、**強く推奨**を意味していますが、ごく稀なケースでは必須ではなく省略することも可能です。いくつかの項目においては省略することによってパフォーマンスやSEOで悪影響がある可能性があります。
* ![High][high_img] は、**必須**を意味しており、いかなる理由でも省略することはできません。これらを省略することで機能が不完全だったり、アクセシビリティやSEOの問題が発生することがあります。テストの優先順位はまずこれらの項目からはじめるべきです。



チェックリストのいくつかのリソースでは、絵文字を使ってコンテンツの種類を理解したり、ヘルプを見つけやすいようにしています。



* 📖: ドキュメンテーションまたは文章
* 🛠: オンラインツール / テストツール
* 📹: メディアまたはビデオコンテンツ

---

## Head



> **備考:** HTMLドキュメントの `<head>` については、[すべてのリストがこちらにあります](https://github.com/joshbuchea/HEAD)。



### Meta タグ



* [ ] **DOCTYPE宣言:** ![High][high_img] Doctype が HTML5 であり、すべての HTML ページの先頭にあること。

```html

<!doctype html>
```

> * 📖 [Determining the character encoding - HTML5 W3C](https://www.w3.org/TR/html5/syntax.html#determining-the-character-encoding)



*次の3つの Meta タグ（Charset、X-UA、Viewport）は、`<head>`の先頭にあるべきです。*



* [ ] **文字コード:** ![High][high_img] 文字コード (UTF-8) が正しく宣言されている。

```html

<meta charset="utf-8">
```



* [ ] **X-UA-Compatible:** ![Medium][medium_img] Meta タグ X-UA-Compatible が存在している。

```html

<meta http-equiv="x-ua-compatible" content="ie=edge">
```



> 📖 [レガシードキュメントモードの設定 (Internet Explorer)](https://msdn.microsoft.com/en-us/library/jj676915(v=vs.85).aspx)



* [ ] **Viewport:** ![High][high_img] viewport が正しく宣言されている。

```html

<meta name="viewport" content="width=device-width, initial-scale=1">
```



* [ ] **Title:** ![High][high_img] title が全てのページで使用されている。（SEO: Google は、タイトルで使用される文字幅をピクセルで計算し、472から482ピクセルで切り詰めます。平均的な文字数は半角で55文字となります。）

```html

<title>Page Title less than 55 characters</title>
```

> * 📖 [Title - HTML - MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/title)
> * 🛠 [SERP Snippet Generator](https://www.sistrix.com/serp-snippet-generator/)



* [ ] **Description:** ![High][high_img] meta description が提供されており、これはユニークでありなおかつ150文字以下である。

```html

<meta name="description" content="Description of the page less than 150 characters">
```

> * 📖[Meta Description - HTML - MDN](https://developer.mozilla.org/en-US/docs/Learn/HTML/Introduction_to_HTML/The_head_metadata_in_HTML#Adding_an_author_and_description)



* [ ] **Favicons:** ![Medium][medium_img] それぞれの favicon が作られており正しく表示されている。もし、``favicon.ico`` しかない場合、それはあなたのサイトのルートに設置されている。通常はマークアップは必要ない。しかしながら、以下の例のようにリンクをはることがまだ有効である。昨今では、**PNG フォーマット** が  ``.ico`` フォーマットよりも推奨されている。（サイズ: 32x32px）

```html

<link rel="icon" type="image/x-icon" href="https://example.com/favicon.ico">

<link rel="icon" type="image/png" href="https://example.com/favicon.png">
```

> * 🛠 [Favicon Generator](https://www.favicon-generator.org/)
> * 🛠 [RealFaviconGenerator](https://realfavicongenerator.net/)
> * 📖 [Favicon Cheat Sheet](https://github.com/audreyr/favicon-cheat-sheet)
> * 📖 [Favicons, Touch Icons, Tile Icons, etc. Which Do You Need? - CSS Tricks](https://css-tricks.com/favicon-quiz/)
> * 📖 [PNG favicons - caniuse](https://caniuse.com/#feat=link-icon-png)



* [ ] **Apple Touch Icon:** ![Low][low_img] apple-mobile-web-app-capable がある。 *(すくなくとも 200x200pxのAppleアイコンファイルを作成すれば、必要な全ての寸法をサポートする。)*

```html

<link rel="apple-touch-icon" href="/custom-icon.png">
```

> * 📖 [Configuring Web Applications](https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariWebContent/ConfiguringWebApplications/ConfiguringWebApplications.html)



- [ ] **Windows カスタムタイル:**![Low][low_img] Windows カスタムタイルが提供されリンクされている。

```html

<meta name="msapplication-config" content="browserconfig.xml" />
```



browserconfig.xml の必要最小限の構成は以下:

```xml
<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
   <msapplication>
     <tile>
        <square70x70logo src="small.png"/>
        <square150x150logo src="medium.png"/>
        <wide310x150logo src="wide.png"/>
        <square310x310logo src="large.png"/>
     </tile>
   </msapplication>
</browserconfig>
```

> * 📖 [Browser configuration schema reference](https://msdn.microsoft.com/en-us/library/dn320426(v=vs.85).aspx)



* [ ] **Canonical:** ![Medium][medium_img] 重複したコンテンツを避けるために ``rel="canonical"`` を使用している。

```html

<link rel="canonical" href="http://example.com/2017/09/a-new-article-to-red.html">
```

> * 📖 [Use canonical URLs - Search Console Help - Google Support](https://support.google.com/webmasters/answer/139066?hl=en)
> * 📖 [5 common mistakes with rel=canonical - Google Webmaster Blog](https://webmasters.googleblog.com/2013/04/5-common-mistakes-with-relcanonical.html)



### HTML タグ



* [ ] **Language 属性:** ![High][high_img] あなたのサイトの言語を指定するための ``lang`` 属性が記述されている。

```html
<html lang="en">
```



* [ ] **Direction 属性:** ![Medium][medium_img] 書字方向を指定するための `dir` 属性が ``<html>`` タグに指定されている。（これは他の HTML タグ上でも使用可能である。）

```html
<html dir="rtl">
```

> * 📖 [dir - HTML - MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/dir)



* [ ] **代替言語:** ![Low][low_img] あなたのサイトの言語タグが既述されており、現在のページに言語が関連づけられている。

```html
<link rel="alternate" href="https://es.example.com/" hreflang="es">
```



* [ ] **条件分岐コメント:** ![Low][low_img] もし必要なら、IE 用の条件分岐コメントタグが設置されている。

> * 📖 [About conditional comments (Internet Explorer) - MSDN - Microsoft](https://msdn.microsoft.com/en-us/library/ms537512(v=vs.85).aspx)



* [ ] **RSS フィード:** ![Low][low_img] もしあなたのサイトがブログ、もしくは記事をもっているなら、RSS へのリンクが提供されている。



* [ ] **インラインクリティカル CSS:** ![Medium][medium_img] ページロード時にすぐに表示される部分のコンテンツを整える CSS は（"above the fold content"）、クリティカル CSS によってコールされている。それは、主要な CSS の前の `<style></style>` の間に記述されている。（圧縮されている）

> * 🛠 [Critical by Addy Osmani on GitHub](https://github.com/addyosmani/critical) は、これを自動的に行います。



* [ ] **CSS 読み込み順:** ![High][high_img] すべての CSS ファイルは ``<head>`` 内でいかなる JavaScript よりも先に読み込まれている。 (JS ファイルが時々非同期にあなたのページのトップに読み込まれる場合を除く。)



### ソーシャル



***Facebook OG*** と ***Twitter Cards*** は、すべてのウェブサイトに強く推奨します。 その他のソーシャルメディア用のタグは、特定の対象をターゲットとする際に、より確実に表示されるようになるでしょう。



* [ ] **Facebook Open Graph:** ![Low][low_img] すべての Facebook Open Graph (OG) はテストされ、不足がなく不具合もない。画像サイズは少なくとも 600 x 315 ピクセル以上であり、1200 x 630 ピクセルを推奨する。



> **備考:** `og:image:width` と `og:image:height` を使用して画像の縦横サイズを指定すると、非同期にダウンロードして処理することなく、即座に画像をレンダリングすることができます。

```html
<meta property="og:type" content="website">
<meta property="og:url" content="https://example.com/page.html">
<meta property="og:title" content="Content Title">
<meta property="og:image" content="https://example.com/image.jpg">
<meta property="og:description" content="Description Here">
<meta property="og:site_name" content="Site Name">
<meta property="og:locale" content="en_US">

<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
```



> * 📖 [A Guide to Sharing for Webmasters](https://developers.facebook.com/docs/sharing/webmasters/)
> * 🛠 [Facebook OG testing](https://developers.facebook.com/tools/debug/) であなたのサイトをテストしましょう。

* [ ] **Twitter Card:** ![Low][low_img]

```html
<meta name="twitter:card" content="summary">
<meta name="twitter:site" content="@site_account">
<meta name="twitter:creator" content="@individual_account">
<meta name="twitter:url" content="https://example.com/page.html">
<meta name="twitter:title" content="Content Title">
<meta name="twitter:description" content="Content description less than 200 characters">
<meta name="twitter:image" content="https://example.com/image.jpg">
```



> * 📖 [Getting started with cards — Twitter Developers](https://developer.twitter.com/en/docs/tweets/optimize-with-cards/guides/getting-started)
> * 🛠 [Twitter card validator](https://cards-dev.twitter.com/validator) であなたのサイトのテストをしましょう。



**[⬆ トップに戻る](#目次)**

---

## HTML



### ベストプラクティス



* [ ] **HTML5 セマンティック要素:** ![High][high_img] HTML5 セマンティック要素が適切に使用されている。(header, section, footer, main...)

> * 📖 [HTML Reference](http://htmlreference.io/)



* [ ] **エラーページ:** ![High][high_img] 404 及び 5xx 用のエラーページが存在している。5xx エラーページは CSS が内蔵されている必要があることを覚えておくこと。（サーバーに対する追加のリクエストを行わないこと。）



* [ ] **Noopener:** ![Medium][medium_img] ``target="_blank"`` で外部リンクを使用する際には、``rel="noopener"`` 属性をつけて Tabnabbing 脆弱性を防ぐこと。もしあなたが古いバージョンの Firefox をサポートする必要があるなら、``rel="noopener noreferrer"`` を使用すること。

> * 📖 [About rel=noopener](https://mathiasbynens.github.io/rel-noopener/)



* [ ] **不必要なコード:** ![Low][low_img] 不必要なコードは、本番環境にアップロードされる前に削除されていること。



### HTML のテスト



* [ ] **W3C 準拠:**: ![High][high_img] すべてのページを HTML バリデーターでテストして、問題点を抽出する。

> * 🛠 [W3C validator](https://validator.w3.org/)



* [ ] **HTML Lint:** ![High][high_img] ツールを使って HTML に問題があるかどうかを分析する。

> * 🛠 [Dirty markup](https://dirtymarkup.com/)

> * 🛠 [Sonar a linting tool for the web](https://sonarwhal.com/)



* [ ] **リンクチェッカー:** ![High][high_img] リンク切れがなく、404 エラーが発生しないことを確認する。

> * 🛠 [W3C Link Checker](https://validator.w3.org/checklink)



* [ ] **広告ブロッカーテスト:** ![Medium][medium_img] 広告ブロッカーが有効でもコンテンツが正しく表示されている。（ユーザーに対してそれらの広告ブロッカーを無効化するようメッセージを表示することができる。）



**[⬆ トップに戻る](#目次)**

---



## ウェブフォント



> **備考:** Webフォントを使用すると、スタイルが適用されていないテキストが表示される現象（FFlash Of Unstyled Text）や フォントがロードされるまで表示されない現象（Flash of Invisible Text）が発生する可能性があります。フォールバックフォントを使用するか、ウェブフォントローダーを使用して動作を制御することを検討してください。
> * 📖 [Google Technical considerations about webfonts](https://developers.google.com/fonts/docs/technical_considerations)



* [ ] **ウェブフォントのフォーマット:** ![High][high_img] WOFF, WOFF2 及び TTF はすべてのモダンブラウザでサポートされている。

> * 📖 [WOFF - Web Open Font Format - Caniuse](https://caniuse.com/#feat=woff).
> * 📖 [WOFF 2.0 - Web Open Font Format - Caniuse](https://caniuse.com/#feat=woff2).
> * 📖 [TTF/OTF - TrueType and OpenType font support](https://caniuse.com/#feat=ttf)
> * 📖 [Using @font-face - CSS-Tricks](https://css-tricks.com/snippets/css/using-font-face/)



* [ ] **ウェブフォントのサイズ:** ![High][high_img] ウェブフォントのサイズは、すべての綴りが含まれた状態で 2MB を超えないこと。



* [ ] **ウェブフォントローダー:** ![Low][low_img] ウェブフォントローダーで、ロード時の挙動を制御する。

> * 🛠 [Typekit Web Font Loader](https://github.com/typekit/webfontloader)



**[⬆ トップに戻る](#目次)**

---

## CSS



> **備考:** 多くのフロントエンド開発者が従っている [CSS guidelines](https://cssguidelin.es/) と [Sass Guidelines](https://sass-guidelin.es/) を見てみましょう。 もし CSS プロパティについて疑問があるなら、[CSS Reference](http://cssreference.io/) に訪れてみましょう。また一貫性を学ぶための短めの [Code Guide](http://codeguide.co/) もあります。



* [ ] **Responsive Web Design:** ![High][high_img] そのウェブサイトはレスポンシブデザインを採用している。
* [ ] **CSS Print:** ![Medium][medium_img] 印刷用のスタイルシートがそれぞれのページに対して正しく提供されている。
* [ ] **Preprocessors:** ![Low][low_img] あなたのサイトは CSS プリプロセッサーを使用している。 ([Sass](http://sass-lang.com/) が推奨される。)
* [ ] **Unique ID:** ![High][high_img] もし ID が使用されているなら、そのページの中でユニークであること。
* [ ] **Reset CSS:** ![High][high_img] CSS のリセット (reset, normalize または reboot) が使用されており最新である。 *(もしあなたが Bootstrap や Foundation などの CSS フレームワークを使用しているなら、それらはすでに導入されている。)*

> * 📖 [Reset.css](https://meyerweb.com/eric/tools/css/reset/)
> * 📖 [Normalize.css](https://necolas.github.io/normalize.css/)
> * 📖 [Reboot](https://getbootstrap.com/docs/4.0/content/reboot/)



* [ ] **JS prefix:** ![Low][low_img] すべての class (または JavaScript で使用されいる ID) は、**js-** で始まっており、それらは CSS で使用されていない。

```html
<div id="js-slider" class="my-slider">

<div id="id-used-by-cms" class="js-slider my-slider">
```



* [ ] **内部 CSS 及びインラインスタイル:** ![High][high_img] `<style>` による内部 CSS やインラインスタイルを使用することを避け、正当な理由でのみ使用する。（例： スライダー用の背景画像や CSS クリティカルなど）
* [ ] **ベンダープレフィックス:** ![High][high_img] CSS ベンダープレフィックスが、ブラウザの互換性に基づいて生成され、使用されている。

> * 🛠 [Autoprefixer CSS online](https://autoprefixer.github.io/)



### パフォーマンス



- [ ] **ファイルの結合:** ![High][high_img] CSS ファイルが結合されている。 *(HTTP/2 では不要)*
- [ ] **圧縮（Minify）:** ![High][high_img] すべての CSS ファイルは圧縮されている。
- [ ] **ノンブロッキング:** ![Medium][medium_img] CSS ファイルは DOM の読み込みに時間がかからないようにノンブロッキングである。

> * 📖 [loadCSS by filament group](https://github.com/filamentgroup/loadCSS)
> * 📖 [Example of preload CSS using loadCSS](https://gist.github.com/thedaviddias/c24763b82b9991e53928e66a0bafc9bf)



- [ ] **Unused CSS:** ![Low][low_img] 使用していない CSS は削除されていること。

> * 🛠 [UnCSS Online](https://uncss-online.com/) 🛠
> * 🛠 [PurifyCSS](https://github.com/purifycss/purifycss)
> * 🛠 [Chrome DevTools Coverage](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage)



### CSS のテスト



* [ ] **文法:** ![High][high_img] すべての CSS 及び SCSS にはエラーがないこと。

> * 🛠 [stylelint, a CSS linter](https://stylelint.io/)
> * 📖 [Sass guidelines](https://sass-guidelin.es/)



* [ ] **レスポンシブデザイン:** ![High][high_img] すべてのページは、320px, 768px, 1024px のブレイクポイントでテストされていること。（可能であれば、アナリティクスの結果に基づいて他のブレイクポイントでもテストする。）



* [ ] **CSS バリデーター:** ![Medium][medium_img] CSS がテストされ、関連するエラーが修正されていること。

> * 🛠 [CSS Validator](https://jigsaw.w3.org/css-validator/)



* [ ] **デスクトップブラウザ:** ![High][high_img] すべてのページは現在あるすべてのデスクトップブラウザでテストされている。 (Safari, Firefox, Chrome, Internet Explorer, EDGE...)
* [ ] **モバイルブラウザ:**  ![High][high_img] すべてのページは現在あるすべてのモバイルブラウザでテストされている。 (Native browser, Chrome, Safari...)
* [ ] **OS:**  ![High][high_img] すべてのページは現在あるすべての OS でテストされている。 (Windows, Android, iOS, Mac...).

- [ ] **ピクセルパーフェクト:** ![High][high_img] すべてのページはピクセルパーフェクトに近い状態であること。クリエイティブの品質によっては 100% 正確ではない場合があるが、テンプレートにほぼ近い状態である必要がある。

> [Pixel Perfect - Chrome Extension](https://chrome.google.com/webstore/detail/perfectpixel-by-welldonec/dkaagdgjmgdmbnecmcefdhjekcoceebi?hl=en)



* [ ] **書字方向:** ![High][high_img] すべてのページは、必要に応じて LTR 及び RTL でテストされていること。

> * 📖 [Building RTL-Aware Web Apps & Websites: Part 1 - Mozilla Hacks](https://hacks.mozilla.org/2015/09/building-rtl-aware-web-apps-and-websites-part-1/)
> * 📖 [Building RTL-Aware Web Apps & Websites: Part 2 - Mozilla Hacks](https://hacks.mozilla.org/2015/10/building-rtl-aware-web-apps-websites-part-2/)



**[⬆ トップに戻る](#目次)**

---



## 画像



> **Notes:** 画像の最適化に関して総合的に理解するには、Addy Osmani による **[Essential Image Optimization](https://images.guide/)** をおすすめします。



### ベストプラクティス



* [ ] **Optimization:** ![High][high_img] すべての画像はブラウザでの表示に対して最適化されていること。WebP フォーマットは、ホームページのような重要なページでも使用することができます。

> * 🛠 [Imagemin](https://github.com/imagemin/imagemin)
> * 🛠 Use [ImageOptim](https://imageoptim.com/) to optimise your images for free.
> * 🛠 Use [Kraken.io](https://kraken.io/web-interface) awesome alternative for both png and jpg optimization. Up to 1mb per files on free plan.



* [ ] **Picture/Srcset:** ![Medium][medium_img] `picture/srcset` によって現在のビューポートに最も適切なイメージを提供する。

> * 📖 [How to Build Responsive Images with srcset](https://www.sitepoint.com/how-to-build-responsive-images-with-srcset/)



* [ ] **Retina:** ![Low][low_img] Retina ディスプレイをサポートするために2倍または3倍のイメージサイズの画像を提供している。
* [ ] **Sprite:** ![Medium][medium_img] 小さい画像はスプライト画像にまとめられている。（アイコンの場合は、SVGスプライトイメージに含めることができます。）
* [ ] **Width and Height:** ![High][high_img] 最終的に表示される際のサイズがわかっている場合、すべての `<img>` は、`height` と `width` が指定されている。（`px` または `%` を指定しない。）
* [ ] **Alt テキスト:** ![High][high_img] すべての ``<img>`` は Alt テキストが代替テキストとして指定されていること。

> * 📖 [Alt-texts: The Ultimate Guide](https://axesslab.com/alt-texts/)



* [ ] **遅延ロード:** ![Medium][medium_img] 画像は遅延ロードされていること。（noscript による代替策が常に提供されていること。）



**[⬆ トップに戻る](#目次)**

---

## JavaScript



### ベストプラクティス



* [ ] **インライン JavaScript:** ![High][high_img] インライン JavaScript がないこと。（HTML と混ざっているもの）
* [ ] **ファイルの結合:** ![High][high_img] JavaScript ファイルは一つのファイルに結合されていること。
* [ ] **圧縮（Minify）:** ![High][high_img] JavaScript ファイルは圧縮されていること。（`.min.js` という拡張子を使用できる。）

> * 📖 [Minify Resources (HTML, CSS, and JavaScript)](https://developers.google.com/speed/docs/insights/MinifyResources)



* [ ] **JavaScript セキュリティ:** ![High][high_img]

> * 📖 [Guidelines for Developing Secure Applications Utilizing JavaScript](https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet#Guidelines_for_Developing_Secure_Applications_Utilizing_JavaScript)



* [ ] **ノンブロッキング:** ![Medium][medium_img] JavaScript ファイルは、`async` 属性を使用して非同期で読み込まれるか、`defer` 属性を使用して遅延実行されている。

> * 📖 [Remove Render-Blocking JavaScript](https://developers.google.com/speed/docs/insights/BlockingJS)



* [ ] **Modernizr:** ![Low][low_img] もし、ある特定の機能を使用する際には、Modernizr を使用して、`<html>` の class を追加することができる。

> * 🛠 [Customize your Modernizr](https://modernizr.com/download?setclasses)



### JavaScript テスティング



* [ ] **ESLint:** ![High][high_img] ESLint にてエラーが発生しないこと。（あなたの設定またはスタンダードなルールを基準とする。）

> * 📖 [ESLint - The pluggable linting utility for JavaScript and JSX](https://eslint.org/)



**[⬆ トップに戻る](#目次)**

---



## セキュリティ



### ウェブサイトをスキャンして確認する

> * [securityheaders.io](https://securityheaders.io/)
> * [Observatory by Mozilla](https://observatory.mozilla.org/)
> * [ASafaWeb - Automated Security Analyser for ASP.NET Websites](https://asafaweb.com/)



### ベストプラクティス



* [ ] **HTTPS:** ![Medium][medium_img] すべてのページ及び外部コンテンツで HTTPS が使用されている。（プラグイン、画像 ...）

> * 🛠 [Let's Encrypt - Free SSL/TLS Certificates](https://letsencrypt.org/)
> * 🛠 [Free SSL Server Test](https://www.ssllabs.com/ssltest/index.html)
> * 📖 [Strict Transport Security](http://caniuse.com/#feat=stricttransportsecurity)



* [ ] **HTTP Strict Transport Security (HSTS):** ![Medium][medium_img] HTTP ヘッダーには 'Strict-Transport-Security' が設定されている。

> * 🛠 [Check HSTS preload status and eligibility](https://hstspreload.org/)
> * 📖 [HTTP Strict Transport Security Cheat Sheet - OWASP](https://www.owasp.org/index.php/HTTP_Strict_Transport_Security_Cheat_Sheet)
> * 📖 [Transport Layer Protection Cheat Sheet - OWASP](https://www.owasp.org/index.php/Transport_Layer_Protection_Cheat_Sheet)



* [ ] **Cross Site Request Forgery (CSRF):** ![High][high_img] CSRF 攻撃を防ぐために、あなたのサーバーへのリクエストにたいしては、それがあなたのウェブサイト/アプリから送信されていることを確認している。

> * 📖 [Cross-Site Request Forgery (CSRF) Prevention Cheat Sheet  - OWASP](https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet)



* [ ] **Cross Site Scripting (XSS):** ![High][high_img] あなたのサイトには、XSS が可能な脆弱性が存在していない。

> * 📖 [XSS (Cross Site Scripting) Prevention Cheat Sheet  - OWASP](https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet)
> * 📖 [DOM based XSS Prevention Cheat Sheet  - OWASP](https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet)



* [ ] **Content Type Options** ![Medium][medium_img] サーバーからの `X-Content-Type-Options` ヘッダーによって、Google Chrome や Internet Explorer の mime-sniff による Content-Type に一致しない動作を防止する。

> * 📖 [X-Content-Type-Options - Scott Helme](https://scotthelme.co.uk/hardening-your-http-response-headers/#x-content-type-options)



* [ ] **X-Frame-Options (XFO)** ![Medium][medium_img] 来訪者をクリックジャッキング攻撃から保護する。

> * 📖 [X-Frame-Options - Scott Helme](https://scotthelme.co.uk/hardening-your-http-response-headers/#x-frame-options)
> * 📖 [RFC7034 - HTTP Header Field X-Frame-Options](https://tools.ietf.org/html/rfc7034)



* [ ] **Content Security Policy** ![Medium][medium_img] Content Security Policy によってあなたのサイトで、コンテンツがどのように読み込まれるか、許可されている場所から読み込まれているかなどを定義している。これはクリックジャッキング攻撃等からも防御することができる。

> * 📖 [Content Security Policy - An Introduction - Scott Helme](https://scotthelme.co.uk/content-security-policy-an-introduction/)
> * 📖 [CSP Cheat Sheet - Scott Helme](https://scotthelme.co.uk/csp-cheat-sheet/)
> * 📖 [CSP Cheat Sheet - OWASP](https://www.owasp.org/index.php/Content_Security_Policy_Cheat_Sheet)



**[⬆ トップに戻る](#目次)**

---



## パフォーマンス



### ベストプラクティス



- [ ] **ページの重さ:** ![High][high_img] それぞれのページの重さは 500 KB以下である。

> * 🛠 [Website Page Analysis](https://tools.pingdom.com)
> * 📖 [Size Limit: Make the Web lighter](https://evilmartians.com/chronicles/size-limit-make-the-web-lighter)



- [ ] **Minified HTML:** ![Medium][medium_img] HTML が圧縮 (Minify) されている。



* [ ] **Lazy loading:** ![Medium][medium_img] 画像やスクリプト、CSS は、レスポンス時間を改善するために遅延ロードされている。（それぞれのセクションで詳細をみてください。）



* [ ] **Cookie size:** もし Cookie を使用しているなら、4096 バイトを超えていないこと、20以上の Cookie を使用していないこと。

> * 📖 [Cookie specification: RFC 6265](https://tools.ietf.org/html/rfc6265)
> * 📖 [Cookies](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies)
> * 🛠 [Browser Cookie Limits](http://browsercookielimits.squawky.net/)



* [ ] **Third party components:** ![Medium][medium_img] 外部の JS に依存するサードパーティの iframe やコンポーネントは（例えばソーシャル共有ボタン）、可能な限りスタティックなコンポーネントに置き換えられるべきである。これによって外部 API の呼び出しに制限を与えることができ、ユーザーのプライバシーを保護することができる。

> * 🛠 [Simple sharing buttons generator](https://simplesharingbuttons.com/)



### HTTP リクエストの最適化

> * 📖 [Explanation of the following techniques](https://css-tricks.com/prefetching-preloading-prebrowsing/)



* [ ] **DNS resolution:** ![Low][low_img] サードパーティーサービスの DNS には `dns-prefetch` を使用して、アイドル時間中に名前解決を行う。


```html
<link rel="dns-prefetch" href="https://example.com">
```



* [ ] **Preconnection:** ![Low][low_img] サードパーティーサービスの DNS ルックアップ、TCP ハンドシェイク及び TLS ネゴシエーションには、`preconnect` を使用してアイドル時間中に事前に行われている。

```html
<link rel="preconnect" href="https://example.com">
```



* [ ] **Prefetching:** ![Low][low_img] すぐに必要になりそうなリソース（たとえば遅延ロードを行なっている画像）は、`prefetch` を使用してアイドル時間中にリクエストを行なっている。

```html
<link rel="prefetch" href="image.png">
```



* [ ] **Preloading:** ![Low][low_img] そのページで必要なリソース（たとえば `<body>` の最後に設置されているスクリプトなど）には `preload` を使用している。

```html
<link rel="preload" href="app.js">
```

> * 📖 [Difference between prefetch and preload](https://medium.com/reloading/preload-prefetch-and-priorities-in-chrome-776165961bbf)



### パフォーマンステスト



* [ ] **Google PageSpeed:** ![High][high_img] ホームページだけでなく、すべてのページがテストされており、90-100 のスコアであること。

> * 🛠 [Google PageSpeed](https://developers.google.com/speed/pagespeed/insights/)
> * 🛠 [Test your mobile speed with Google](https://testmysite.withgoogle.com)
> * 🛠 [WebPagetest - Website Performance and Optimization Test](https://www.webpagetest.org/)
> * 🛠 [GTmetrix - Website speed and performance optimization](https://gtmetrix.com/)



**[⬆ トップに戻る](#目次)**

---



## アクセシビリティ

> **Notes:** You can watch the playlist [A11ycasts with Rob Dodson](https://www.youtube.com/playlist?list=PLNYkxOF6rcICWx0C9LVWWVqvHlYJyqw7g) 📹



### ベストプラクティス



- [ ] **プログレッシブエンハンスメント:** ![Medium][medium_img] 主要な機能、たとえばメインナビゲーションや検索などは、JavaScript 無しでも動作しなければならない。

> * 📖 [Enable / Disable JavaScript in Chrome Developer Tools](https://www.youtube.com/watch?v=kBmvq2cE0D8)



- [ ] **Color contrast:** ![Medium][medium_img] カラーコントラストは WCAG のレベル AA を満たしている。（モバイル向けには AAA）

> * 🛠 [Contrast ratio](https://leaverou.github.io/contrast-ratio/)



#### 見出し



* [ ] **H1:** ![High][high_img] 全てのページには、サイトのタイトルとは違う H1 がある。
* [ ] **Headings:** ![High][high_img] 見出しは正しい順序で適切に使用されている。（H1 から H6）

> * 📹 [Why headings and landmarks are so important -- A11ycasts #18](https://www.youtube.com/watch?v=vAAzdi1xuUY&index=9&list=PLNYkxOF6rcICWx0C9LVWWVqvHlYJyqw7g)



#### ランドマーク



- [ ] **Role banner:** ![High][high_img] `<header>` には `role="banner"` がある。
- [ ] **Role navigation:** ![High][high_img] `<nav>` には `role="navigation"` がある。
- [ ] **Role main:** ![High][high_img] `<main>` には `role="main"` がある。

> * 📖 [Using ARIA landmarks to identify regions of a page](https://www.w3.org/WAI/GL/wiki/Using_ARIA_landmarks_to_identify_regions_of_a_page)
> * 📖 [ARIA roles categorization](https://www.w3.org/TR/wai-aria/roles#roles_categorization)



### セマンティック



- [ ] **適切な HTML5 `input` タイプが使用されている:** ![Medium][medium_img] これは、キーパッドやウィジェットが様々なタイプにカスタマイズされるモバイルデバイスでは特に重要である。

> * 📖 [Mobile Input Types](http://mobileinputtypes.com/)



### フォーム



* [ ] **Label:** ![High][high_img] `label` は、それぞれのフォーム要素に関連づけられている。もし `label` を表示できない場合には `aria-label` を使用する。

> * 📖 [Using the aria-label attribute - MDN](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute)



### アクセシビリティテスト



* [ ] **アクセシビリティスタンダードテスト:** ![High][high_img] もしアクセシビリティスタンダードに準拠するなら、WAVE ツールを使用してテストを行うことができる。

> * 🛠 [Wave testing](http://wave.webaim.org/)



* [ ] **キーボード操作:** ![High][high_img] すべてのインタラクティブな要素に到達可能で使用可能であることが、目に見える順序でキーボードだけを使ってテストされている。
* [ ] **スクリーンリーダー:** ![Medium][medium_img] すべてのページはスクリーンリーダーでテストされている。（VoiceOver, ChromeVox, NVDA or Lynx）
* [ ] **フォーカススタイル:** ![High][high_img] もし、フォーカスが無効化されているなら、CSS による状態の可視化に置き換えられている。

> * 📹 [Managing Focus - A11ycasts #22](https://www.youtube.com/watch?v=srLRSQg6Jgg&index=5&list=PLNYkxOF6rcICWx0C9LVWWVqvHlYJyqw7g)



**[⬆ トップに戻る](#目次)**

---

## SEO



* [ ] **Google Analytics:** ![High][high_img] Google Analytics がインストールされており、正しく設定されている。
* [ ] **見出し構造:** ![Medium][medium_img] 見出し用のテキストが、そのページの内容を理解することの手助けになっている。
* [ ] **sitemap.xml:** ![High][high_img] `sitemap.xml` が存在しており Google Search Console に登録されている。（旧 Google Webmaster Tools）
* [ ] **robots.txt:** ![High][high_img] `robots.txt` によってブロックされていないこと。

> * 📖 [The robots.txt file](https://varvy.com/robottxt.html)
> * 🛠 Test your robots.txt with [Google Robots Testing Tool](https://www.google.com/webmasters/tools/robots-testing-tool)



* [ ] **構造化データ:** ![High][high_img] 構造化データを使用しており、エラーがないことをテストされている。構造化データはクローラーがそのページのコンテンツを理解するための手助けになっている。

> * 📖 [Introduction to Structured Data - Search - Google Developers](https://developers.google.com/search/docs/guides/intro-structured-data)
> * 📖 [RDFa - Linked Data in HTML](https://rdfa.info/)
> * 📖 [JSON-LD](https://json-ld.org/)
> * 📖 [Microdata](https://www.w3.org/TR/microdata/)
> * 🛠 Test your page with the [Structured Data Testing Tool](https://developers.google.com/structured-data/testing-tool/)
> * 🛠 Complete list of vocabularies that can be used as structured data. [Schema.org Full Hierarchy](http://schema.org/docs/full.html)



* [ ] **Sitemap HTML:** ![Medium][medium_img] HTML サイトマップが提供されており、フッターのリンクからリンクされている。

> * 📖 [Sitemap guidelines - Google Support](https://support.google.com/webmasters/answer/183668?hl=en)

* [ ] **Pagination link tags:** ![Medium][medium_img] Provide `rel="prev"` and `rel="next"` to indicate paginated content.

> * 🛠 [Pagination (rel="prev/next") Testing Tool](https://technicalseo.com/seo-tools/rel-prev-next/)

> * 📖 [Pagination guidelines - Google Support](https://support.google.com/webmasters/answer/1663744?hl=en)

```html

<link rel="prev" href="https://example.com/?page=1">
<link rel="next" href="https://example.com/?page=3">
```



**[⬆ トップに戻る](#目次)**

---



## 翻訳



フロントエンドチェックリストは、他の言語でも提供されています。すべての翻訳者の皆さん、すばらしい仕事をしてくれてありがとう！

* 🇯🇵 Japanese: [miya0001/Front-End-Checklist](https://github.com/miya0001/Front-End-Checklist)
* 🇪🇸 Spanish: [eoasakura/Front-End-Checklist-ES](https://github.com/eoasakura/Front-End-Checklist-ES)
* 🇨🇳 Chinese: [JohnsenZhou/Front-End-Checklist](https://github.com/JohnsenZhou/Front-End-Checklist)
* 🇰🇷 Korean: [kesuskim/Front-End-Checklist](https://github.com/kesuskim/Front-End-Checklist)
* 🇧🇷 Portuguese: [jcezarms/Front-End-Checklist](https://github.com/jcezarms/Front-End-Checklist)
* 🇻🇳 Vietnamese: [euclid1990/Front-End-Checklist](https://github.com/euclid1990/Front-End-Checklist)
* 🇹🇼 Traditional Chinese: [EngineLin/Front-End-Checklist](https://github.com/EngineLin/Front-End-Checklist)
* 🇫🇷 French: [ynizon/Front-End-Checklist](https://github.com/ynizon/Front-End-Checklist)
* 🇷🇺 Russian: [ungear/Front-End-Checklist](https://github.com/ungear/Front-End-Checklist)
* 🇹🇷 Turkish: [erdoganoksuz/Front-End-Checklist](https://github.com/erdoganoksuz/Front-End-Checklist), [eraycetinay/Front-End-Checklist](https://github.com/eraycetinay/Front-End-Checklist)

---



## フロントエンドチェックリストバッジ



もし、フロントエンドチェックリストのルールに従っていることをアピールしたいなら、README ファイルにこのバッジを貼ってください。

➔ [![Front‑End_Checklist followed](https://img.shields.io/badge/Front‑End_Checklist-followed-brightgreen.svg)](https://github.com/thedaviddias/Front-End-Checklist/)

```md
[![Front‑End_Checklist followed](https://img.shields.io/badge/Front‑End_Checklist-followed-brightgreen.svg)](https://github.com/thedaviddias/Front-End-Checklist/)
```



**[⬆ トップに戻る](#目次)**

---



## 貢献

訳注： オリジナル版への貢献と区別するため、オリジナルへの貢献については英語の原文そのままを掲載しておきます。

**Open an issue or a pull request to suggest changes or additions.**

### Guide

The **Front-End Checklist** repository consists of two branches:

#### 1. `master`

This branch consists of the `README.md` file that is automatically reflected on the [Front-End Checklist](http://frontendchecklist.com/) website.

#### 2. `develop`

This branch will be used to make some significant changes to the structure, content if needed. It is preferable to use the master branch to fix small errors or add a new item.

## Support

If you have any question or suggestion, don't hesitate to use Gitter or Twitter:

* [Chat on Gitter](https://gitter.im/Front-End-Checklist/Lobby?utm_source=share-link&utm_medium=link&utm_campaign=share-link)
* [Facebook](https://www.facebook.com/frontendchecklist/)
* [Twitter](https://twitter.com/thedaviddias)

## Authors

**[David Dias](https://github.com/thedaviddias/Front-End-Checklist)**

## Contributors

This project exists thanks to all the people who contribute. [[Contribute]](CONTRIBUTING.md).
<a href="https://github.com/thedaviddias/Front-End-Checklist/graphs/contributors"><img src="https://opencollective.com/front-end-checklist/contributors.svg?width=890" /></a>


## Backers

Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/front-end-checklist#backer)]

<a href="https://opencollective.com/front-end-checklist#backers" target="_blank"><img src="https://opencollective.com/front-end-checklist/backers.svg?width=890"></a>


## Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/front-end-checklist#sponsor)]

<a href="https://opencollective.com/front-end-checklist/sponsor/0/website" target="_blank"><img src="https://opencollective.com/front-end-checklist/sponsor/0/avatar.svg"></a>
<a href="https://opencollective.com/front-end-checklist/sponsor/1/website" target="_blank"><img src="https://opencollective.com/front-end-checklist/sponsor/1/avatar.svg"></a>
<a href="https://opencollective.com/front-end-checklist/sponsor/2/website" target="_blank"><img src="https://opencollective.com/front-end-checklist/sponsor/2/avatar.svg"></a>
<a href="https://opencollective.com/front-end-checklist/sponsor/3/website" target="_blank"><img src="https://opencollective.com/front-end-checklist/sponsor/3/avatar.svg"></a>
<a href="https://opencollective.com/front-end-checklist/sponsor/4/website" target="_blank"><img src="https://opencollective.com/front-end-checklist/sponsor/4/avatar.svg"></a>
<a href="https://opencollective.com/front-end-checklist/sponsor/5/website" target="_blank"><img src="https://opencollective.com/front-end-checklist/sponsor/5/avatar.svg"></a>
<a href="https://opencollective.com/front-end-checklist/sponsor/6/website" target="_blank"><img src="https://opencollective.com/front-end-checklist/sponsor/6/avatar.svg"></a>
<a href="https://opencollective.com/front-end-checklist/sponsor/7/website" target="_blank"><img src="https://opencollective.com/front-end-checklist/sponsor/7/avatar.svg"></a>
<a href="https://opencollective.com/front-end-checklist/sponsor/8/website" target="_blank"><img src="https://opencollective.com/front-end-checklist/sponsor/8/avatar.svg"></a>
<a href="https://opencollective.com/front-end-checklist/sponsor/9/website" target="_blank"><img src="https://opencollective.com/front-end-checklist/sponsor/9/avatar.svg"></a>



## License

[![CC0](https://i.creativecommons.org/p/zero/1.0/88x31.png)](https://creativecommons.org/publicdomain/zero/1.0/)



**[⬆ トップに戻る](#目次)**

[low_img]: https://front-end-checklist.now.sh/low.svg
[medium_img]: https://front-end-checklist.now.sh/medium.svg
[high_img]: https://front-end-checklist.now.sh/high.svg