Node.jsの進化とTypeScriptランタイムの未来
- publishedAt:
- 2024/12/18
- updatedAt:
- 2024/12/18
2024年 ユウトの一人アドベントカレンダーの⚫️日目の記事です。
Intro
先日、node.jsのtsサポートに関して再度理解するというブログを書きました。
TypeScriptが現代の開発現場で当たり前になりつつある今、Node.jsはどのようにその流れに対応してきたのでしょうか? また、DenoやBunといった競合ランタイムと比較して、どこに優位性があるのでしょうか。本記事では、この進化の過程と未来を考察します。
前提
- 何かを批判したいわけではないです。
- JavaScriptも素晴らしいです。むしろ筆者はJSのまま書けるなら書きたいです。
TypeScriptを使った開発が当たり前に
現代の開発において、フロントエンドでもバックエンドでも、JavaScriptを生で書かず、TypeScriptで書かれることが多くなりました。 JavaScriptで書かれたNode.jsサーバー、大量のコンポーネントが存在するのにpropsに一切の保管が効かない(props-typesは除く)Reactアプリなど、考えるのも怖いと思います。
さらに、ReactやNext.js、Vue.jsやNuxt.jsといったフレームワークたちによって、コンパイルするためにtsconfigを細かく制御したりせずとも、アプリケーションの開発はできるようになってきました。
このおかげで、確実にアプリケーション開発はしやすくなっていると思っています。
しかし、TypeScriptはそのままでは動きません。必ず最終的にはJavaScriptにコンパイルされます。 なので初期の頃は、tscでTypeScriptコードをコンパイルし、その出力されたJavaScriptファイルをエントリポイントとしてアプリケーションを動かす必要がありました。
けどもうそれは過去の話になろうとしています。というかもうなっています。
ここからは、Node.jsの強豪のなるDeno, Bunを見ていきつつ、最後にNode.jsの動きも見ていきます。
Denoの誕生
Node.jsの生みの親、ライアンダールが作ったのがDenoです。 ちなみにDenoはNodeの単語をもじっています。そしてこれは、TypeScriptランタイムだと書いてあります。
これはDesign Mistakes in Nodeという有名な反省文があると思いますが、こちらを解消しつつ、生まれたものになってます。 ただ2024年Denoバージョンの反省文もそういえば出ていたような気がしますが。
TypeScriptランタイムだと言っているように、DenoではTypeScriptファイルがそのまま動きます。 以下は公式ドキュメントのものです。
// main.ts
function greet(name: string): string {
return `Hello, ${name}!`;
}
console.log(greet("world"));
$ deno main.ts
Hello, world!
--checkをつければtscを使い、ないときはswcを使ってトランスパイルを行っているようです。
いわゆる、元祖TypeScriptランタイムと言えるほど、DenoがTypeScriptのサポートを牽引したといえます。
Bunの登場
2代目かどうかはわかりませんが、同じくTypeScriptランタイムのBunです。 色々言われていますが、筆者としてはこういう進み方もいいんじゃないかなと思っています。何事も、新しいことに挑戦しようとする時は周囲からの否定的な意見がつきものです。 ただ採用するかはわかりません。
そしてBunもDenoと同じく、TypeScriptファイルを実行できます。 ただ、Denoと違うのはtscを内部で持っていないので、もし型のチェックが必要な場合は自分で追加する必要があります。 トランスパイルはしてくれるそうです。(なんかパッと見た感じTranspilerってAPIがやってそう...??)
Node.jsの進化
結構ざっくりですが、これまで存在したTypeScriptランタイムについてみていきました。 大事なのは、それらは後発のランタイムで、Node.jsをもとに、改善点を見つけ生まれたのでが彼らであるといえます。
Node.jsはここ最近、かなり積極的に新機能を入れている印象で、特に2024年度は、require ESMとTypeScript Supportがやはり熱かったと思います。 他にもbuilt-in系が進化したような印象もあります。
この二つが入ったのが特徴的で、DenoもBunも、モジュールのサポートはESModulesになっています。
圧倒的既存ユーザーを持ったNode.jsが、後発組の良さも取り入れて更なる進化をしているのはとても良いことに感じます。
健全なランタイムの争い
- Node.jsの反省から生まれたDeno
- 速度を追求し、独自の発展を続けるBun
- 後発組から影響を受け更なる進化を続けるNode.js
今後、Node.jsがTypeScriptの完全サポートを進める中で、DenoやBunはどのような進化を見せていくのでしょうか。 Bunはおそらく今と同じで、速度を注視しながら引き続き発展を続けていくのではないでしょうか。 どちらかとえばDenoの動向が気になるところで、Denoの良さをNode.jsが取り入れている節もあると思いますが、逆にDenoも そして、ランタイム間の健全な競争は、JavaScriptエコシステム全体をどう進化させていくのか注目が集まります。
Node.jsの進化とTypeScriptランタイムの未来
- publishedAt:
- 2024/12/18
- updatedAt:
- 2024/12/18
0