standard style を使っている oss まとめ

![スクリーンショット 2016-12-25 1.25.19.png](https://qiita-image-store.s3.amazonaws.com/0/13825/2480bebc-5d1d-8285-7452-666e28bba730.png)

[standard][standard] は [feross][feross] が作った *だいたい* 全部入りの JavaScript の style checker です。

内部的に [eslint][eslint] を使っていますが、ルールの変更が基本的に不可能だったり(ルールについてプロジェクト毎に考えるべきでないという思想のため)、リントすべきファイルについてのルールがあらかじめ含まれていたりして、eslint を生で使う場合に比べて、考えることを大幅に減らせることが特徴です。

# :star2: 特徴

- **セミコロンなし**
- **2-space** インデント
- ルール単位でのでコンフィグ**不可**
    - ルールをコンフィグできない事でスタイルを統一するべきという思想のため。
- プラグイン単位での追加は可能 (例えば、eslint-plugin-react を追加するなどはできる)
- cli (`standard`) を引数なしで呼び出すと、リントすべきファイルを勝手に全てリントしてくれる

# :globe_with_meridians: standard style で書かれているレポジトリ (随時追加中)

- [npm](https://github.com/npm/npm) by npm
- [next.js](https://github.com/zeit/next.js) by zeit
- [choo](https://github.com/yoshuawuyts/choo) by yoshuawuyts
- [bel](https://github.com/shama/bel) by shama
- [hyperdrive](https://github.com/mafintosh/hyperdrive), [peerflix](https://github.com/mafintosh/peerflix) by mafintosh
- [menubar](https://github.com/maxogden/menubar) by maxogden
- [greenkeeper](https://github.com/greenkeeperio/greenkeeper) by greenkeeper.io
- [nyc](https://github.com/istanbuljs/nyc) by bcoe
- [standard-version](https://github.com/conventional-changelog/standard-version) by conventional-changelog
- [node-tap](https://github.com/tapjs/node-tap) by isaacs
- [electron](https://github.com/electron/electron) by github
- [karma](https://github.com/karma-runner/karma) by google
- [yargs](https://github.com/yargs/yargs) by yargs team
- [bitcoinjs-lib](https://github.com/bitcoinjs/bitcoinjs-lib) by BitcoinJS
- [engine.io](https://github.com/socketio/engine.io) by socket.io
- [deku](https://github.com/dekujs/deku) by dekujs
- [umbrella](https://github.com/umbrellajs/umbrella) (semistandard) by umbrellajs
- [mocha](https://github.com/mochajs/mocha) (semistandard) by mocha team

# :chart_with_upwards_trend: eslint-config-standard vs eslint-config-airbnb

standard が内部的に使っている eslint の config は eslint-config-standard として公開されていますが、eslint shared config の DL 数としては、eslint-config-airbnb の方が2倍程多くインストールされています (どちらも今は増加傾向)。

http://www.npmtrends.com/eslint-config-airbnb-vs-eslint-config-standard

![スクリーンショット 2016-12-25 0.34.24.png](https://qiita-image-store.s3.amazonaws.com/0/13825/0f35dc53-edd0-143d-967b-e44f4a683153.png)

# [xo][xo]

[xo][xo] は [sindresorhus][sindresorhus] が作った、standard にかなり似たツールです。ルールが最初から全部入りなところと、ファイルを勝手に探してくれるところは、standard と同じです。特徴としては、 standard と違ってルールのコンフィグを許すところが、standard と大きく違います。デフォルトは、セミコロン**有り** / **タブ**インデントですが、コンフィグで変更が可能です。

eslint のルール自体は全体的に standard よりかなり厳しく、ダウンロード数は standard より圧倒的に少ないです。

ちなみに、2016年中頃まで、eslint-config-google は [eslint-config-xo を extends していました](https://github.com/google/eslint-config-google/blob/9c35a8ec797ca544c15b9d72c0dda9cda274cd4d/index.js)。(最近、ほぼスクラッチから書き直す形に変えたようです。)

# まとめ

個人的には、考えることを減らすという点が気に入ってるので、今の所は、ほとんどのレポジトリ (OSS) で standard を使っていますが、気になるところは、eslint-config-airbnb の方がダウンロード数が多く、airbnb/javascript の方がスター数が多い点です。今後の動向次第では、やっぱり standard じゃなかったになるかもしれないため、今後の動向に要注意と感じています。(結局、スタイルとしての優劣というより、コミュニティに受け入れられるかどうかという話でしかないと思われるため、特に、数的な動向に注目しています。)

[feross]: https://github.com/feross
[standard]: https://github.com/feross/standard
[eslint]: https://github.com/eslint/eslint
[xo]: https://github.com/sindresorhus/xo
[sindresorhus]: https://github.com/sindresorhus