ESLint Flat Configで誰もが簡単に Lintを設定できる時代へ

76.5K Views

April 01, 23

スライド概要

新しいESLintの設定方法、ESLint Flat Configを紹介します。

profile-image

Accelerating development with type safety / 🌎Web 🎉TypeScript ⚛️React 🏝Kotlin / 📝http://zenn.dev/t_keshi / 💼 @SansanTech

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

ESLint Flat Configで 誰もが簡単に Lintを設定できる時代へ🥳 2023/04/01 CREATED BY t-keshi

2.

t-keshi Web / TypeScript / React / Kotlin http://zenn.dev/t_keshi

3.

本日はESLint Flat Configの話

5.

☞ キャッチアップする - デフォルトでsourceTypeがesmoduleになった - デフォルトで.mjsや.cjsも対象とするようになった - ecmaVersionの指定が"latest"になった - extendsプロパティが無くなった などなど。

6.
[beta]
/)
///)
/,.=゙''"/
/
i f ,.r='"-‐'つ____こまけぇこたぁいいんだよ!!
/
/
_,.-‐'~/⌒ ⌒\
/
,i
,二ニ⊃( ●). (●)\
/
ノ
il゙フ::::::⌒(__人__)⌒::::: \
,イ「ト、 ,!,!|
|r┬-|
|
/ iトヾヽ_/ィ"\
`ー'´
/

ひとことでまとめると、、

7.

誰でも簡単にLintの設定が 書けるようになった

8.

じ ゃ 最 な 高 い で す か 最高である!!! そ れ っ て

9.

駆け足で振り返るLintの歴史

10.

Q.以下のconsole.logの出力は? console.log(isNaN(true)); TRUE FALSE

11.

じ ゃ 最 な 高 い で す か ありがとうLint!!!

12.

JavaScriptはLintがないと駄目な子 ブラウザで動く(ほぼ)唯一のプログラミング言語 ⇨ 後方互換性を捨てられない ⇨ 理解不能な仕様が永遠に残り続ける LintなしでJavaScriptを書くなんて、 命綱なしでバンジージャンプするようなもの

13.

そこで JSHint / TSLint / ESLint JavaScriptを陰で守ってきた 立役者たち...

14.

選ばれたのはΕSLintでした https://npmtrends.com/eslint-vs-jshint-vs-tslint

15.

そして、ESLintは JSの未来を一身に背負ってきた...

16.

しかし、 だからこそ複雑になりすぎてしまった 独自シンタクス... extends… 暗黙の了解...

17.

そんな中、 彗星のごとく現れた救世主 それが、、

18.

ESLint Flat Config

19.

それは誰でもLintが設定できる技術 JavaScriptさえわかればOK グッバイ、ESLint独自構文👋

20.
[beta]
import customConfig from "eslint-config-custom";
export default [
customConfig,

例えば、

{
files: ["**/*.js", "**/*.cjs"],
rules: {
"semi": "error",
"no-unused-vars": "error"

JavaScriptと同じように、
直感的にわかりやすい構文

}
},
{
files: ["**/*.js"],
rules: {
"no-undef": "error",
"semi": "warn"
}
}
];

Override!

21.

そろそろ Flat Conigが書きたくて うずうずしてきましたか? では早速、

22.

Let's Lint

23.

でもちょっと待って 慌 て る な 改めて考えたいLintの意義

24.

メンタルモデルを変えよう! 🤬口うるさい教師 ✨最も低コストで運用できるテスト

25.

󰢃NG例)ぼくのかんがえたさいきょうのりんと 時代は関数型プログラミングなんや...! わいはeslint-plugin-lodash-fp入れるんや...! Lintはみんなのもの。

27.

今度こそ本当にLet's Lint

28.

※注意事項 Flat Configは2023年4月現在、 Experimental Featureになっています。 導入はあくまでも自己責任でお願いします。 また、設定ノウハウの蓄積もWeb上に少ないので 場合によっては難しいと感じる部分もあるかもしれません。

29.

基本は3STEP 1 2 3 ベースとなる 環境に合わせて 必要に応じて 設定集を選ぶ Pluginを入れる 独自設定を足す

30.

STEP1: ベースとなる設定集を選ぶ ESLintには200〜300ほどの ルールの設定項目がある(!!) 自分で一から設定するのは超困難 ⇨ベースとなる設定集を選ぼう!

31.

選択肢は大きく3つ airbnb / standard / google (どれを選べばいいんだッ?!)

32.

一番人気はairbnb https://npmtrends.com/eslint-config-airbnb-vs-eslint-config-google-vs-eslint-config-standard

33.

airbnb vs standard airbnbはモリモリの設定 standardはシンプルな設定 IMO: 最初はシンプルな設定にして 少しずつ足していくのがおすすめ https://zenn.dev/tapioca/articles/5685d794f6452b

34.
[beta]
// .eslintrc
{

設定サンプル

"extends": ["standard"]
}

config形式がflat configに対応しきれ
てない関係上、ここは少しややこしい

// eslint.config.js
import { FlatCompat } from '@eslint/eslintrc'

const compat = new FlatCompat()

export default [
...compat.extends('eslint-config-standard'),
]

35.

STEP2: 環境に合わせてPluginを入れる 多種多様なPluginがある pluggableなところがESLintの思想であり魅力でもある 一例) ● eslint-plugin-import ● eslint-plugin-react ● eslint-plugin-jest ● eslint-plugin-storybook

36.
[beta]
import ts from "@typescript-eslint/eslint-plugin"

例えば、

import tsParser from "@typescript-eslint/parser"
export default [{
files: ["src/**/*.ts", "src/**/*.tsx"],
languageOptions: {

TypeScript環境に

parser: tsParser,

TypeScript用のLintを入れる

},
plugins: {
"@typescript-eslint": ts,
},
rules: {
...ts.configs["recommended"].rules,
...ts.configs["eslint-recommended"].rules,
}

https://www.sunapro.com/eslint-flat-config/

}];

37.

STEP3: 必要に応じて独自設定を足す ただ一つの完璧なLintの設定なんて存在しない 今の自分たちの状況に最もフィットするベストなLintにしよう ESLint Flat Configは スタマイズしやすい ...

38.
[beta]
import jsdoc from "eslint-plugin-jsdoc";

例えば、

export default [
{
files: ["**/*.js"],

せめてJSDocを書きたい

plugins: {
jsd: jsdoc

TypeScript化が間に合わないチーム

}
rules: {
"jsd/require-description": "error",

右のようなlintConfigを置くことで

"jsd/check-values": "error"
}

JSDocの記述を強制できる

}
];

https://eslint.org/blog/2022/08/new-config-system-part-2/

39.

ということで 新しいESLintの設定方法、 かなり直感的ではないでしょうか? Lint 職人は もう 要らねぇ

40.

Enjoy Your Lint Life!!!

41.

ご清聴ありがとうございました!

42.

参考資料 ● ESLint's new config system, Part 2: Introduction to flat config ● Config File Simplification ● Flat Config導入完了! 新しいESLintの設定フォーマットを使ってみた ● eslintをflat configで書き換える ● ESLintのconfigがどのように変わり得るか(flat configとは何か)

43.

利用素材 ● 『ブラックジャックによろしく』マンガデータ ● Azusa 3大体いい感じのスライドを作るための無料テンプレート