TSKaigi 2025 参加レポート
はじめに
TSKaigi 2025 は、2025 年 5 月 23 日(金)と 24 日(土)の 2 日間にわたって開催され、私も現地で参加してきました。 本記事では、聴講した講演から得た学びや感想をまとめます。
講演タイトルに、講演概要のリンクと、各節の最後に講演資料のリンクを引用させていただいております。 この場を借りて、TSKaigi 2025 の運営ならびに講演者の方々に心より感謝申し上げます
Day 1
Day 1 は金曜日開催ということもあり、どこか特別な雰囲気を感じました。 また、TSKaigi 初日の未明(日本時間)に TypeScript Native Previews が発表されたこともあり、会場ではその話題で大いに盛り上がっていました。
The New Powerful ESLint Config with Type Safety
Vue をはじめとした著名なソフトウェア開発者である Anthony Fu 氏の講演でした。 氏は最近東京に越してこられたそうで、日本の開発者コミュニティがより活発になりそうで、個人的にもワクワクしています。
講演の中で特に目を引いたのは、Anthony Fu 氏自身が開発されたという ESLint プラグイン eslint-plugin-codegen
です。このプラグインは、TypeScript のコードを決定論的に(deterministic に)書き換える機能を持つとのことでした。
昨今、AI による(ある種の)曖昧さや確率に基づいたコード生成・変更も注目されていますが、それとは対照的に、このような決定的なアプローチによるコード変更は、どこか安心感を覚えるものがあります。
高度な型付け、どう教える?
「型パズル」とも呼ばれる難解な型付けの教え方について、新しいアプローチが提案されました。 提案されたのは、JavaScript を用いて型演算を擬似的に表現する教材を用意し、それを通じて理解を促すというものです。 この方法は、型の概念をより直感的に把握するのに役立ち、特に複雑な型定義を学ぶ際に有用だと感じました。
一方で私自身の主な関心は、型パズルのような複雑な型定義の実装は type-fest
のようなユーティリティライブラリに委ね、開発者はそれらが提供する型関数をいかに効果的に活用していくか、という点にあります。
この自身の課題意識について改めて考える良いきっかけとなった講演でした。
TypeScript で実践するクリーンアーキテクチャ ― Web からも CLI からも使えるアプリ設計
TypeScript でクリーンアーキテクチャを実践する方法について、豊富な具体例を交えて解説された、まさに力作と言える講演でした。
特に、依存関係逆転の原則(DIP)については、図解を効果的に用いた説明が非常に分かりやすく、今後この原則について誰かに説明する際に、ぜひ参考にさせていただきたいと思いました。 また、講演の「おまけ」として語られた「ボブおじさん」こと Robert C. Martin 氏に関する Tips も興味深く、クリーンアーキテクチャの歴史や背景について、要点を掴みながら楽しく学ぶことができました。 ボブおじさんのように、私も常に愉快に、そして楽しくソフトウェア開発を続けていきたいものです。
TSConfig から TypeScript の世界を覗く
TSConfig の設定を見直すきっかけになればと思って聴講しましたが、気づけば TypeScript の理論的な話にまで展開し、予想以上に聴き応えのある内容でした。 変性(variance)の話など、個人的に少し懐かしい話題に触れる場面もあり、改めて TypeScript は理論的にも奥深く、面白い言語だと感じました。 最近のオプションの動向についても知ることができ、自身の tsconfig を見直したいという気持ちになりました。
AI Coding Agent Enablement in TypeScript
AI を活用したコーディングエージェントがどの程度実用段階にあるのかという話題は、最近の技術トレンドの一つであり、非常に興味深いテーマです。
講演の中で特に印象に残ったのは「解空間」という言葉です。この言葉は、AI エージェントに質の高いコードを生成させるためのアプローチを考える上で、非常に効果的な説明の枠組みを提供していました。講演では、「解空間」とは AI が生成しうるコードの範囲を指し、AI に期待通りの働きをさせるためには、この解空間を様々な制約によって適切に狭めていくことが重要である、と解説されました。
この「解空間」という考え方は非常に納得のいくものであり、AI エージェントを効果的に活用していく上での重要なヒントになると感じました。
TypeScript と React で、WAI-ARIA の属性を正しく利用する
「Web アプリケーションアクセシビリティ――今日から始める現場からの改善」の著者の一人である講演者の方が、現状の TypeScript/React における WAI-ARIA の課題点について解説されました。 アクセシビリティは、その実装を誤ると逆効果となり、かえって利用者のアクセシビリティを損ねてしまう可能性もあるため、慎重な取り扱いが求められることはよく知られています。 React においても WAI-ARIA のサポートが一定程度なされていることは認識していましたが、今回の講演では専門家の視点から、現状で何がサポートされているのかという点と、さらにいくつかの具体的な課題点について解説があり、大変勉強になりました。 私自身は、日頃から極力ネイティブ要素の暗黙的なロールを活用するよう努めていますが、今後は現状の TypeScript/React における WAI-ARIA サポートの落とし穴にも注意を払いながら、適切に活用していきたいと改めて思いました。
TypeScript とは何であって何でなく、誰のもので、どこへ向かうのか
壮大な講演タイトルですが、その決定の裏話から始まりました。 どうやら深く悩んだ末に、ある種の勢いで決まったそうです。
現在の TypeScript エコシステムは一種の「戦国時代」であり、SWC や Rspack のようなバンドラー、ビルダーが乱立している状況であると指摘されました。 このような混乱した状況下では、技術を選定する能力が一層重要になると強調されていました。
技術選定や「審美眼」の重要性には身が引き締まる思いでしたが、同時に、歴史を振り返れば技術選定がいかに難しい問題であるかも感じます。 技術選定の話を伺うと、私自身は「当時、React という選択肢を主体的に選び取れただろうか?」という問いに思い至ります。 正直なところ、選べなかったのではないかと考えています。日本の充実したコミュニティなどを理由に、Vue を選んだような気がするのです。
審美眼を磨くにはどうすれば良いのか、改めて考える良い機会になりました。
Day 2
二日目は土曜日開催ということもあり、Day 1 で参加できなかった方も Day 2 から参加されている方も見られました。 Day 1 の勢いそのままに、 Day 2 も多くの方が参加されており、会場は熱気に満ちていました。
TypeScript ネイティブ移植観察レポート TSKaigi 2025
TypeScript を Go に移植して 10 倍速くするというプロジェクトは大きな話題ですが、今回の講演ではその動向が講演者の視点から非常に丁寧に整理されました。
後方互換性を意識することや、決定的なアプローチを追求することなど、TypeScript 移植のような巨大プロジェクトに真摯に向き合う開発者の姿勢は、同じ開発者として胸が熱くなるものがあり、その営みには敬意を感じざるを得ませんでした。このような大規模な取り組みの経緯や詳細を丹念に調べて、私たちに共有してくださった講演者の方には感謝の気持ちでいっぱいです。
個人的に特に印象に残ったのは、Go 移行後の世界では ts-morph の継続が難しいかもしれない という点です。大量のコードを決定的に変更したい際に、TypeScript の AST を分かりやすい API で扱える ts-morph
の使い心地は素晴らしく、大変お世話になってきただけに、この話には少々寂しさを覚えました。
TypeScript Language Service Plugin で CSS Modules の開発体験を改善する
CSS Modules を使った開発体験を改善するために解決策を自ら開発されたという、講演者の方の技術力の高さが光る講演でした。
問題設定から解決策の提示に至るまでの流れが非常に自然で、終始楽しく聴講することができました。 具体的に述べると、まず出発点として「React コンポーネント等で CSS Modules のプロパティ補完が効かないなど、言語機能の弱さが開発体験を損ねている」という日常的な課題を提示。次に「そもそも言語機能はどこから提供されるのか?」という問いから Language Server Protocol (LSP) の基礎に立ち返り、理解を促します。 そして、「既存の解決策である React CSS modules は VSCode 拡張として実装されているが、自身はエディタを問わない形で提供したい」という明確な課題意識と目的を提示し、「だから自作した」という結論に至る論理展開は、非常に納得感があり、聞いていて心地よかったです。
この丁寧な導入と動機付けのおかげで、講演後半の技術的な詳細についても、自然と興味を持って聞き入ることができました。
Pragmatic Functional Programming in TypeScript
関数型のアプローチとオブジェクト指向のアプローチは二律背反ではないという理解は持っていましたが、それを周囲に説明する際の適切な参照先を提示できずに悩んでいました。 この講演は、オブジェクト指向で書かれたコードに対しても、関数型のアプローチを効果的に取り入れられることを示す内容であり、まさに求めていたものでした。 講演で紹介された考え方や事例は、今後、関数型アプローチの導入例を周りに紹介する際の資料として活用できそうです。
これまで私自身、周囲には "Make illegal states unrepresentable" という原則の重要性を言い続けてきましたが、 今回、この考え方に加え、Dmitrii Kovanikov 氏が X (旧 Twitter) でこれも含めた「5 つの原則」として紹介されていることを知りました。 これからは、この「Dmitrii Kovanikov の 5 原則」として伝え続けようと思います。
技術書をソフトウェア開発する - jsprimer の 10 年から学ぶ継続的メンテナンスの技術
JS Primer は、JavaScript の基礎を学べる入門書であり、OSS プロジェクトでもあります。 この講演では、JS Primer という JavaScript 入門書のプロジェクトを 10 年間続けてこられた方が登壇されました。
10 年もプロジェクトを続けるのは並大抵のことではないため、その秘訣は何だろうかと聴きながら考えていました。 結局のところ、その秘訣とは「凡事徹底」であるということが伝わる内容でした。
講演は「ドキュメントであってもソフトウェア開発と同じ」という言葉で締められていましたが、10 年という実践の重みが伴ったその言葉は、やはり味わいが違います。 当たり前のことを当たり前に続けることの大切さを、改めて感じました。
機能的凝集の概念を用いて複数ロール、類似の機能を多く含むシステムのフロントエンドのコンポーネントを適切に分割する
この講演では、コンポーネント分割の判断基準として、主に「論理的な凝集」と「機能的凝集」に焦点を当てて解説がなされました。
特に印象的だったのは、豊富なサンプルコードと共に、実際の開発に役立つ具体的な内容が多く紹介された点です。 このようにサンプルコードが充実していると、講演内容をチームに共有する際にも理解を深めやすく、非常に有用だと感じました。 また、この講演は凝集度について改めて考える良い機会となり、早速、講演で得た知見を活かしてチームメンバーが抱える課題に対してアドバイスをすることもできました。
TS 特化 Cline プログラミング
「Cline に全部賭けろ」で有名な mizchi 氏の講演ということもあり、会場内は多くの人で賑わっていたように感じました。
以前、講演者である mizchi 氏の成果物を参考にさせていただいた経験があるのですが、当時とは異なり、現在はより短いルールセットを利用されていると知り、大変驚きました。
講演の中で特に印象的だったのは、テスト駆動開発(TDD)の重要性を繰り返し強調されていた点です。 手前味噌で恐縮ですが、私自身も以前「フロントエンドにおけるテスト駆動開発の実践と概説」という記事を執筆しており、テスト駆動開発については多少の知見があります。 この経験から得た知見が、予想もしない形で役立つことがあるのだなと、改めて実感しました。
まとめ
あっという間の 2 日間でした。 得られた知見や学びは多く、そして何より「TypeScript は楽しい!」ということを再認識できました。 来年もこの素晴らしい「お祭り」が開催されることを心から願っています。 改めて運営の方々、そして素晴らしい講演をしてくださった登壇者の皆様には心から感謝申し上げます。
私たちのチーム、Belong では、TypeScript を用いたフロントエンド開発を日々楽しんでいます。今回のレポートで触れたような技術トピックは、チーム内でもよく話題に上がり、学びを共有することも日常的です。 本記事を通じて Belong に少しでも興味を持っていただけたら、ぜひエンジニアリングチーム紹介ページをご確認いただき、カジュアル面談などお気軽にお声がけいただけると大変嬉しいです。