どんなプロジェクトにもお勧めできる、汎用的な JavaScript/TypeScript の OSS をとにかくまとめる
Node.js
最も普及している、ブラウザに依存しない JavaScript 実行環境(ランタイム)です。
Deno や Bun など新興の JavaScript 実行環境も盛り上がっているものの、蓄積されたノウハウ、拡張性、稼働実績に裏付けられた安定性には圧倒的な差があると思います。
今後 ESModule が普及したりサーバサイド JavaScript の標準化が進んだりすれば状況は変わるかもしれませんが、 Node.js もアップデートされ続けますし、状況が変化するには十年以上かかるでしょう。
pnpm
とにかく早い npm パッケージマネージャー(JavaScript/TypeScript のライブラリを管理するもの)です。
他に npm パッケージマネージャの選択肢は Node.js に同梱されている npm と少し前まで主流だった Yarn がありますが、 npm はあまりに遅いですし、 Yarn は v2 (berry) 以降独自路線に進みすぎていてトラブルシューティングに困ることが多いです。
TypeScript
Microsoft がメンテナンスする、 JavaScript に静的な型の概念を導入した言語です。
ソースコードがある程度の規模になると、型のない JavaScript ではメンテナンス性に限界が訪れます。
型レベルのプログラミングを極めれば、他のプログラミング言語ではなかなか味わえない面白い開発体験ができます。
tsx
Node.js で TypeScript を直接実行するためのツールです。 React で使う JSX とは関係ありません。
少し前までは ts-node が使われていましたが、 ts-node は型をチェックするので tsx より遅いです。
ちなみに、 Deno や Bun は追加のツールなしで TypeScript を直接実行できます。
TSConfig bases
TypeScript の設定ファイル tsconfig.json
のプリセット群です。 node22
, react-native
などのランタイムごとの設定や、 strictest
という静的チェック用の設定が用意されています。
全部手動で設定するのは大変なので、ここから選んだものを extend してカスタムするとよいです。
ESLint
コードの品質を保つルールを設定できるリンターです。コードの品質はメンテナンスのコストに大きく影響するので、導入をお勧めします。
一昔前までは TypeScript 専用の TSLint という選択肢もありましたが、こちらは現在メンテナンスされておらず非推奨になっており、実質的に ESLint が唯一の選択肢です。
eslint-config-love
TypeScript 用の ESLint のプラグイン群と設定の標準的なプリセットです。以前は eslint-config-standard-with-typescript という名前でした。
2024-10-12 現在、 ESLint 9 への対応が遅れていますが、活動を見る限りもう間もなく対応しそうです。
(追記: ちょうどこのコメントをした日に v85.0.0 がリリースされ、 ESLint 9 に対応しました。)
Prettier
JavaScript/TypeScript が主な対象のフォーマッターです。インデント、一行の長さ、セミコロンや末尾カンマなどのフォーマットを統一できます。
ESLint と併用する場合は、ESLint に eslint-config-prettier を導入してルールが競合しないようにします。
DefinitelyTyped
型情報を持たないライブラリ向けに TypeScript の型(d.ts
宣言ファイル)パッケージを提供するプロジェクトです。
例えば @types/node
をインストールすると、 console
や fs
などの Node.js が提供する機能の型が分かるようになります。
Remeda
unique()
や pick()
などの関数を提供する JavaScript/TypeScript のユーティリティライブラリです。
Lodash や Ramda といった古参のユーティリティライブラリと似た使用感ですが、軽量で使いやすく、厳密な型定義を提供しています。
Vitest
Vite という JavaScript バンドラーを基に作られたテストフレームワークです。
古参の Jest と比べて高速で、 TypeScript のテストを直接実行でき、ESM にも対応しています。 Jest と互換性のある API を持っているため、 Jest からの移行も容易です。