TypeScript on ESLint の未来

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">The future of TypeScript on ESLint:<a href="https://t.co/PTCWKWN22s">https://t.co/PTCWKWN22s</a></p>&mdash; ESLint (@geteslint) <a href="https://twitter.com/geteslint/status/1086327058572005377?ref_src=twsrc%5Etfw">January 18, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

[ESLint] の [TypeScript] サポートの今後について、[公式にアナウンスがありました](https://eslint.org/blog/2019/01/future-typescript-eslint)。

要点をまとめると、

1. TypeScript チームが TSLint から ESLint に切り替えていくと発表したよ。
2. ESLint チームと TypeScript チームが協力して開発を進める場として、[typescript-eslint] プロジェクトを開始したよ。
3. 既存の部品は新しいプロジェクトの org に移動するよ ([typescript-eslint-parser] は [@typescript-eslint/parser] になる、等)。

という感じです。

以下は公式アナウンスの翻訳です。

----

数週間前、TypeScript チームは、ESLint を正式に採用し、ESLint に対する TypeScript の互換性を改善するための作業を説明した[ロードマップ](https://github.com/Microsoft/TypeScript/issues/29288)を共有しました。

> Linting について
>
> - ESLint の検証ルール
>     - TSLint と同等のこと
>     - 性能と安定性
> - ESLint のエディタ統合機能
> 
> 私たちが数ヶ月前に VS Code で行った調査で、ユーザーが Linting について不満に思っていることが分かりました。私たちのチームの一部は JavaScript の編集体験の改善に打ち込んでいる (訳注: TypeScript は JavaScript ファイル上での入力補完をサポートしている) ので、私たちのエディタ チームは TSLint と ESLint の両方をサポートするための作業を開始しました。しかし、TSLint には性能に関するアーキテクチャ上の問題があることに気がつきました。TSLint をより効率的に動作するよう修正するには、既存の検証ルールが動作しなくなるような API の変更が必要です。 (`wotan` が提供するような互換 API を提供しない限り)。
> 
> 一方で、ESLint は既に効率的なアーキテクチャを有しています。さらに、さまざまなユーザー コミュニティが ESLint 用に構築された検証ルール (React Hooks や Vue など) を持っていますが、TSLint にはありません。
> 
> これらのことから、私たちのエディタ チームは (両方ではなく) ESLint を活用することに焦点を当てることにしました。 ESLint が現在サポートしていないシナリオ (例えば 意味論の検証や program-wide な検証) のために、ESLint の TypeScript サポートを TSLint と同等にするための貢献を進めます。これが実際にどのように機能するかの最初の試行として、TypeScript リポジトリで ESLint を利用し、作成した検証ルールを上流 (訳注: `eslint-plugin-typescript` だと思う) に送ります。
>
> https://github.com/Microsoft/TypeScript/issues/29288

私たちは、多くの JavaScript および TypeScript コミュニティと同じように、この発表に非常に興奮しました。 ここ数年で、James Henry、Kai Cataldo、Kevin Partington、長島 徹 (訳注: ←私)、Nicholas Zakas など、ESLint チームの一部が TypeScript の互換性の向上に取り組んできました。その作業は、主に TypeScript 構文解析器である [typescript-eslint-parser] の開発でした。また、TypeScript 向けの追加ルール集である [eslint-plugin-typescript] は (ESLint チームがサポートしていた訳ではありませんが) 最近まで Nicholas と James によって保守されていました。これらが TypeScript-in-ESLint の話題の中心的存在として、適切に扱われることを確実にしたいと考えました。

## `typescript-eslint` プロジェクトの発表

James Henry (ESLint の TypeScript サポート開発のリーダー) は [typescript-eslint] プロジェクトを開始しました。これは、今まで複数のリポジトリに分散して管理されていた TypeScript-in-ESLint 関連プロジェクト (訳注: [typescript-estree], [typescript-eslint-parser], and [eslint-plugin-typescript]) の包括的な開発拠点になります。

ESLint チームは正式には新しいプロジェクトに関与しませんが、私たちは James の努力を全面的に支持し、TypeScript 開発者にとって最高の ESLint 体験を確実にするために、このプロジェクトをサポートし続けます。

## どのように変わるか

1. [typescript-eslint-parser] は破棄されます。<br>
   代わりに [@typescript-eslint/parser] を利用してください。
1. TypeScript サポートがどのように行われるかに興味のある方は、[typescript-eslint] リポジトリをフォローしてください。

私たちは TypeScript コミュニティと ESLint コミュニティの協調を歓迎し、James と [typescript-eslint] チームがどのように ESLint を TypeScript コードの作成に最適な選択肢にしてくれるかを楽しみにしています。

[ESLint]: https://eslint.org/
[TypeScript]: https://www.typescriptlang.org/
[typescript-eslint-parser]: https://github.com/eslint/typescript-eslint-parser
[eslint-plugin-typescript]: https://github.com/bradzacher/eslint-plugin-typescript
[typescript-estree]: https://github.com/JamesHenry/typescript-estree
[typescript-eslint]: https://github.com/typescript-eslint/typescript-eslint
[@typescript-eslint/parser]: https://www.npmjs.com/package/@typescript-eslint/parser