この記事はTSKaigi Advent Calendar 2024 17日目の記事です。
はじめに
こんにちは、TSKaigi2024運営メンバーのsukeです。
皆さんはTSKaigi2024、TSKaigi Kansai2024に参加しましたか?
どちらも素晴らしいトークが勢揃いでしたので、もし参加できなかった方は、ぜひアーカイブをチェックしてみてください。
今回はTSKaigi2024のトークからTypeScriptコミュニティの関心事を振り返ってみます。
※ あくまで個人がTSKaigi2024のトークから読み取った事でありTypeScriptコミュニティの総意ではありません。
Full-Stack TypeScript
フロントエンド、バックエンドをTypeScriptを統一するアーキテクチャで、TSKaigiの理事を務めている丹羽さんが、名称の統一を呼び掛けてます。
TypeScriptエコシステムの発展により、フロントエンド、バックエンドの両方でTypeScriptを採用する事例が増えてきました。
個人的には主に以下の2点がメリットだと感じています。
- 領域横断のコスト削減
- ドメインロジックや型などの共通化
フルスタック的な立ち回りが必要な組織において、1言語で領域を横断できるのは学習コストやスイッチングコストの点で魅力的です。
TypeScriptが扱えるだけでよく、2言語の経験を求める必要がないため、スタートアップの採用とも相性が良さそうなアーキテクチャです。
トークの中でもこれらの点について言及されています。
さらに、Honoなどのフレームワークや、Prisma、Drizzle ORM、Kyselyといった ORM エコシステムの発展により、Full-Stack TypeScriptを後押しする基盤が整備されつつあります。
Prisma 5.19のPreview Featureとして導入されたTypedSQLによって生のSQLに対しても自動で型が付くようになり、型安全性が一段と向上しています。
関数型プログラミング
関数型プログラミング系のトークからは、以下の2点に注目が集まっていると感じました。
- try-catchより成功、失敗を表現するResult、Either型を用いた明示的なエラーハンドリング
- neverthrow、fp-ts
- fp-ts、Effectを用いたドメインロジックの堅牢性
TypeScript、JavaScriptの世界でもtry-catchによるエラーハンドリングから、ResultやEither型を利用した関数型プログラミングの手法が注目を集めるようになってきています。
neverthrowやfp-tsなどのライブラリを導入することで、型安全かつ明示的なエラーハンドリングを導入する事例が増えつつあります。
また、複雑なドメインロジックの設計においては、fp-tsやEffectといったライブラリを活用することで、コードベースの堅牢性や予測可能性を高める事例も増えてきました。
しかし、トークでも言及されている通り、オンボーディングのコストも増加するため、厚めのコードレビューや適用させるスコープを限定的にするなどの考慮も必要です。
これらのライブラリを安易に採用すべきではないと思っていますが、活用できた際の堅牢性も理解できるため、社内勉強会などで少しずつ布教したいところです。
型安全なAPI
APIリクエストの型安全性やクライアントコード自動生成は、もはや当たり前の時代になりつつあります。
また、tRPCのようにスキーマやコード生成を必要としない技術の採用事例も増えてきました。
ReactのRSCの登場によって、求められるAPI設計は変わってきそうですが、APIの型とクライアントコードの自動生成周りのライブラリは比較的安定してそうです。
codemodを用いたリファクタリング
ts-morphのような、いわゆるcodemodを利用したリファクタリングに関するトークから、大規模なコードベースに対する効率的なリファクタリング手法についての関心も高まっていると感じます。
codemodは以前から存在しますが、TypeScriptが普及したことで、JavaScript時代より安全に自動変換できるようになりました。
TypeScriptの抽象構文木を用いた、数百を超える API の大規模リファクタリング戦略
のスライドでも言及されていますが、私もマイグレーションスクリプトの要不要でライブラリを使い分けています。
- マイグレーションスクリプトが必要 -> ts-morph
- マイグレーションスクリプトが不要 -> ast-grep
codemodを利用する頻度はそこまで多くありませんが、必要なタイミングでうまく活用できると実装工数を大幅に下げられるので、覚えておきたい話題です。
Branded Types
トークのテーマとしては採用されていませんが、多くのトーク中でstringなどのプリミティブ型で表現されるID型などを、Branded Typesでより堅牢にする手法が紹介されていました。
実行時のオーバーヘッドなしで型安全にできるので、積極的に採用したいです。
せっかくなのでBranded Typesについては、Effectのドキュメントをご覧ください。
おわりに
TSKaigi2024のトークを振り返ると、TypeScriptエコシステムはより堅牢で効率的な開発を実現する方向に進んでいると感じました。
一方で、型が複雑になるにつれて型チェックのパフォーマンスが問題になることも増えてきており、パフォーマンス改善の手法にも関心が高まってきています。
この記事で紹介できたのはほんの一部ですが、TypeScriptはあらゆる分野で活用され、ますます多様な方向へ広がっています。
皆さんは来年、TypeScriptがどのような進化を遂げると思いますか?
2024年のトークを振り返りながら2025年のTSKaigiを待ちましょう!
TSKaigiについて
2025年5月23日/24日にTSKaigi 2025が開催されます!
TSKaigiは日本最大級のTypeScriptをテーマとした技術カンファレンスです(前回の参加者2000人以上)
TypeScriptに興味のある方は、ぜひ公式サイトやXを確認してみてください。