TSKaigi 2026 協賛&参加レポート

TSKaigi 2026 協賛&参加レポート

Developer Engagementブロックの@ikkouです。2026年5月22・23日の2日間にわたりベルサール羽田空港で「TSKaigi 2026」が開催されました。

ZOZOはGold Sponsorとして協賛し、スポンサーブースを出展しました。ZOZOがTSKaigiに協賛するのは今回が初めてです。

technote.zozo.com

本記事では、前半はZOZOのWebフロントエンドエンジニアが気になったセッションを紹介します。後半では、ZOZOのスポンサーブースの様子と各社のブースにおけるコーディネートを写真中心に報告します。

ZOZOのWebフロントエンドエンジニアが気になったセッション

開発体験を左右するライブラリの API 設計 ― GraphQL スキーマ構築ライブラリから考える

ssssotaです。izumin5210さんの「開発体験を左右するライブラリの API 設計 ― GraphQL スキーマ構築ライブラリから考える」を紹介します。

speakerdeck.com

このセッションでは、スキーマや型情報をいかにTypeScriptの実装に接続するかという観点で、既存ライブラリのアプローチやその長短を深ぼる内容でした。弊社ではOpenAPIを使っているケースが非常に多く、いかにOpenAPIスキーマを実装に接続するかは往々にして発生する問題の1つです。

セッションではGraphQLに焦点が当てられていましたが、スキーマから実装を生成するスキーマファースト、コードからスキーマを生成するコードファースト、コードファーストのうちDecoratorsを使うパターン、DSL的な独自のbuilderパターン、計3パターンについて評価していました。比較・評価軸として、1.スキーマと実装の分離、2.型整合性、3.DBモデルとの接続、の3軸を用いています。

スキーマと実装の分離については、スキーマファーストが優れているのは言うまでもありませんが分離する強いモチベーションがなければ優先度は低くなります。型整合性は採用するライブラリのtype ergonomicに依りますが、コードファーストなDSL builderパターンが強い傾向にあります。DBモデルとの接続においてはGraphQL特有と見ることができますが、コードファーストなDSL builderパターンで型整合問題と合わせて解決できることを示唆しています。

セッションの最後には、自作のライブラリでこのギャップを埋める取り組みとAIを用いた評価結果を紹介していました。気になる方はスライドも合わせて確認してみてはいかがでしょうか。

私自身、OpenAPIスキーマと実装の接続に関して関心があり、ライブラリ(openapi-ts-hono)を作った経験から非常に共感できるところがありました。もちろんGraphQLとはギャップがありますが、スキーマと実装の分離、型整合性などは感覚としてもっていながらも、改めて言語化されることで気付きのあるセッションでした。

「関数型プログラミング」を分解する.ts

www_REM_zzzです。おーみーさんの『「関数型プログラミング」を分解する.ts』を紹介します。

tsk-2026-aumy.vercel.app

自分の話ですが、TypeScriptに入門する前はScalaを書いていた経験があります。当時はコップ本と呼ばれる本とHaskellの公式ドキュメントが日本語で関数型プログラミングに入門する入口でした。Object指向プログラミングとは全く別の世界からやってきたような考え方で、面白くもあり、苦労もした過去があります。

このセッションでは、そもそも関数型プログラミングとは何なのかの考え方に触れながら、TypeScriptで真の関数型はできないのかに触れられています。僕もTypeScriptで真の関数型が書けたらいいのにと思った一人です(OCaml書けよというのは一旦置いといて)。スライドの中で語られた関数型プログラミングは「いい感じのソフトウェアを作るため」というのは本質的だなと思いました。ついつい手段に引っ張られてしまうところがあるのですが、心に留めておきたいです。

純粋性について

特に純粋性についてのところはReactでも他のライブラリでも語られる部分であり、意味の純粋性の部分は悩ましいと感じたことがあるので共感しました。

// 「副作用を表す値」を返すだけ(純粋関数)
function pureAlert(msg: string) {
 return ["alert", msg] as const;
}
// 副作用の実行は別の関数に委ねる
function executeAction(action: readonly ["alert" | "confirm", string]) {
 switch (action[0]) {
   case "alert": alert(action[1]); break;
   case "confirm": confirm(action[1]); break;
 }
}
const actions = [pureAlert("hey"), pureAlert("bye")];
 actions.forEach((a) => executeAction(a));

引用:https://tsk-2026-aumy.vercel.app/29

このような「何をするかの宣言」と「実行」が分離されている書き方は普段からできるし、メンテナンスを考えると普段から実践していきたいと思いました。

returnは「この関数の呼び出し元(= 継続)に値を渡して戻る」という考え方はTSを書いていてなんとなく感じていたものがはっきりと言語化されてスッキリした気持ちになりました。

型でエフェクトを表す

() => T           // 特に何も起きない純粋な処理
() => Option<T>   // 失敗しうる処理
() => Promise<T>  // 非同期処理

これを徹底すると

  • 関数の型を見るだけで「何が起きるか・何が起きないか」がわかる
  • 純粋な部分と副作用のある部分が型レベルで分離される
  • 「支払い処理を起こしうる部分」だけを特定して二重実行を防げる

これはTypeScriptを堅牢に書くうえで実践したいと思います。ちょうど業務でも似たシチュエーションがあることを思い出して、まず「この関数は副作用を持つか?」を命名(execute, get, !記法)で示すのが現実的な入口かなと思いました。

いつテストを書くか?―ソフトウェア開発における安心と不安について考える

ジン(@Jin_pro_01)です。自分の気になったセッションとして、lacolacoさんの「いつテストを書くか?―ソフトウェア開発における安心と不安について考える」を紹介します。

docs.google.com

このセッションでは、テストをどのような時に書くべきなのかを「開発者の安心と不安」を起点に問い直したlacolacoさんの気づきの共有、問いの提示、視点の提案をするというセッションでした。

セッションの中ではソフトウェアの保守性の本質は「変更容易性」であり、それは予期的変更容易性(変更する前に感じる不安)と経験的変更容易性(変更をする中で実際に感じる手応え)の二層モデルとして見ることができるとしていました。その上でテストはその両方にフィードバックを返すセンサーであるとし、変更前に感じる不安があるならそれを取り除く安心のために書き、変更のしやすさを試したり構造に問題が見つかったりするなら設計を見直すために書くという体系的な整理がされており、とても興味深いセッションでした。

自分が従事しているZOZOTOWNでは、新規機能の実装や既存機能の改修と並行で、フロントエンドリプレイスも各チームで進行しています。ZOZOTOWNの発展を止めずに開発を進める体制である一方、考慮すべきことが多く、自分にとっては比較的「予期的変更容易性」が低い状態だと表現できることに気づきました。そして、まさにこの「予期的変更容易性」を高めるためのテストへの投資価値が高いと感じました。

さらにAIを使ってコーディングをしていく時代に入り、開発の生産量が増える一方で、自分が直接書いていないコードや構造との距離は広がっていきます。その距離は新たな不安、つまり予期的変更容易性の低下にもつながると感じています。だからこそ変更の前後で「振る舞いが変わっていないこと」を担保し、その不安を取り除くセンサーとしてのテストの価値は、AI時代にこそますます高まっていくのだと考えました。

最大の収穫は、テストを書く目的を「ソフトウェアがソフトであり続けるための、変更容易性のセンサー」と説明できるようになったことです。テストはあくまで手段の1つと捉えつつ、ZOZOTOWNがソフトであり続けるために、他に何ができるかも考えていきたいと思いました。

LLM時代のリファクタリング戦略:AIエージェントによる段階的・安全なTS移行方法

いもけん(@iimokeenpi)です。「LLM時代のリファクタリング戦略:AIエージェントによる段階的・安全なTS移行方法」について紹介します。

speakerdeck.com

このセッションは、JSのコードをAIエージェントを使い安全にTSに移行するというものでした。しかし、JSからTSへの移行のみならず日常的なリファクタリングにおいても活用できそうなノウハウが詰まっていました。

特に自分が興味を持った部分としては”test-firstフロー”と”役割ごとにサブエージェントを切り出す”の2つがあります。AIエージェントの使用有無にかかわらずリファクタリングの際にデグレには細心の注意を払って行っていきたいところです。そこで”test-firstフロー”というのは、デグレの防止策としても効果が高くAIエージェントとの相性もかなり良いなと感じました。

そして“役割ごとにサブエージェントを切り出す”という点に関してです。自分は基本的に全てOpusで乗り切ろうとしていたのですが、消費トークンの効率や時間的な効率の面でも損をすることが多々あります。なので役割ごとにサブエージェントを切り出し、モデルを使い分けることはすぐにでも実践したいと感じました。

TypeScript の型で副作用の実行順序を制御する

佐藤です。私が印象に残ったセッションは「TypeScript の型で副作用の実行順序を制御する」です。

speakerdeck.com

Branded Typeは「UserIdProductIdを区別するためのタグ付け」くらいにしか使えないと思っていましたが、Type-State Patternを使えばそれが実行順序の制御に転用できます。TypeScriptの型システムでここまで表現できるのかと、型に対する認識が更新されました。

加えて魅力的なのが、ライブラリ依存ゼロで既存コードに薄く入れられる点です。Effect-TSやXStateは強力ですが導入コストは高いです。Type-Stateパターンなら守りたい箇所だけにピンポイントで適用できます。

実際、getServerSideProps内に「バリデーション→取得→加工」のような実行順序を守らなければならない処理があり、これまではAIのルールや運用上の規約に頼らざるを得ませんでした。型で制御できるようになれば、コードレビューや属人的な注意に依存せず、エディタ上でミスを即座に検出できます。自分のチームに導入できないか実践したいと思えるトークでした。

サンプルコードはGitHubで公開されています。既存ライブラリとの比較実装も含まれているので、ぜひ手元で動かしてみてください。

ZOZOのスポンサーブースの紹介

ZOZOのスポンサーブースとWebフロントエンドエンジニアたち

ZOZOのスポンサーブースでは「Google I/O 2026から帰国したばかりのZOZOフロントエンドエンジニア テックリード ssssota に挑戦!」と題したTypeScript & JavaScript Quizをメインコンテンツとして提供しました。日替わりで全10問、ブースにはその日のクイズから1問だけ掲示しました。

TypeScript & JavaScript Quiz Day 1 & Day 2

難しい! ということが話題になり、とても多くの方に挑戦してもらいました。難しいのは作問者の意図通りですが、この「難しい」ということが反響を呼び、楽しんでもらえたのではないでしょうか。

No Bugs, Just Clean. というメッセージの込められた特製ノベルティの洗濯ネット

クイズに挑戦し、7問以上正解した方には特製ノベルティの「洗濯ネット」をお渡ししました(Day 2は3問以上正解した方に変更)。

Day 1、Day 2の7問以上正解者

また、上位正解者の皆さんにはリーダーボードにもハンドルネームなどを書いてもらいました。2日間を通しての全問正解者は、Day 1が@uhyo_さんと@vaaaaanquishさんの2名、Day 2が@U3Qc9さんの1名だけでした。改めて全問正解おめでとうございます!

このTypeScript & JavaScript Quizに関する解説記事を別記事として公開しています。あのクイズの答えが気になるという方はもちろん、もう一度あのクイズに挑戦したい、当日できなかったので挑戦したい! という方もぜひご覧ください。

techblog.zozo.com

10分セッションに登壇中のテックリード ssssota

この難問揃いのクイズを作問したテックリードのssssotaはDay 2に「ReactとSvelteのその先、Ripple-TS」というタイトルで10分セッションにも登壇しています。こちらもあわせてご覧ください。

speakerdeck.com

協賛企業ブースのコーディネートまとめ

ジン(@Jin_pro_01)です。セッションを見たり、自社ブースに立ったりしている合間にTSKaigi 2026の全協賛企業ブースを回ってきました。当日の会場の様子を思い出しながら、各社の個性や雰囲気の出るデザイン・着こなしをぜひご覧ください。

ウェルスナビさん。 / @WealthNavi_Tech

AVITAさん。

Dress Codeさん。 / @dresscode_com

Hacobuさん。 / @MHacobu

sattoさん。 / @satto_ai_agent

アサインさん。 / @ASSIGN_dev

レバレジーズさん。

PLAINERさん。 / @plainer_inc

ビットキーさん。 / @bitkey_dev

UPSIDERさん。 / @upsider_inc

ニーリーさん。 / @nealle_pr

LayerXさん。 / @LayerX_tech

エブリーさん。 / @every_engineer

スリーシェイクさん。 / @3shake_Inc

ミツモアさん。 / @meetsmore

Ubieさん。 / @UbieCorp_JP

Nstockさん。 / @Nstock_jp

プレイドさん。 / @PLAID_Tech

ギークプラスさん。 / @GeekJapan1

ウォンテッドリーさん。 / @wantedly_dev

サイボウズさん。 / @cybozuinsideout

ドワンゴさん。 / @dwango_tech

CodeRabbitさん。 / @Coderabbitaija

シェルパ・アンド・カンパニーさん。

ファインディさん。 / @findy_code

ディップさん。 / @dip_developers

RightTouchさん。 / @righttouch_dev

Gaji-Laboさん。 / @gaji_labo

スタメンさん。 / @stmn_eng

TOKIUMさん。 / @TOKIUM_Dev

カオナビさん。 / @kaonavi_jp

テイラーさん。 / @TailorERP_JP

KINTOテクノロジーズさん。 / @KintoTech_Dev

MOSHさん。 / @MOSHinc_jp

皆さん照れていたりウキウキしていたりしてよかったです! ご協力いただいた皆さん本当にありがとうございました!

おわりに

TSKaigi 2026 協賛企業一覧

TSKaigiへの初協賛を通して、ZOZOのことが少しでも来場者の皆さまに伝わっていれば嬉しいです。みなさま、ありがとうございました!

TSKaigi 2026をきっかけとしてZOZOのWebフロントエンドエンジニアに興味を持たれた方は、技術スタックなどがまとまったページをぜひご覧ください。

techblog.zozo.com

ZOZOでは、一緒にサービスを作り上げてくれる方を募集中です。ご興味のある方は、以下のリンクからぜひご応募ください。

corp.zozo.com

カテゴリー