個人的TypeScriptおすすめツールを紹介したい

TypeScriptはJavaScriptに静的型付け構文を導入し拡張した言語です。
TypeScriptを使うメリットとして、エディタ、デバッガ、各種ツールなどから支援を受けられることが挙げられます。

本記事では、筆者が使ってみて便利だったTypeScript周りのツールを紹介したいと思います。


# typescript-eslint

eslintはTypeScript/JavaScriptのコーディングスタイルのチェックをしてくれるツールです。
eslintにはTypeScript用のプラグインがあります。それがこの「typescript-eslint」です。

https://typescript-eslint.io/

このプラグインを使うと、
- Promiseのawait忘れの検知（no-floating-promise）
- 不要なnon-null-assertionの検知
- 不要な型宣言の検知（`string | "foo"`など）

などが可能になるため、より堅牢なTypeScriptプログラムを記述することができます。

##### インストール方法

> ```shell
> npm install --save-dev eslint @eslint/js typescript typescript-eslint
> ```
> https://typescript-eslint.io/getting-started

# dprint（フォーマッター）

フォーマッターはソースコードの整形をしてくれるツールです。
エディタの設定で「Format on Save」を有効にしておくと、保存時に自動でソースコードが整形されるようになるので便利です。

TypeScriptのフォーマッターとしては、「prettier」「biome」なども有名かと思いますが、筆者のイチオシはdprintです。

https://dprint.dev/

dprintのメリットとして、改行の挿入位置を箇所によって変えられるというのがあります。
具体的には、1つのファイルの中で、「関数の括弧の後に改行する箇所」と「関数の括弧の後に改行しない箇所」を両方作ることができます。
例えば以下の例のように、上の`console.log`は改行なしでフォーマット、下の`console.log`は改行ありでフォーマットのようにすることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678625/0d98a412-c1c7-8b26-feac-646e4980a555.png)
▲フォーマット後のファイル

これを特に設定なしで実現できるところが、dprintのおすすめポイントです。

既存プロジェクトに後からフォーマッタを導入するときや、チームメンバーがフォーマッタの設定で喧嘩している時は、dprintを導入してみてはいかがでしょうか。

##### [インストール方法](https://dprint.dev/install/)

```shell
$ npm install dprint
$ npx dprint init
```

# esbuild

esbuildはTypeScriptをJavaScriptに変換するツール（トランスパイラ）です。

https://esbuild.github.io/

「TypeScriptをJavaScriptに変換する」という作業は、esbuild以外のツール、例えば`tsc`や`webpack`、`babel`、`swc`などのツールを使ってもできます。

これらの中でesbuildが優れている点は、

- 多様なオプションが指定できる
- プラグインがたくさん用意されている
- 高速（Go言語製）
- コマンドライン実行とプログラムからの呼び出しどちらも可能
- 開発が継続されている

という点です。
esbuildはとにかく指定できるオプションが多く、esbuildを使っていれば、コンパイルする際のユースケースは9割方カバーできるのではないかと思っています。

また、ESM対応などもしっかりされており、開発が継続している点もいいなと思っています。

プログラム上からimportして使用することもできるので、スクリプトなどに組み込んで使うこともできるのが便利です。

# tsx（コマンドラインツール）

コマンドラインツールの方のtsxです。TypeScriptをトランスパイルなしで直接実行できます。

https://tsx.is/

```shell:tsxでTypeScriptを実行
$ tsx index.ts
```


同種のツールの`ts-node`よりも動かし方が簡単で、ESM対応もされているところがオススメポイントです。

[vscodeのdebuggerとして仕込んでおく](https://tsx.is/vscode)こともできます。

同種の（TypeScriptを直接実行する）ツールとしてはDenoもおすすめです。node_modulesが無いので、任意のディレクトリでちょっとした書き捨てスクリプトを動かす際に便利です。

https://deno.com/

# TypeScript Playground

こちらはwebサイト上でTypeScriptコードが書けるPlaygroundです。

https://www.typescriptlang.org/play/

URLをコピペして他人に共有することができます。
型エラーが出て困っているとき、チームメンバー間でエラーが出ているスニペットを共有するのに使っています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678625/1d3f7865-09a1-36eb-b0ff-546730146b66.png)


# Pretty TypeScript Errors（vscode拡張）

TypeScriptのわかりづらいエラーをvscode上できれいに表示してくれる拡張機能です。

https://marketplace.visualstudio.com/items?itemName=yoavbls.pretty-ts-errors


TypeScriptでは、ネストしたオブジェクトなどでエラーメッセージが長くなってしまうことがあります。この拡張機能を使うと、エラーのデバッグが捗ります。

##### 参考記事

https://zenn.dev/miruoon_892/articles/2fd9932115048b

# Prettify TypeScript (vscode拡張)

こちらはvscode上でTypeScriptの型情報を分かりやすく表示してくれる拡張機能です。

https://marketplace.visualstudio.com/items?itemName=MylesMurphy.prettify-ts

記事執筆時点ではまだpreview版ですが、変数の詳細な型を展開して表示してくれるので便利です。

# zod（ライブラリ）

便利なTypeScriptライブラリはたくさんありますが、私がどのプロジェクトでも必ず入れているのがzodです。

zodはスキーマ検証ライブラリです。変数のバリデーションを行ったり、TypeScriptの型を生成したりすることができます。

https://zod.dev/

```ts
import { z } from "zod";

// スキーマ定義
const schema = z.object({
  foo: z.string(),
  bar: z.number(),
});

// バリデーション（スキーマの定義に一致しなければエラーがthrowされる）
const data = schema.parse(input);
```

フロントエンドでのユーザー入力チェックや、バックエンドでのリクエストパラメータのバリデーションに使用しています。

また、[OpenAPIのyamlスキーマを自動生成する](https://github.com/asteasolutions/zod-to-openapi)のにも使っています。
[hono](https://hono.dev/)などのWebフレームワークとも組み合わせることができて便利です。

##### 参考記事

https://zenn.dev/fumito0808/articles/29ad3c1b51f8fe

# type-fest

type-fectはTypeScriptのユーティリティ型を提供するライブラリです。

https://github.com/sindresorhus/type-fest

TypeScriptで型の操作をしたいときに使っています。

例えば

- 型Aと型Bをマージした型を作りたい
- 型Aからxxxを取り除きyyyを加えた型を作りたい

といった際に利用しています。

##### 参考記事

https://zenn.dev/t0daaay/articles/1f531bd9f352bc

https://shisama.hatenablog.com/entry/2019/12/23/080000


# まとめ

今回は、私が個人的にTypeScript周りで便利だと感じているツール・ライブラリを紹介しました。
皆さんもぜひこれらのツールを使って快適なTypeScriptライフを送ってください！