初参加です。両日共に参加いたしました。以下、レポートをいたします。
スケールの大きさ
最初に圧倒されたのは集まった人数の多さです。公式発表で800人以上が現地参加でした。それだけ TS が注目されていることが分かりますね。実際会場も広く、何百人も集まって一斉に発表を聞くというのはなかなか楽しいものがありました。
また、昼食が用意されていたり、飲み物のセルフサービスがあるなど、ホスピタリティも満点でした。参加はしませんでしたが、フェイスペイント・ネイルペイントやマッサージなど、会場企画も盛り沢山。流石、世界一の規模のTSイベントを伊達に名乗っていません。
全てが終わった後の交流会もものすごい規模で、なかなか話しかけるのが大変でしたが、何人かが話しかけてくれてよかったです。いろいろな人の事情を知ることができるのは交流会のいいところ。
難点を強いて言うなら、2日間参加するのがすごく疲れたことですかね。ただでさえ体力不足だというに、両日とも自宅から通ってしんどかったです。来年参加する際はホテルを取るか迷っています。
印象に残った発表
さて、カンファレンスの花と言えば発表ですね! もちろんハイクオリティなものばかりでした。参加した中からいくつかピックアップします。
業務に残された「よくない型」で考える「TypeScriptの難しさ」(Saji)
発表者は、プロダクトの中での「よくない型」を以下の基準で分けています。
- 境界で起きているのか (例:イベントハンドラ)
- 押し戻せるのか (e.g. any が不要か)
その中で、パターンを以下の通りに分類しました。
- 型ガードやヘルパー関数を使って回避できるもの
- Array や Object の集約メソッド回り (
Array.protptpype.filter,Object.fromEntriesなど)。部分的構造型による推論がうまくいかないもの - 単純に力業が必要な型定義。対応させたい値とキーを別々に組み立てたり、引数の Union 型と返り値の関係がとりづらいものなど
最悪の場合 any などを使い、どうしてそうしたかをコメントするなどの対策が必要です。このような「よくない型」の棚卸をAIに助けてもらうことを勧めていました。実際のコードベースからの知識があり、学びのある発表だったと思います。
類似の発表としては「TypeScriptはどのようにどこまで推論できるのか ─ とにかく as は禁止で(ypresto)」もありました。
Stage 3 Decorators でできること / できないこと(susisu)
ECMAScript (TC39) の仕様案である Decorators を、TypeScript の先行実装と比較して学ぶという、非常に知的好奇心をそそられる発表でした。
TS実装が進みすぎていたということと、デコレーターの需要のニッチさがよくわかりました。
TypeSpecで繋ぐ複数プロダクトの型安全 — スキーマ共有による「型契約」の実践(mitsui)
TypeSpec は初耳でした。TS 同様の掻き方ができるスキーマ共有。なかなか実践的ですね。
TypeScript の型で副作用の実行順序を制御する(yanaemon)
あまり使いたくないが、実務ではなかなか避けるのが難しい「副作用」。特に実行順序に関わるものは難しいです。
それを型を使って順序間違いをエラーにできないかという短いながら濃厚な発表でした。
また、Effect-TS などの副作用を扱うライブラリの説明があり、それらがある中であえてやる意義というのも伝わってきました。
制約と時代から読み解くTypeScriptコンパイラ設計史(Yoshiaki Togami)
TypeScript が持つ循環参照と、AST の後付け動作が起こっている理由について学びました。TS 搭乗時の JS ツーリングの貧弱さや、Roslyn の red green tree という再帰構造が使えない理由も興味深かったです。
キャリア25年目にしてTypeScript に出会うまで(かねうちてつや)
様々な言語を経験したエンジニアが、TS をそれぞれの良さを受け継いだ言語として語っているのが印象深かったです。Python のような広大なエコシステム、Java や Swift のような型の安心さ…それはまるでプログラミング言語の1つの歴史をたどるような発表でした。
いつテストを書くか?―ソフトウェア開発における安心と不安について考える(lacolaco)
この発表のすごいところは、TypeScript が1ミリも出てこないところです(笑)。
変更容易性を「予期的」もしくは「経験的」に分類して、それぞれのリスクをどう下げるかを提案していました。切り口が面白かったし、他の言語でも通じる汎用性が高い発表でした。
次世代リンターで探る、tsgo 時代における型認識カスタムルールの現実解(Yuta Takahashi)
TypeScript の型判定に依存していたカスタムルールが、tsgo では使えません。そのために、型への依存がやめられるならやめよう、スピードを気にしないなら既存の tsc を呼び出そう、最悪の場合は Go コードを書いてリンターをハックしよう、ただし本当に必要な場合のみね、という内容でした。
雑感
今回の発表の多くが、何かしらのオーバーラップがあったと思います。それは発表が没個性とか悪いことではなくて、それだけ関心事が集中していることの証左です。そのあたりをマッピングするのは間違いなくおもしろいですが、今回はこの辺にしておきましょう。
カンファレンス好きとして、おそらく来年も TSKaigi の場に足を運んでいることでしょう。去年 JSConf.jp で発表したパターンマッチング案についての、TypeScript に関する考察もいつか、TSKaigi の場で発表したいです。プロポーザルを頑張って書くぞ!