linter と ale と lsp の関係

読む際の注意

  • ESLint, Prettier, ale, LanguageClient-neovim を使って、何かを作ったことはありません
  • 設定方法などについては、書きません。

結論

  • ESLint: コードのエラーや未使用の変数などの構文(syntax)チェックを実施する linter。書式(format)もやれるが、1行の長さとかは検知できないので、 pretteir に任せるのがいい。
  • Prettier: 1行の長さや、スペース・タブなどの書式チェックを実施する formatter。書式のルールは prettier の中で設定されており、これを使用する
  • Airbnb JavaScript Style Guide: 書式のルールの一つ。 Prettier のルールと違っている部分があるので、 Prettier と合わせて使う場合は、 ESLint の plugin を使用する
  • ale: Vim の非同期構文・書式チェッカー plugin。構文チェッカは自動的に検知することが可能で、書式チェッカは設定しないといけない。ale 自身にはチェッカとして機能はないので、単体では意味がない
  • lsp: ソースコードを解析して、補完や定義ジャンプ、コード実行、構文チェックを実行するためのプロトコル。構文チェックの性能は ESLint より同じというわけではない

ESLint

  • コードのエラーや未使用の変数などのコードの品質に関わる箇所を確認する JavaScript の linter
  • JavaScript の Formatter としても動くが、設定する箇所が多い、チェックできない箇所があるなどがあり、使われていることは少なく、Prettier に任せる事が多い
  • Prettier とは plugin で連携することが可能
  • Prettier と Airbnb のコーディングルール両方を使用する場合は、ESLint の plugin を使用する。

Prettier

  • スペースやタブ、1行の文字数などの書式に関わる箇所を確認する Formatter
  • コーディングスタイルのルールについては、Prettier の基本ルールがあり、それを使用する
  • ESLint とは違い、少ない設定だけですむ
  • JavaScript だけではなく、HTML, CSS, YAML などにも使用可能

Airbnb JavaScript Coding Style Guide

  • JavaScript のコーディングルールの一つ
  • コーディングルールなのでソフトではない
  • Prettier 内のルールと違う箇所があり、Prettier と併用して使用する場合は、ESLint を使用する

ale

  • 非同期で linter ・ formatter を実行してくれる vim の plugin
  • ale 自体には linter ・ formatter を行う機能はなく、単体では意味がない。linter, formatter と vim の仲介役。
  • JavaScript だけではなく、 Python, C++, Markdown などの他の言語の linter 達にも対応している
  • linter は自動検知することが可能
  • formatter は設定をしないといけない
  • エラー・警告内容一覧を作成すること可能
  • lsp に対応しており、lsp を使用しての lint や補完、定義ジャンプ、参照検索も可能

Language Server Protocol(lsp)

  • ソースコードを解析して、補完、定義ジャンプ、参照検索、構文チェック、lint などを実行するプロトコル
  • プロトコルを使用するには、解析するコードの言語の Language server と、lsp のクライアントが必要
  • LanguageClient-neovim + javascript-typescript-langserver との組み合わせを (N)Vim で触ってみたが、ale より lint 結果が表示されるのは速いが、insert や書き込み時に lint を実行するのように、実行タイミングを任意に決定することはできず、On の場合は、コードが変更する毎に lint が実行される。

プログラミング以外の用語に置き換える

JavaScriptという国があり、その国の会社は従業員(コード)に2つのチェックを実施しています。国の法律を違反しているものを所持していないかのボディ(syntax)チェックと服装や身だしなみ(format)チェックです。
大半は自社ではなく、専門の業者に委任します。2つとも可能である ESLint と身だしなみチェック専門の Prettier が大手です。Prettier は ESLint より細かく確認するので、身だしなみチェックにおいては ESLint より優秀です。身だしなみチェックのルールはいくつもあり、Prettier は Prettier で決めたルールを使用しています。Prettier だけではなく、 airbnb のルールも合わせ使いたいという場合は、ESLint が二つのルールを確認しながら、作業を行います。
Vim という離島にある会社の場合は、ale という会社の仲介役として間にいれることがあります。ale は ESLint のようなボディチェックの業者の Vim に入るための書類の手続きを自動にやってくれます。 Prettier はボディチェックの業者ではないので、やってくれないため、依頼者側でやらないといけません。ale は仲介役なので、ale だけでは、チェック作業を行うことはできません。
ESLint と ale を使わない方法で、lsp と呼ばれている業界の会社を使うことも可能ですが、業界専門の仲介役が必要です。lsp の会社はボディチェック以外にも、他の業務を任せることも可能です。ただ、lsp は身だしなみチェックをやっていない可能性もあるので注意してください。

ESLint のボディチェックは法律を違反しているものの他に、必要ないものなどもチェックしてくれます。
ESLint と Prettier は連携が可能で、Prettier がいれば、 ESLint の身だしなみチェックも Prettier と同じようにやってくれます。
ale を使用するとチェックを実施するタイミングは依頼者側が自由に決めることが可能です 。また、違反内容のリストを作成してくれます。lsp はタイミングは依頼者側が自由に決めることはできなく、リストを作成してくれないこともありますが、チェック結果が提出される速度は ale より速いです。

参考資料

ESLint と Prettier

Prettier と airbnb