ESLintのShareable ConfigでJavaScript用とは別にTypeScript用のパッケージを提供する場合のパターン

[ESLint](https://eslint.org/)の[Shareable Config](https://eslint.org/docs/latest/developer-guide/shareable-configs)で、JavaScript用とは別にTypeScript用のパッケージを提供する場合のパターンについて調べました。

## 経緯

自分が管理しているJavaScript/TypeScriptのリポジトリにおいて、中身がほとんど同じESLintの設定ファイルがいくつか存在します。
これではメンテナビリティ的によろしくないので、共通化できそうな部分をShareable Configとして公開することを検討中です。
その際、JavaScript用とTypeScript用のパッケージをそれぞれ提供することで、リポジトリごとに使用するパッケージを選択できるようにしたいと思います。
そこで、世のShareable Configではどのような手法がとられているのか調べてみることにしました。

## 調査方法

[npmjs.com](https://www.npmjs.com/)で以下のクエリで検索し、参考になりそうなパッケージをピックアップしました。

- [eslint config typescript](https://www.npmjs.com/search?q=eslint%20config%20typescript)
- [eslint config ts](https://www.npmjs.com/search?q=eslint%20config%20ts)

## eslint-config-adidas-typescript

https://www.npmjs.com/package/eslint-config-adidas-typescript

- `dependencies`に[eslint-config-adidas-es9](https://www.npmjs.com/package/eslint-config-adidas-es9)が含まれる
- ユーザー自身で`eslint-config-adidas-es9`をインストールする必要はない

## eslint-config-salesforce-typescript

https://www.npmjs.com/package/eslint-config-salesforce-typescript

- 依存に[eslint-config-salesforce](https://www.npmjs.com/package/eslint-config-salesforce)は含まれない
- `eslint-config-salesforce`とは完全に独立しているので、インストールする必要はない

## eslint-config-standard-with-typescript

https://www.npmjs.com/package/eslint-config-standard-with-typescript

- `dependencies`に[eslint-config-standard](https://www.npmjs.com/package/eslint-config-standard)が含まれる
- ユーザー自身で`eslint-config-standard`をインストールする必要はない

## eslint-config-twilio-ts

https://www.npmjs.com/package/eslint-config-twilio-ts

- `dependencies`に[eslint-config-twilio](https://www.npmjs.com/package/eslint-config-twilio)が含まれる
- ユーザー自身で`eslint-config-twilio`をインストールする必要はない

## eslint-config-wantedly-typescript

https://www.npmjs.com/package/eslint-config-wantedly-typescript

- 依存に[eslint-config-wantedly](https://www.npmjs.com/package/eslint-config-wantedly)は含まれない
- `eslint-config-wantedly`とは完全に独立しているので、インストールする必要はない

## まとめ

TypeScript用パッケージから見たJavaScript用パッケージとの依存関係は、以下の通りです。

|TypeScript用パッケージ|JavaScript用パッケージ|依存関係|
|---|---|---|
|[eslint-config-adidas-typescript](https://www.npmjs.com/package/eslint-config-adidas-typescript)|[eslint-config-adidas-es9](https://www.npmjs.com/package/eslint-config-adidas-es9)|`dependencies`|
|[eslint-config-salesforce-typescript](https://www.npmjs.com/package/eslint-config-salesforce-typescript)|[eslint-config-salesforce](https://www.npmjs.com/package/eslint-config-salesforce)|-|
|[eslint-config-standard-with-typescript](https://www.npmjs.com/package/eslint-config-standard-with-typescript)|[eslint-config-standard](https://www.npmjs.com/package/eslint-config-standard)|`dependencies`|
|[eslint-config-twilio-ts](https://www.npmjs.com/package/eslint-config-twilio-ts)|[eslint-config-twilio](https://www.npmjs.com/package/eslint-config-twilio)|`dependencies`|
|[eslint-config-wantedly-typescript](https://www.npmjs.com/package/eslint-config-wantedly-typescript)|[eslint-config-wantedly](https://www.npmjs.com/package/eslint-config-wantedly)|-|

## 所感

パッケージ名のサフィックスは`-ts`のほうが短くてよさそうなものですが、`-typescript`としているものが多いのが意外でした。
TypeScript用パッケージの依存にJavaScript用パッケージを含めるかどうかは悩みどころですが、そのあたりは先にJavaScript用パッケージをつくってから決めてもいいかもしれません。