Open13

どんなプロジェクトにもお勧めできる、汎用的な JavaScript/TypeScript の OSS をとにかくまとめる

somnicattussomnicattus

Node.js

最も普及している、ブラウザに依存しない JavaScript 実行環境(ランタイム)です。

Deno や Bun など新興の JavaScript 実行環境も盛り上がっているものの、蓄積されたノウハウ、拡張性、稼働実績に裏付けられた安定性には圧倒的な差があると思います。

https://qiita.com/access3151fq/items/2466126b612fad1c084a

今後 ESModule が普及したりサーバサイド JavaScript の標準化が進んだりすれば状況は変わるかもしれませんが、 Node.js もアップデートされ続けますし、状況が変化するには十年以上かかるでしょう。

somnicattussomnicattus

pnpm

とにかく早い npm パッケージマネージャー(JavaScript/TypeScript のライブラリを管理するもの)です。

他に npm パッケージマネージャの選択肢は Node.js に同梱されている npm と少し前まで主流だった Yarn がありますが、 npm はあまりに遅いですし、 Yarn は v2 (berry) 以降独自路線に進みすぎていてトラブルシューティングに困ることが多いです。

なお、Bun や Deno の同梱パッケージマネージャは元々高速なので、これらを使用する場合はあえて pnpm にする理由はありません。

somnicattussomnicattus

TypeScript

Microsoft がメンテナンスする、 JavaScript に静的な型の概念を導入した言語です。

ソースコードがある程度の規模になると、型のない JavaScript ではメンテナンス性に限界が訪れます。

型レベルのプログラミングを極めれば、他のプログラミング言語ではなかなか味わえない面白い開発体験ができます。

https://zenn.dev/michiharu/articles/7139212b3b3093

https://zenn.dev/michiharu/articles/6a4dc4f7655668

somnicattussomnicattus

tsx

Node.js で TypeScript を直接実行するためのツールです。 React で使う JSX とは関係ありません。

少し前までは ts-node が使われていましたが、 ts-node は型をチェックするので tsx より遅いです。

https://qiita.com/ssssota/items/115a906e960bcfabb46b

esbuild をベースにしているため、 CommonJS や TypeScript の一部の実験的機能は使用できないことに注意してください。

なお、 Deno や Bun は追加のツールなしで TypeScript を直接実行できます。

somnicattussomnicattus

ESLint

コードの品質を保つルールを設定できるリンターです。コードの品質はメンテナンスのコストに大きく影響するので、導入をお勧めします。

一昔前までは TypeScript 専用の TSLint という選択肢もありましたが、こちらは現在メンテナンスされておらず非推奨になっています。

新興の Biome と比べると、設定がやや面倒である点と実行速度が遅い点が気になります。

somnicattussomnicattus

eslint-config-love

TypeScript 用の ESLint のプラグイン群と設定の標準的なプリセットです。以前は eslint-config-standard-with-typescript という名前でした。

2024-10-12 現在、 ESLint 9 への対応が遅れていますが、活動を見る限りもう間もなく対応しそうです。

(追記: ちょうどこのコメントをした日に v85.0.0 がリリースされ、 ESLint 9 に対応しました。)

somnicattussomnicattus

Prettier

JavaScript/TypeScript が主な対象のフォーマッターです。インデント、一行の長さ、セミコロンや末尾カンマなどのフォーマットを統一できます。

ESLint と併用する場合は、ESLint に eslint-config-prettier を導入してルールが競合しないようにします。

ESLint のかわりに Biome を使用する場合は、Biome がフォーマッター機能を持っているため、Prettier の導入は不要です。

somnicattussomnicattus

DefinitelyTyped

型情報を持たないライブラリ向けに TypeScript の型(d.ts 宣言ファイル)パッケージを提供するプロジェクトです。

例えば @types/node をインストールすると、 consolefs などの Node.js が提供する機能の型が分かるようになります。

somnicattussomnicattus

Remeda

unique()pick() などの関数を提供する JavaScript/TypeScript のユーティリティライブラリです。

Lodash や Ramda といった古参のユーティリティライブラリと似た使用感ですが、軽量で使いやすく、厳密な型定義を提供しています。

somnicattussomnicattus

TypeBox

シンプルで高速、 TypeScript フレンドリーな JSON Schema ビルダー & バリデータです。

まだ 0.x 系なので破壊的変更の頻度が高いのが少し気になりますが、古参の Zod より機能も豊富で使いやすいと思います。

somnicattussomnicattus

type-fest

便利なユーティリティ型を提供する TypeScript の型ライブラリです。

使うだけでも便利ですが、ソースコードを読むと型レベルプログラミングの勉強になります。

somnicattussomnicattus

Vitest

Vite という JavaScript バンドラーを基に作られたテストフレームワークです。

古参の Jest と比べて高速で、 TypeScript のテストを直接実行でき、ESM にも対応しています。 Jest と互換性のある API を持っているため、 Jest からの移行も容易です。

esbuild をベースにしているため、 CommonJS モジュールや TypeScript の一部の実験的機能は使用できないことに注意してください。

Deno を使う場合は最初から充実したテストランナーを備えているので、Vitest を選ぶ必要はないかもしれません。