こんにちは。シェルパ・アンド・カンパニー株式会社のプロダクト開発部でソフトウェアエンジニアを担当している田口です。
5月22日と23日に行われたTSKaigi2026に参加しました!
予定がありDay1 (22日) しか参加できなかったのですが、自分が印象に残ったセッションについて書こうと思います。
当日の様子
TSKaigi2026のページはこちらです。
ベルサール羽田空港で開催されていました。
トラックが3つあり、同時間帯に複数のセッションがあるのでリアルタイムで聴講できるセッションを選ぶ必要があります。
どれも面白そうなセッションなので、選択するのがなかなか難しいんですよね……。
セッション用のトラック以外にも、スポンサーブースを始めとした色々なスペースがあってとても興味深かったです。
マッサージやネイル体験、フェイスペイントなどの当日企画があり、どれも参加したカンファレンスでは見たことがなかったので、参加者を楽しませようという運営スタッフみなさんの気骨を感じました。
印象に残ったセッション
TypeScriptの「型」をAIのスキルに昇華させてみた件について - Speaker Deck
AIによる実装が当たり前となった現在、AIがTypeScriptの型をどれくらい理解していて、それをどう解釈していくかの実験を、デモを交えてまとめたセッションです。
TypeScriptの型について、ある程度最新でないモデルに聞いても正しい情報をアウトプットしてくれます。satisfiesやinfer、Branded Typesなんかも正しく説明してくれます。
とはいえ、それを完全に信頼してAIに実装させると気になるポイントもあります。
既存のコードの型が弱かったり、anyを使っていたりするとAIはそれを「問題ない」と判断するケースがあるということです。例えばリテラル型を使えばより安全な状態になるのにstringを使う、などのコードが残っていると、AIはそれを解釈して実装してしまいます。
上記のポイントは、普段からAIエージェント主体の開発をしている自分としては大きく刺さりました。
一度生成して本番環境で動いているコードを正とした場合、人間はもちろんですがAIもそれを正として解釈して改善するので、そもそも弱い型付けを本番環境にマージするなというメッセージのようにも受け取れる気がしました(あくまで個人の想像ですが)。
後半では、実装内容をCompiler APIを使ってAST解析して抽出し、それを元にスキルを作るという内容でした。
まさに最近当たり前になっているAIとTSKaigiの主体であるTypeScriptが融合した面白い発表でした!
権限チェックの一貫性を型で守るTypeScriptによる多層防御 - Speaker Deck
権限制御という複雑になりやすい課題を、TypeScriptの型を中心に解決するという内容のセッションです。
権限の制御は色々な変数があり、それが複雑になっている要因です。エンタープライズ系のサービスだと、部署やチームや子会社、協力会社などの組織の部分や、そこに対する閲覧・編集・削除などの権限が複雑に付与されます。
このセッションで発表していた北川さんが所属している企業のプロダクトでは、ディレクトリの階層で制御するという手法が取られているそうです。
一般的に権限制御は複数のレイヤーにロジックが置かれがちですが、複数のレイヤーで同じ権限制御のロジックがあると、各レイヤーのロジックそれぞれに変更を加えなくてはならなくなり、運用コストが増大します。
そこで、最終防衛ラインとしてDBの権限ポリシーを強固にし、それを基準に他のレイヤーの権限制御を実装する、という権限設計の内容です。
後半では、その権限制御をTypeScriptの型でSSoTとして管理するという話が出てきます。
各レイヤーの権限制御を、SSoTとして管理されている型定義を利用することでメンテナンスコストを減らし、一箇所での管理だけですべてのレイヤーで正しい権限制御を実現されています。
自分たちが開発しているSmartESGとその関連プロダクトも、利用されているお客様の権限を管理する必要があるSaaSです。
権限制御は難しいという前提があるからこそ共感することも多く、Valibotの実装例なども提示してもらえてとても参考になりました。
もちろん完全に万能なわけではなく、型だけで一貫性を担保できる部分とそうでない部分があり、そうでない部分はバリデーション・リンター・テストを組み合わせて堅牢にしていこうという内容でした。
具体的かつ実践的で非常に参考になる発表でした!
OSSのコードベースにneverthrowを漸進的に導入して、AIにも人間にも優しいエラーハンドリングを実現する - Speaker Deck
neverthrowを使ってエラーハンドリングを分かりやすくし、AIにとっても人間にとっても分かりやすいエラーハンドリングの設計を目指すというセッションです。
自分は今回の発表で初めてneverthrowというライブラリを知りました。
neverthrowはResult型にインスパイアされたライブラリで、関数の結果を成功or失敗として型で表現できるものです。
その有用性の一方で、既存のコードベースにいきなり導入するのは現実的ではありません。
その前提があったので、今回の発表では実際のプロダクトに導入していく例を示しつつ、少しずつ影響範囲を狭めてハンドリングしていく様子がとても参考になりました。
10分の発表の枠でしたが、自分が知らないライブラリだったというのもあり内容の濃い発表だったと思います!
最後に
聞きたいセッションが非常に多くて悩みました。
TSKaigiの公式YouTubeチャンネルには過去のセッションの動画が上がっているので、今回のセッションの動画が上がることを期待して楽しみに待っています。
https://www.youtube.com/@tskaigi
今回はDay1しか参加できませんでしたが、次回は複数日開催だったら全日参加したいと思います!
シェルパ・アンド・カンパニーでは一緒に働く仲間を募集しています。