{
"name" : "武田 諭 / Satoshi Takeda",
"social": "tkdn",
"from" : "株式会社 mediba",
"dept" : "CD本部創造開発部/ものづくり推進部",
"job" : "Front-End web developer",
"love" : "family, alcohol, DX"
}

KDDI グループ



事業成長に伴う施策はフロントエンド
Next.js/TypeScript を中心に据えた技術スタックでリニューアル,
それらを経て得たものを中心にお話します。

TTFB / FirstPaint 上昇

Akamai CDN


リニューアル前 CSR で埋めていた UI を SSR 化
redux state で状態注入する?
connect したくない local state で振る舞い変える?
Context API により上位で A/B を判定
=> 下位でいつでも利用可能になる
分岐ロジックなしで JSX らしく宣言的に書きたい


res.query を渡すイメージ


ts-loader によるコンパイル2018.3 プラグインで @babel/preset-typescript Babel によるコンパイル

tsconfig.json があれば zero-config で始められそうfork-ts-checker-webpack-plugin も同梱されている@types/next にあった型定義ファイルもすでに同梱されているmonorepo 構成で TypeScript がコンパイルを担当するワークスペース
tsc でコンパイルtsc でコンパイルNext.js を使って monorepo するなら
Next.js の依存に合わせた方が幸せかも
webpack が出来そうなことが結構遠回り

現プロジェクトでのデプロイ
デプロイする際に考慮すべきだったもの
BUILD_IDBUILD_ID とは?
/_next/static/7Fi662KeEj0FPozITJ6xZ/pages/index.js
nanoid を利用してランダム値生成BUILD_ID でないと不都合postbuild 的な後処理 📦BUILD_ID として置換
generateBuildId という関数が用意されているCSR はリニューアル以前の Backbone.js, jQuery で動いています
<link rel="preload"> で 3rd party を投機的読み込み


SSR: 愚直にレンダー
CSR: cSU false, dangerlously... 空値 => hydrate 処理軽量
何某かのブラウザ API をフックに ReactDOM.hydrate
// Two ways to opt in:
// 1. Part of an app (not final API)
<React.unstable_ConcurrentMode>
<Something />
</React.unstable_ConcurrentMode>
// 2. Whole app (not final API)
ReactDOM.unstable_createRoot(domNode).render(<App />);
Scheduling in React | Philipp Spiess
import {
unstable_LowPriority,
unstable_runWithPriority,
unstable_scheduleCallback
} from "scheduler";
function sendDeferredAnalyticsNotification(value) {
unstable_runWithPriority(unstable_LowPriority, () => {
unstable_scheduleCallback(() => {
sendAnalyticsNotification(value);
});
});
}


API や抜本的になにか変わることを期待してはダメ
小さなことからコツコツと積み重ね計測することが一番近道なはず