ベストプラクティス確定事項
特に問題がない限り、公式な標準、または、デファクトスタンダードを可能な限り採用する。
Web 標準に従う。
どこの仕様レベルに合わせるか?
業務アプリなどでは、実際に業務に使うマシンが対応している仕様に合わせるしかない。最低レベルのマシンを用意してテストする。
一般向けアプリでは、8~9割程度が満たす仕様を採用する。残りに合わせようとすると途轍もなくコストが高くなる。
無闇に新しい仕様を使わない。
古いバージョンを使用しているユーザーはそれなりに存在する。
古い仕様はできる限り早めに処分する。
一度移行しそこねると、多段の移行作業が必要となるのでコストが跳ね上がる。
無闇に更新しない。適度な間隔で更新する。
無闇に更新すると、無駄な作業が発生しがち。
特に用がないのであれば、Vanilla JS を使う。無闇にフレームワークを使おうとしない。
http://vanilla-js.com/
もう使わないもの
Internet Explorer (IE, IE11)
なぜIEを捨てるのか?
prototype.js
なぜprototype.jsを捨てるのか?
jQuery
なぜjQueryを捨てるのか?
Web 標準の仕様を読むならまず MDN https://developer.mozilla.org/ja/docs/Web
サポートバージョンが気になるなら、Can I use https://caniuse.com/ を確認する。
厳密な仕様を知りたいなら、WHATWG https://whatwg.org/ , を確認する。
製品レベルのクライアントの JavaScript は bundle(バンドル)、minify (ミニファイ)をする。
試験、開発、趣味レベルではそこまで要求しなくてもよい。
セキュリティ対策を行う。
SEO、クローラ対策に robots.txt を配置する。
秘密にしたい所は必ず Disallow を付けておく。
テストのロケータ(要素の位置捕捉)では id, class 属性を使わず、data-* 属性を使う。(テスト以外の要因で変わらないことを保証する。)
理由
フレームワークが id, class を加工してしまうため不明瞭になりやすい。
名前やスタイルの変更でテストが変わるのを避けたい。
参考
idやclassを使ってテストを書くのは、もはやアンチパターンである https://qiita.com/akameco/items/519f7e4d5442b2a9d2da
未処理例外を捕まえるために unhandledrejection イベントを実装する