Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
「バイトル」のTypeScriptリニューアル — 積み上がったレガシーとパフォーマンスに挑む現在地
Search
Hayato Yokoyama
May 23, 2026
Technology
100
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
「バイトル」のTypeScriptリニューアル — 積み上がったレガシーとパフォーマンスに挑む現在地
2026/05/23 TSKaigi 2026
Hayato Yokoyama
May 23, 2026
More Decks by Hayato Yokoyama
See All by Hayato Yokoyama
「型ガードしたのにnullable」から卒業する
hayato_yokoyama
0
140
AIが特別じゃなくなった時代に、作ることを楽しもう
hayato_yokoyama
0
38
AIのためのテスト戦略 〜TDDが難しいフロントエンド開発でのアプローチ〜
hayato_yokoyama
0
270
実はすごいスピードで進化しているCSS
hayato_yokoyama
0
260
Next.js AppRouter × GraphQL 〜 夢見た理想と現実の課題 〜
hayato_yokoyama
0
180
フロントエンドテストを書きやすくするために工夫したこと
hayato_yokoyama
1
95
Other Decks in Technology
See All in Technology
2026-09-10 【Snowflake World Tour Tokyo 2026】dbt Core と Snowflake で実現する多層的なデータガバナンス / Multi-Layered Data Governance Powered by dbt Core and Snowflake
civitaspo
0
310
GoCon2026 - Open Source, Open World
sanposhiho
3
3.1k
AIオーケストレーションを活用した 開発ワークフローの設計と実践
bqnq
0
130
Snowflakeのコスト最適化を支えるアーキテクチャ設計
ktatsuya
1
1.4k
AI-DLCって実際どう? 〜聞きたいこと全部聞いてみる〜
news_it_enj
0
260
2026-09-09 【sigma_ucj#1】Sigma を IaC 管理したい! / IaC for Sigma
civitaspo
0
110
全員がプロダクトへ向き合う組織を持続成長させるために——組織づくりのフライホイールと4象限 / The Flywheel Model and Four Quadrants for Organizational Design
hiro_torii
4
960
Claude Code本って、 読む必要あるの?
oikon48
2
380
Podは生きているのにGoだけが落ちる:GOGCとGOMEMLIMITで追うInvisible OOM Killの謎
tkc66buzz
1
500
AI時代だからこそ、スケールしないことをやろう
yutashigemura
1
130
生成AIのテナント制御とシャドーMCP対策 | AIを"止めずに"、情報を守る
yukun
0
140
AIで開発は速くなったのに、なぜ現場は楽にならないのか 〜あなたの組織のボトルネックを突き止めるワークショップ〜
jacopen
1
310
Featured
See All Featured
Practical Orchestrator
shlominoach
191
12k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
490
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
490
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
840
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.1k
Designing for humans not robots
tammielis
254
26k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.9k
How to make the Groovebox
asonas
2
2.4k
First, design no harm
axbom
PRO
2
1.3k
Transcript
「バイトル」のTypeScriptリニューアル 〜 積み上がったレガシーとパフォーマンスに挑む現在地 〜 ディップ 横⼭ 隼 2026/05/23 TSKaigi 2026
横⼭ 隼 Yokoyama Hayato ディップ株式会社 プロダクトソリューション部メディアWeb開発課 2022年 新卒⼊社 現在の仕事 バイトルの求職者向けサイトのリニューアル
主にフロントエンド
× “Labor force solution company” ⼈材サービスとDXサービスの提供を通して、労働市場における諸課題を解決し、 誰もが働く喜びと幸せを感じられる社会の実現を⽬指します。 VISION Human work
force solution ユーザーファーストな独⾃機能を搭載した、 求⼈情報‧⼈材紹介サービスの提供を通じて、 ユーザーの就業課題を解決しています。 ⼈材サービス事業 Digital labor force solution バイトコミュニケーションアプリ『バイトルトーク』や、 機能を絞ったシンプルなSaaS型の『コボット』を通じて、 職場環境やコミュニケーション課題を解決しています。 DX事業
Copyright © DIP Corporation, All rights reserved. 📝 本⽇お話しすること 弊社プロダクト「バイトル」のリニューアルで取り組んだパフォーマンス改善のお話をします。
王道な取り組みから、ちょっとニッチな事例まで、 プロダクトを選ばず、明⽇から取り組めるものもご紹介します。 "⾃分のチームでも試せそう" と思えるものを1つでも持ち帰っていただけたら幸いです。
Copyright © DIP Corporation, All rights reserved. 20年超えの歴史を持つ アルバイト求⼈サービス
Copyright © DIP Corporation, All rights reserved. インターネットの家庭普及率が18%程度だった2002年 「バイトル」サービス開始
Copyright © DIP Corporation, All rights reserved. スマホ普及率が4%だった2010年 ガラケー全盛期に「動画」で仕事探しができる機能を実装
Copyright © DIP Corporation, All rights reserved. 2024年⽇本初となる対話型バイト探しサービス 「dip AI
AGENT」をリリース
Copyright © DIP Corporation, All rights reserved. サービスは成⻑を続けている
Copyright © DIP Corporation, All rights reserved. サービスの成⻑に伴って「技術的負債」は溜まってきた • JavaScriptで動いているため型安全性がなく、動かすまでバグに気付けない
• グローバルスコープのCSS (Sass) で、1つ直すとどこに影響があるか分からない • テストが形骸化している‧存在しない • ライブラリのバージョンをあげるだけでもきつい
Copyright © DIP Corporation, All rights reserved. サービスの成⻑に伴って「技術的負債」は溜まってきた • JavaScriptで動いているため型安全性がなく、動かすまでバグに気付けない
• グローバルスコープのCSS (Sass) で、1つ直すとどこに影響があるか分からない • テストが形骸化している‧存在しない • ライブラリのバージョンをあげるだけでもきつい ➡ 事業の成⻑を⽀えられない
Copyright © DIP Corporation, All rights reserved. そんな経緯もありバイトルを今 リニューアル
Copyright © DIP Corporation, All rights reserved. TypeScript ⾔語 React
Router (framework mode) フレームワーク CSS Modules スタイリング Vite 8 ビルド Rolldown Oxlint / Oxfmt リンター / テスト Vitest TypeSpec API定義 / 型⽣成 Orval React 技術スタック
Copyright © DIP Corporation, All rights reserved. ✅ 型安全性を⼿に⼊れて、動かすまで気付かないバグが消えた ✅
テストもちゃんと書けるようになった ✅ 型に守られて、AI駆動で開発が爆速になった
Copyright © DIP Corporation, All rights reserved. 万全に進めてきた リニューアル
Copyright © DIP Corporation, All rights reserved. 負荷テストで 本番相当の負荷を流すと
Copyright © DIP Corporation, All rights reserved. ......
Copyright © DIP Corporation, All rights reserved.
Copyright © DIP Corporation, All rights reserved.
Copyright © DIP Corporation, All rights reserved.
Copyright © DIP Corporation, All rights reserved.
Copyright © DIP Corporation, All rights reserved.
Copyright © DIP Corporation, All rights reserved. 型もテストもあるから、AIで仕様通りに動くものはサクサク作れた。 API,DB などの⼀部は既存のものを継承する設計だった。
結果、どかっと機械的に負荷をかけたら、改善点が⾒つかった。
Copyright © DIP Corporation, All rights reserved. 型もテストもあるから、AIで仕様通りに動くものはサクサク作れた。 API,DB などの⼀部は既存のものを継承する設計だった。
結果、どかっと機械的に負荷をかけたら、改善点が⾒つかった。 ➡ やるしかない
Copyright © DIP Corporation, All rights reserved. TypeScriptのパフォーマンス改善 • 型チェック‧コンパイルにかかる時間を短縮すること
• JavaScriptにコンパイルされた後、⾼速に動くこと
Copyright © DIP Corporation, All rights reserved. TypeScriptのパフォーマンス改善 • 型チェック‧コンパイルにかかる時間を短縮すること
• JavaScriptにコンパイルされた後、⾼速に動くこと ←今回 狙うはこっち
Copyright © DIP Corporation, All rights reserved. まず「低コストかつ効果が⼤きそうなもの」を中⼼に取り組んだ
Copyright © DIP Corporation, All rights reserved. 画像の軽量化やWebP変換
Copyright © DIP Corporation, All rights reserved. loading="lazy" / fetchpriority="high"
/ rel="preconnect" など リソースの読み込み優先度やタイミングの調整 <img src="thumb.jpg" loading="lazy" /> <link rel="preconnect" href="https://fonts.googleapis.com" /> <script async src="https://example.com/script.js"></script> 外部リソースの⾮同期読み込み 外部リソースの事前接続 画像の遅延読み込み
Copyright © DIP Corporation, All rights reserved. Cache-Control ヘッダーの設定し 可能な限りCDNキャッシュから配信
"Cache-Control": "public, max-age=31536000, immutable" ハッシュ付きの静的アセット
Copyright © DIP Corporation, All rights reserved. かなり効果はあった 👍
Copyright © DIP Corporation, All rights reserved. もうちょっとミクロな問題への取り組みも 1. 計測‧広告タグのメインスレッド占領によるパフォーマンス低下
2. ⼤量に分割されたJavaScript,CSSによるリクエスト数増加 3. Core Web Vitalsを可視化できていない
Copyright © DIP Corporation, All rights reserved. もうちょっとミクロな問題への取り組みも 1. 計測‧広告タグのメインスレッド占領によるパフォーマンス低下
2. ⼤量に分割されたJavaScript,CSSによるリクエスト数増加 3. Core Web Vitalsを可視化できていない
Copyright © DIP Corporation, All rights reserved. 現バイトルから受け継いだ 計測‧広告タグの積み重なりによるパフォーマンスの悪化 •
⻑年の機能拡張に応じて、計測‧広告タグが肥⼤ • 初期ロード時にメインスレッドが⻑時間占有され、 Core Web Vitals(特にTBT) が悪化した ⚠ リニューアルでも計測‧広告タグの多くを引き継ぐ
Copyright © DIP Corporation, All rights reserved. requestIdleCallback() で計測タグが 描画とユーザー操作をブロックしないようにする
requestIdleCallback() でアイドル状態になったタイミングで、 スクリプトが発⽕するように調整
Copyright © DIP Corporation, All rights reserved. もうちょっとミクロな問題への取り組みも 1. 計測‧広告タグのメインスレッド占領によるパフォーマンス低下
2. ⼤量に分割されたJavaScript,CSSによるリクエスト数増加 3. Core Web Vitalsを可視化できていない
Copyright © DIP Corporation, All rights reserved. JavaScriptやCSSが過剰に分割され リクエスト数が増加していた
Copyright © DIP Corporation, All rights reserved. バンドルを可視化して改善点を特定
Copyright © DIP Corporation, All rights reserved. バンドルを可視化して改善点を特定 ➡ ⼤きなチャンクを動的インポートで切り出したり
⼩さすぎるチャンクを束ねたり、チャンク戦略を⾒直す
Copyright © DIP Corporation, All rights reserved. 📝 ⼤きすぎるチャンクは動的インポートに切り出す •
動画再⽣ボタンが押されてから動画再⽣ライブラリをインポート • 検索バーがタップされたら、検索のシートコンポーネントをインポート 📝 ⼩さすぎるチャンクは束ねる • アイコンライブラリを1つに束ねる • デザインシステムを1つに束ねる
Copyright © DIP Corporation, All rights reserved. 📝 ⼤きすぎるチャンクは動的インポートに切り出す •
動画再⽣ボタンが押されてから動画再⽣ライブラリをインポート • 検索バーがタップされたら、検索のシートコンポーネントをインポート ✅ 初期転送量を削減し、ロード時間を改善 📝 ⼩さすぎるチャンクは束ねる • アイコンライブラリを1つに束ねる • デザインシステムを1つに束ねる
Copyright © DIP Corporation, All rights reserved. もうちょっとミクロな問題への取り組みも 1. 計測‧広告タグのメインスレッド占領によるパフォーマンス低下
2. ⼤量に分割されたJavaScript,CSSによるリクエスト数増加 3. Core Web Vitalsを可視化できていない
Copyright © DIP Corporation, All rights reserved. New RelicでCore Web
Vitalsを可視化
Copyright © DIP Corporation, All rights reserved. ちょっとずつ改善出来てきている • ⾚(Poor)
→ ⻩(Needs Improvement) 、 ⻩(Needs Improvement) → 緑 (Good) になった。⼀段ずつ改善中 • パフォーマンスは、⼩さなベストプラクティスの積み重ね • 正直、TypeScript単体の部分での改善はあまり出来なかった tsconfigの "verbatimModuleSyntax": true , "isolatedModules": true などの 挙動がモダンバンドラーのデフォルトになっている • TypeScript, Viteの最新のエコシステムに乗ること⾃体が⼤きな最適化になった
dip_tech Copyright © DIP Corporation, All rights reserved. 最後に
Copyright © DIP Corporation, All rights reserved. まだまだ道の途中です パフォーマンス改善の余地はまだ沢⼭あります。 リニューアルしきれていない機能もあります。
テスト、デザインシステムなど、まだまだ整えるところもあります。
We are hiring ⼀緒に変⾰に挑戦する仲間を募集中です!