カテゴリー内の他の記事

ESLint(JavaScript コードチェッカー)

フォローする

Index

はじめに

JavaScriptのコードチェッカーとして、2016年5月よりご愛用いただいたjswatchdogに代わり、
2018年4月以降は、保守の観点からESLintを推奨します。

また、ESLintの設定として、kintoneのカスタマイズ開発向けの@cybozu/eslint-configを推奨します。

この記事では、初心者の方向けに、ESLintのセットアップ手順をご説明します。

ESLintとは

ESLintは、2013年にNicholas C. Zakas氏がオープンソースプロジェクトとして公開したJavaScriptの構文チェックツールです。
他のツールと異なり、独自のルールを作成して拡張として追加できることが特徴です。
 
ESLintは、柔軟なルールの設定が可能であり、多くのルールセットが公開されています。
有名なルールセットとしては、Google社が公開しているeslint-config-googleがあり、一般のJavaScript開発向けとしても普及しています。
 

@cybozu/eslint-config とは

@cybozu/eslint-configは、サイボウズのエンジニアが用意したESLintのルールセットです。
この中にkintone開発のためのESLintのルールセットも用意されています。

@cybozu/eslint-configの特徴として次のものがあります。

  • kintone開発の際に、コードの品質を保つことができます。(jswatchdogと同様です。)
  • ESLintは元々コマンドラインツールですが、対応エディタに拡張としてインストールして使うこともできます。
    その場合、コーディングしながらリアルタイムでチェックすることが可能です。
  • コマンドライン上で実行するときは、自動修正機能もあります。

コードはGitHub上に公開されています。

対応エディタ

Sublime TextやAtomなどメジャーなエディタに対応しています。今回はVisual Studio Codeで説明します。 対応エディタはESLint公式サイトをご確認ください。

ESLintのセットアップ(Windows)

事前準備

ESLintを実行するには、Node.js とnpm を扱える環境が必要です。

  1. Node.js公式サイトからダウンロードします。公式サイトはこちら
  2. ご自身のパソコンに合わせたインストーラーをダウンロードします。
  3. インストールを実行します。

    「Next」をクリックします。

    2018-02-07_10h46_29.png

    ライセンス規約を確認したら、「I accept the terms in ihe Licence Agreement」にチェックを入れて「Next」をクリックします。

    2018-02-07_10h49_44.png

    Node.jsのインストール先フォルダを選択し、「Next」をクリックします。(デフォルトでOKです。)

    2018-02-07_10h50_26.png

     インストールするコンポーネントを選択し、「Next」をクリックします。(デフォルトでOKです。)

    2018-02-07_10h51_20.png

     「Install」をクリックすると、インストールが開始されます。

    2018-02-07_10h52_02.png

     

    2018-02-07_10h52_52.png

    インストールが終了したら、「Finish」をクリックします。

    2018-02-07_10h52_59.png

    これでNode.jsとnpmがインストールされました。

インストール

ESLintと@cybozu/eslint-configをインストールします。
※ここでは、グローバルインストールの手順をご紹介します。
  1. コマンドプロンプトで「node -v」でNode.jsのバージョンを確認します。バージョンが 8未満の場合はアップデートしてください。
    > node -v
    v8.9.4
  2. 「npm install -g eslint @cybozu/eslint-config」でESLintと@cybozu/eslint-configをインストールします。コマンドを実行するとインストールが開始します。
    > npm install -g eslint @cybozu/eslint-config
    TypeScript とPrettierがインストールされていない場合、警告が出ます。
    こちらの記事で紹介しているESLint の設定である @cybozu/eslint-config/presets/kintone-customize-es5 を使う場合にはTypeScript とPrettierは不要です。
    TypeScript とPrettierが必要な場合、以下のコマンドで TypeScript と Prettier パッケージも一緒にインストールしてください。
    > npm install -g typescript prettier eslint @cybozu/eslint-config
  3. 「npm ls -g --depth=0」で、ESLintと@cybozu/eslint-configがインストールされていることを確認します。
    > npm ls -g --depth=0
    (インストール先フォルダ)\npm
    +-- @cybozu/eslint-config@3.0.2
    +-- eslint@5.10.0
  4. 「.eslintrc.js」ファイルを新規作成します。※ファイル名の先頭に「.」を付けてください。
    kintoneカスタマイズの場合、以下の3行を書き込みます。

    module.exports = {
    "extends": "@cybozu/eslint-config/presets/kintone-customize-es5"
    };
    ※上記の例はES5(ECMAScript5)を使ったkintone開発向けのルールです。
    ES6(ECMAScript2015)を利用したい場合や、Node.js、Reactでの開発を行う場合の設定については、「様々なルールセットを利用する」を参照してください。

     

  5. チェックしたいソースコードを置いているフォルダの親階層に「.eslintrc.js」ファイルを置きます。

    2018-03-26_16h50_07.png
    ※どのフォルダでも同じ設定で実行したい場合は、「C:\Users\ユーザー名」フォルダ等に置いておくと便利です。

コマンドラインでの実行

「eslint ファイル名」または「eslint フォルダ名」で、ESLintを実行します。

例:「test.js」というファイルに対して実行する場合

> eslint test.js

▼「test.js」のサンプルコード

※ESLintが実行できているかどうか確認するため、エラーが出るような内容になっています。

実行結果

実行すると、画像のようにエラー内容が表示されます。

eslint-log.png

サンプルコードの場合は、

  • セミコロンがありません。
  • 演算子の前後はスペースが必要です。
  • 'result'という値が使用されていません。

とエラーが表示されています。

※エラーのないファイルに対して実行するとメッセージは何も表示されません。

エラーが表示された場合、エラーレベル(error/warning)に応じて修正してください。

  • error
    必ず修正してください。JavaScript が動かなかったり、意図しない動作をすることがあります。
  • warning
    なるべく修正することが望ましいですが、必須ではありません。

エラー内容の詳細については、ESLint公式サイトのRulesを参照してください。

エディタへの適用

エディタへの適用方法をご紹介します。

Visual Studio Code(Windows)

WindowsでのVisual Studio Code(以下VSCode)への適用手順をご紹介します。

  • VSCodeを立ち上げて、「拡張機能」をクリックします。

    2018-02-14_17h41_14.png

  • 「ESLint」を検索し、「インストール」をクリックします。

    2018-02-02_16h36_56.png

    インストールが終了したらVSCodeを再起動します。拡張機能はVSCodeを再起動することで有効になります。

実行結果

エラーがあれば入力と同時に検証され、問題がある部分に赤の波線が表示されます。

エラーの詳細内容が「問題」タブに表示されます。

eslint-vscode.png

ESLintに慣れてきた人向けの情報については、ESLintをもっと使いこなすために に進んでください。

 

ESLintのセットアップ(Mac)

事前準備

ESLintを実行するには、Node.js とnpm を扱える環境が必要です。

  1. Node.js公式サイトからダウンロードします。公式サイトはこちら
  2. 「DOWNLOADS」タブをクリックし、ご自身のパソコンに合わせたインストーラーをダウンロードします。
    __________2018-03-05_10.58.20.png
  3. インストーラーをダブルクリックし、インストールを実行します。

    「続ける」をクリックします。
    __________2018-03-05_10.58.37.png

使用許諾契約で「続ける」をクリックします。
__________2018-03-05_10.58.55.png

使用許諾契約を読み、「同意する」をクリックします。
__________2018-03-05_10.59.04.png

インストール先を選択し、「続ける」をクリックします。
__________2018-03-05_10.59.24.png

インストールの種類で「インストール」をクリックします。
__________2018-03-05_10.59.32.png

インストールが終了したら、「閉じる」をクリックします。
__________2018-03-05_11.00.03.png

    これでNode.jsとnpmがインストールされました。

インストール

ESLintと@cybozu/eslint-configをインストールします。
※ここでは、グローバルインストールの手順をご紹介します。
  1. ターミナルで「node -v」でNode.jsのバージョンを確認します。バージョンが6.14未満の場合はアップデートしてください。
    $ node -v
    v8.9.4
    
  2. Macでグローバルインストールする場合、権限エラーが出やすくなります。それを回避するために、
    以下の手順で、別の新規ディレクトリを作成してそちらにインストールするよう設定します。

    2-1.「mkdir」で「.npm-global」というディレクトリを作ります。
    $ mkdir ~/.npm-global
    2-2.「npm config set prefix」で、作成したディレクトリにインストールされる設定をします。
    $ npm config set prefix
    2-3.「vi ~/.profile」で「~/.profile」ファイルを新規作成または開きます。※ファイル名の先頭に「.」を付けてください。
    $ vi ~/.profile
    2-4.「~/.profile」ファイルに以下の1行を書き込みます。※「export PATH」で、システム環境変数を更新しています。
    export PATH=~/.npm-global/bin:$PATH
    (参考)ターミナルのviエディタの操作の一例です。
    2-4-1.「a」でviの入力モードに変更
    2-4-2.  上記の1行を書き込み
    2-4-3. escキーでviのコマンドモードに変更
    2-4-4.「:wq」で保存して終了

    2-5.「source ~/.profile」で、システム環境変数の更新を反映します。
    $ source ~/.profile
  3. 「npm install -g eslint @cybozu/eslint-config」でESLintと@cybozu/eslint-configをインストールします。コマンドを実行するとインストールが開始します。
    $ npm install -g eslint @cybozu/eslint-config
    TypeScript とPrettierがインストールされていない場合、警告が出ます。
    こちらの記事で紹介しているESLint の設定である @cybozu/eslint-config/presets/kintone-customize-es5 を使う場合にはTypeScript とPrettierは不要です。
    TypeScript とPrettierが必要な場合、以下のコマンドで TypeScript と Prettier パッケージも一緒にインストールしてください。
    $ npm install -g typescript prettier eslint @cybozu/eslint-config
  4. 「npm ls -g --depth=0」で、ESLintと@cybozu/eslint-configがインストールされていることを確認します。
    $ npm ls -g --depth=0
    (ホームディレクトリ)/.npm-global/lib
    ├── @cybozu/eslint-config@3.0.2
    └── eslint@5.10.0
    
  5. 「vi ~/.eslintrc.js」で「.eslintrc.js」ファイルを新規作成します。
    $ vi ~/.eslintrc.js
  6. 「~/.eslintrc.js」ファイルに以下の3行を書き込みます。
    module.exports = {
    "extends": "@cybozu/eslint-config/presets/kintone-customize-es5"
    };
    ※上記の例はES5(ECMAScript5)を使ったkintone開発向けのルールです。
    ES6(ECMAScript2015)を利用したい場合や、Node.js、Reactでの開発を行う場合の設定については、「様々なルールセットを利用する」を参照してください。

    (参考)ターミナルのviエディタの操作の一例です。
    6-1.「a」でviの入力モードに変更
    6-2.  上記の3行を書き込み
    6-3.  escキーでviのコマンドモードに変更
    6-4.「:wq」で保存して終了

コマンドラインでの実行

Windowsのコマンドラインでの実行手順と同様です。

エディタへの適用

Windowsのエディタへの適用手順と同様です。

ESLintをもっと使いこなすために

ESLintに慣れてきた方向けに、もう一歩進んだ使い方をご紹介します。

自動修正機能の使用

コマンドラインでの実行で「--fix」オプションをつけると、自動的にコードを修正しファイルが更新されます。
※エラーの種類によっては、自動で修正できないものもあります。

ルール設定の変更

特定のルールを除外したいなど、ルールの設定を変更したい場合は、.eslintrcのファイルを編集します。

  • 例1: Garoonカスタマイズ開発で使う時に、garoonのオブジェクトエラーを除外したい場合
    「globals」のキーを追加し、「garoon」を「readonly」にします。
  • 例2: 特定のルールを除外したい場合
    「rules」のキーを追加し、除外したい設定の値を「off」にします。

以下は、例1と例2の内容を反映した.eslintrcのサンプルです。

様々なルールセットを利用する

ここまでの手順で紹介した設定では、ES5(ECMAScript5:JavaScriptのバージョン)でkintoneのカスタマイズ開発を行う方向けのルールセットを利用していました。
@cybozu/eslint-configには、そのほかのシーンでも活用することのできるルールが用意されています。
必要に応じて、「.eslintrc.js」ファイルを書き換えてご利用ください。

ここでは、代表的なパターンをいくつか紹介します。すべてのルールは、GitHubのREADMEをご覧ください。

ES2017での一般的なコーディング

module.exports = {
  extends: "@cybozu"
};

ES2017でのkintoneカスタマイズ

module.exports = {
  extends: ["@cybozu", "@cybozu/eslint-config/globals/kintone"]
};

Node.js での一般的なコーディング

module.exports = {
  extends: "@cybozu/eslint-config/presets/node"
};

Node.js でのkintoneカスタマイズ

module.exports = {
  extends: ["@cybozu/eslint-config/presets/node", "@cybozu/eslint-config/globals/kintone"]
};

参考サイト

変更履歴

2018/12/21 利用するパッケージを「eslint-config-kintone」から「@cybozu/eslint-config」へ変更

Topに戻る 

記事に関するフィードバック

直接的に記事と関連がないご質問はcybozu developer コミュニティをご活用ください。

Avatar
中村

Windows環境だと.jsファイルで
4:21 error Expected linebreaks to be 'LF' but found 'CRLF' linebreak-style
のCRLFエラーが出ます。
kintoneのJSファイルの行末は、CRLFでも動作するようですが、LFとCRLFのどちらが好ましいのでしょうか?

Avatar
cybozu Development team

中村様

お世話になっております。

cybozu developer network 事務局です。

 

eslint-config-kintoneではLF以外はエラーとなるように設定しております。

しかし、ご自身のプロジェクト等で改行コードを統一していれば、LF/CRLFどちらを利用されても大丈夫です。

※ CRLFの場合は別途eslint-config-kintoneの設定を変更する必要があります。

Avatar
川上

横から失礼します。

error Expected linebreaks to be 'LF' but found 'CRLF' linebreak-style 

 

このエラーを消す設定が全くわからず苦労しております。

どのように設定を変更すれば、このエラーは消えるのでしょうか。

>>

eslint-config-kintoneではLF以外はエラーとなるように設定しております。

※ CRLFの場合は別途eslint-config-kintoneの設定を変更する必要があります。

>>

上記のようにありましたが、詳細をご教授いただければ幸いです。

宜しくお願い致します。

Avatar
cybozu Development team

川上様

 

本記事の「ESLintをもっと使いこなすために」ー「ルール設定の変更」に、特定ルールの除外方法を記載していますのでご確認ください。

改行設定は、エラーメッセージの最後に記載されている通り「linebreak-style」というルールです。

offにしたい場合は

"linebreak-style": "off"

改行設定をWindows(CRLF)で統一したい場合は

"linebreak-style": [
"error",
"windows"
]

とご記載ください。

 

※ルール設定の詳細な書き方は、ESLintの公式サイトに掲載されています。

https://eslint.org/docs/user-guide/configuring#configuring-rules

Avatar
hohashi

すいません。

インストールの2で
npm install -g eslint @cybozu/eslint-config
を実行すると以下のエラーが発生して先に進めません。

----

npm WARN @cybozu/eslint-config@4.0.1 requires a peer of typescript@^3.3.3333 but none is installed. You must install peer dependencies yourself.
npm WARN eslint-plugin-prettier@3.1.0 requires a peer of prettier@>= 1.13.0 but none is installed. You must install peer dependencies yourself.
npm WARN @typescript-eslint/experimental-utils@1.9.0 requires a peer of typescript@* but none is installed. You must install peer dependencies yourself.
npm WARN tsutils@3.14.0 requires a peer of typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev but none is inst

---

解決策があればお教えください

Avatar
cybozu Development team

hohashi 様

お世話になっております。

TypeScript と Prettier がないので warn (警告)が表示されております。
警告なので、TypeScript とPrettier が不要であれば、インストールしなくて 3. 以降に進むことはできるかと思います。

こちらの記事で紹介しているESLint の設定である @cybozu/eslint-config/presets/kintone-customize-es5 を使う場合には不要です。
必要であれば、以下のコマンドで TypeScript と Prettier パッケージも一緒にインストールしていただけないでしょうか。

$ npm install -g typescript prettier eslint @cybozu/eslint-config

よろしくお願いいたします。

Avatar
まちだ

質問です。
「ES2017でのkintoneカスタマイズ」のルールセットを利用したいのですが、

> npm install -g typescript prettier eslint @cybozu/eslint-config

こちらのインストール方法でよろしいでしょうか。
.eslintrc.jsをユーザーホームディレクトリ配下に置いて、どのフォルダのjsをVSCで
開いてもeslintが使えるようにしたいです。


Avatar
cybozu Development team

まちだ 様

お世話になっております。
cybozu developer network 運営でございます。

> こちらのインストール方法でよろしいでしょうか。
> .eslintrc.jsをユーザーホームディレクトリ配下に置いて、どのフォルダのjsをVSCで
> 開いてもeslintが使えるようにしたいです。

はい、こちらのインストール方法でご利用頂けます。

Avatar
まちだ

ご返信ありがとうございます。
申し訳ないのですが、追加で質問させて下さい。

eslint test.jsを実行したところ、以下のエラーが出力されます。
グローバルインストールしたパッケージの場所を認識していないように思うのですが
対処方法があれば教えて下さい。

------------------------------
C:\Users\まちだ>eslint test.js
Oops! Something went wrong! :(
ESLint: 6.1.0.
ESLint couldn't find the config "@cybozu" to extend from. Please check that the name of the config is correct.
The config "@cybozu" was referenced from the config file in "C:\Users\まちだ\.eslintrc.js".
If you still have problems, please stop by https://gitter.im/eslint/eslint to chat with the team.

C:\Users\まちだ>npm ls -g --depth=0
C:\Users\まちだ\AppData\Roaming\npm
+-- @cybozu/eslint-config@6.0.1
+-- eslint@6.1.0
+-- prettier@1.18.2
`-- typescript@3.5.3

npm ERR! peer dep missing: eslint@^5.0.0, required by @typescript-eslint/eslint-plugin@1.13.0
npm ERR! peer dep missing: eslint@^5.0.0, required by @typescript-eslint/parser@1.13.0

Avatar
cybozu Development team

まちだ 様

お世話になっております。
cybozu developer network 運営でございます。

大変申し訳ございません、さきほどのコマンドで eslint 実行可能と申しましたが、
以下のように eslint-plugin-import の追加が必要でございます。

npm install -g eslint @cybozu/eslint-config eslint-plugin-import

また、まちだ 様のエラーは .eslintrc.js に書かれている内容が、エラーとなっている可能性がございますので、
.eslintrc.js の内容をご共有頂けないでしょうか。

以上、ご確認お願い致します。

cybozu Development teamにより編集されました
Avatar
まちだ

ご指摘どおり、以下実行してみました。
(特に前にインストールしたパッケージのuninstallなどしていません)
npm ls -g --depth=0 の実行結果にeslint-plugin-importが見えなくても良いのでしょうか?

eslintrc.jsの内容はtypeコマンドで表示しましたので、見ていただけると助かります。

C:\Users\まちだ>npm install -g eslint @cybozu/eslint-config eslint-plugin-import
C:\Users\まちだ\AppData\Roaming\npm\eslint -> C:\Users\まちだ\AppData\Roaming\npm\node_modules\eslint\bin\eslint.js
npm WARN @cybozu/eslint-config@6.0.1 requires a peer of typescript@^3.3.3333 but none is installed. You must install peer dependencies yourself.
npm WARN eslint-plugin-prettier@3.1.0 requires a peer of prettier@>= 1.13.0 but none is installed. You must install peer dependencies yourself.
npm WARN @typescript-eslint/parser@1.13.0 requires a peer of eslint@^5.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN @typescript-eslint/eslint-plugin@1.13.0 requires a peer of eslint@^5.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN tsutils@3.14.1 requires a peer of typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev but none is installed. You must install peer dependencies yourself.

+ eslint@6.1.0
+ eslint-plugin-import@2.18.2
+ @cybozu/eslint-config@6.0.1
added 22 packages from 13 contributors, removed 5 packages, updated 3 packages and moved 31 packages in 7.928s

C:\Users\まちだ> npm ls -g --depth=0
C:\Users\まちだ\AppData\Roaming\npm
+-- @cybozu/eslint-config@6.0.1
+-- eslint@6.1.0
+-- prettier@1.18.2
`-- typescript@3.5.3

npm ERR! peer dep missing: eslint@^5.0.0, required by @typescript-eslint/eslint-plugin@1.13.0
npm ERR! peer dep missing: eslint@^5.0.0, required by @typescript-eslint/parser@1.13.0

C:\Users\まちだ>type .eslintrc.js
module.exports = {
extends: ["@cybozu", "@cybozu/eslint-config/globals/kintone"]
};
Avatar
cybozu Development team

まちだ 様

お世話になっております。
cybozu developer network 運営でございます。

.eslintrc.js の中身は問題なさそうです。

現状でも、eslint コマンドの実行は不可能でしょうか。

ご確認お願い致します。

cybozu Development teamにより編集されました
Avatar
まちだ

何度もありがとうございます。
残念ながら、現時点でも実行結果は変わらないです。

C:\Users\まちだ>eslint test.js

Oops! Something went wrong! :(

ESLint: 6.1.0.

ESLint couldn't find the config "@cybozu" to extend from. Please check that the name of the config is correct.

The config "@cybozu" was referenced from the config file in "C:\Users\まちだ\.eslintrc.js".

If you still have problems, please stop by https://gitter.im/eslint/eslint to chat with the team.
まちだにより編集されました
Avatar
cybozu Development team

まちだ 様

お世話になっております。
cybozu developer network 運営でございます。

該当のエラーは グローバルに @cybozu/eslint-config パッケージがインストールされていない場合に表示されるエラーとなっております。
一度 今回グローバルにインストールされたパッケージをすべて削除し、再インストールか、
ローカルに @cybozu/eslint-config をインストールして動作するか確認お願いできますでしょうか。

お手数ですがよろしくお願い致します。

Avatar
まちだ

グローバルに再インストール(uninstall後)してみましたが、事象に変化ありませんでした。
ローカルにインストールすれば、カレントのjsについては正常にeslintが実行できました。

ソースの配置がまとまっておりませんので、グローバルで利用したかったのですが残念です。

まちだにより編集されました
Avatar
cybozu Development team

まちだ 様

お世話になっております。
cybozu developer network 運営でございます。

グローバルにインストールされたモジュールへのパスが通っていない可能性がございます。

外部サイトではございますが、こちらの一度ご確認お願い致します。
https://qiita.com/shintarogit/items/70f193829f4360dca771

以上、よろしくお願い致します。

Avatar
まちだ

ご回答いただき、助かりました。
NODE_PATHを設定することで、eslitのコマンド実行はどのフォルダでも正常に動作しました。
ありがとうございました。

ログインしてコメントを残してください。