Slide 1

Slide 1 text

Pocochaにおけるフロントエンドの領域と アーキテクチャ変遷 菰原 裕 1

Slide 2

Slide 2 text

自己紹介 ● 菰原 裕 / Yu Komohara ● 2018年DeNA新卒入社 ○ Pococha事業部 システム部 ○ イベントチームでバックエンド開発 ○ その後Webチームでフロントエンド開発 ■ Rails, React, Next.js, ... 2

Slide 3

Slide 3 text

今日お話すること 1. Pocochaにおけるフロントエンドの領域 2. Pocochaにおけるフロントの歴史 フレームワーク移行 3. Pocochaにおけるフロントの歴史 インフラ・アーキテクチャ変更 4. 展望 3

Slide 4

Slide 4 text

今日お話しないこと ● フレームワークの基礎(Rails, Next.js) ○ 一部機能の紹介はいたします ● 使用ライブラリの詳細(React, Redux, etc...) ● 実装パターン(Hooks, HOC, 各種 API, etc...) 4

Slide 5

Slide 5 text

1. Pocochaにおけるフロントエンドの領域 2. Pocochaにおけるフロントの歴史 フレームワーク移行 3. Pocochaにおけるフロントの歴史 インフラ・アーキテクチャ変更 4. 展望 5

Slide 6

Slide 6 text

Pocochaとは ● 2017年にサービスが開始したライブ 配信アプリ ● 配信をするライバーと、コメントやア イテムで応援するリスナーの双方向コ ミュニケーション ● 様々な形式のイベントが行われている 6

Slide 7

Slide 7 text

Webの領域 7

Slide 8

Slide 8 text

Webの領域 ● アプリ内WebView ● Pococha Web版 ● 公式サイト・その他Webページ(規約等) 8

Slide 9

Slide 9 text

Webの領域 ● アプリ内WebView ● Pococha Web版 ● 公式サイト・その他Webページ (規約等) 9

Slide 10

Slide 10 text

Webの領域 ● アプリ内WebView ● Pococha Web版 ● 公式サイト・その他Webページ (規約等) 10

Slide 11

Slide 11 text

Webの領域 ● アプリ内WebView ● Pococha Web版 ● 公式サイト・その他Webページ (規約等) 11

Slide 12

Slide 12 text

なぜWebを使うのか? 12

Slide 13

Slide 13 text

Webで実装する意味 ● 企画の PDCA・仮説検証が回しやすい(主にWeb版) 13

Slide 14

Slide 14 text

Webで実装する意味 ● 企画の PDCA・仮説検証が回しやすい(主にWeb版) ○ 本番反映や取り下げが容易 14

Slide 15

Slide 15 text

Webで実装する意味 ● 企画の PDCA・仮説検証が回しやすい(主にWeb版) ○ 本番反映や取り下げが容易 ○ ネイティブのリリースサイクルに影響されない (Pococha なら二週間に一回) 15

Slide 16

Slide 16 text

Webで実装する意味 ● 企画の PDCA・仮説検証が回しやすい(主にWeb版) ○ 本番反映や取り下げが容易 ○ ネイティブのリリースサイクルに影響されない (Pococha なら二週間に一回) ● iOS, Android の両方で WebView さえ用意してあげれ ばクロスプラットフォーム 16

Slide 17

Slide 17 text

Webで実装する意味 ● 企画の PDCA・仮説検証が回しやすい(主にWeb版) ○ 本番反映や取り下げが容易 ○ ネイティブのリリースサイクルに影響されない (Pococha なら二週間に一回) ● iOS, Android の両方で WebView さえ用意してあげれ ばクロスプラットフォーム ● エンジニアリソースを有効活用できる 17

Slide 18

Slide 18 text

以上が、Pocochaにおける Webフロントエンドの領域の話です 18

Slide 19

Slide 19 text

ここから、その変遷をお話いたします 19

Slide 20

Slide 20 text

1. Pocochaにおけるフロントエンドの領域 2. Pocochaにおけるフロントの歴史 フレームワーク移行 3. Pocochaにおけるフロントの歴史 インフラ・アーキテクチャ変更 4. 展望 20

Slide 21

Slide 21 text

初期(2017/1〜2018/11) ● Rails が API サーバと Web サーバの両方の役割を担う 21

Slide 22

Slide 22 text

初期(2017/1〜2018/11) ● Rails が API サーバと Web サーバの両方の役割を担う ● 試行錯誤をしていた段階で、ページごと(イベントはイベントごと) にUIが異なり、マスターデータを元に動的にページを生成できない 22

Slide 23

Slide 23 text

初期(2017/1〜2018/11) ● Rails が API サーバと Web サーバの両方の役割を担う ● 試行錯誤をしていた段階で、ページごと(イベントはイベントごと) にUIが異なり、マスターデータを元に動的にページを生成できない ● ページ数が少ないので、なんとかコピペ運用で回せていた時期 23

Slide 24

Slide 24 text

事業拡大に伴う課題 24

Slide 25

Slide 25 text

事業拡大に伴う課題 ● 自動化されても辛いコピペ運用 25

Slide 26

Slide 26 text

事業拡大に伴う課題 ● 自動化されても辛いコピペ運用 ○ イベント数の増加 26

Slide 27

Slide 27 text

事業拡大に伴う課題 ● 自動化されても辛いコピペ運用 ○ イベント数の増加 ○ フォーマットも固まってきたので、ページを共通化したい 27

Slide 28

Slide 28 text

事業拡大に伴う課題 ● 自動化されても辛いコピペ運用 ○ イベント数の増加 ○ フォーマットも固まってきたので、ページを共通化したい ● LP のような、フロントで完結するページを Rails で作るのは辛い 28

Slide 29

Slide 29 text

事業拡大に伴う課題 ● 自動化されても辛いコピペ運用 ○ イベント数の増加 ○ フォーマットも固まってきたので、ページを共通化したい ● LP のような、フロントで完結するページを Rails で作るのは辛い ● リッチな UI を JS でゴリゴリ書きたい 29

Slide 30

Slide 30 text

新フレームワークへ移行しよう 30

Slide 31

Slide 31 text

当時(2018年夏頃)検討された選択肢 31

Slide 32

Slide 32 text

当時(2018年夏頃)検討された選択肢 ● Angular ● React + React Helmet ● Vue + Nuxt.js ● React + Next.js 32

Slide 33

Slide 33 text

当時(2018年夏頃)検討された選択肢 ● Angular ○ 半年に一度の破壊的なメジャーアップデート ● React + React Helmet ● Vue + Nuxt.js ● React + Next.js 33

Slide 34

Slide 34 text

当時(2018年夏頃)検討された選択肢 ● Angular ○ 半年に一度の破壊的なメジャーアップデート ● React + React Helmet ○ webpack や Babel や Express を自前で入れて管理する必要がある ● Vue + Nuxt.js ● React + Next.js 34

Slide 35

Slide 35 text

当時(2018年夏頃)検討された選択肢 ● Angular ○ 半年に一度の破壊的なメジャーアップデート ● React + React Helmet ○ webpack や Babel や Express を自前で入れて管理する必要がある ● Vue + Nuxt.js ○ SSR (後述)は出来るが、当時(Vue 2)ビューにロジックを含めたくなかった ● React + Next.js 35

Slide 36

Slide 36 text

当時(2018年夏頃)検討された選択肢 ● Angular ○ 半年に一度の破壊的なメジャーアップデート ● React + React Helmet ○ webpack や Babel や Express を自前で入れて管理する必要がある ● Vue + Nuxt.js ○ SSR (後述)は出来るが、当時(Vue 2)ビューにロジックを含めたくなかった ● React + Next.js ○ 自前でビルド周りやサーバを整備する必要がない。SSR が容易に行える 36

Slide 37

Slide 37 text

移行ステップ ● React + Next.js のプロジェクトを立ち上げる ○ ページを作る ○ 認証機構を実装する ○ デプロイフローを整える ● フロント側にデータを渡す仕組みを作る ○ データフォーマットを定める(csv, yaml) ○ API を Rails に生やす 37

Slide 38

Slide 38 text

React + Next.js に移行しました (2018/12 運用開始) 38

Slide 39

Slide 39 text

簡易構成図(〜2018/12) 39

Slide 40

Slide 40 text

簡易構成図(2018/12〜) 40

Slide 41

Slide 41 text

簡易構成図(2018/12〜) ※現在も Rails から Next.js へページを移行中 41

Slide 42

Slide 42 text

事業拡大に伴う課題(再掲) ● 自動化されても辛いコピペ運用 ● LP のような、フロントで完結するページを Rails で作るのが辛い ● リッチな UI を JS でゴリゴリ書きたい 42

Slide 43

Slide 43 text

事業拡大に伴う課題(再掲) ● 自動化されても辛いコピペ運用 ○ API 側にマスターデータを保持してページに流し込む形式 ● LP のような、フロントで完結するページを Rails で作るのが辛い ● リッチな UI を JS でゴリゴリ書きたい 43

Slide 44

Slide 44 text

事業拡大に伴う課題(再掲) ● 自動化されても辛いコピペ運用 ○ API 側にマスターデータを保持してページに流し込む形式 ● LP のような、フロントで完結するページを Rails で作るのが辛い ○ LP を Rails に載せる必要がなくなった ● リッチな UI を JS でゴリゴリ書きたい 44

Slide 45

Slide 45 text

事業拡大に伴う課題(再掲) ● 自動化されても辛いコピペ運用 ○ API 側にマスターデータを保持してページに流し込む形式 ● LP のような、フロントで完結するページを Rails で作るのが辛い ○ LP を Rails に載せる必要がなくなった ● リッチな UI を JS でゴリゴリ書きたい ○ Rails の制約がないので好きに書ける 45

Slide 46

Slide 46 text

すべて解決!! 46

Slide 47

Slide 47 text

そんなことはなく 47

Slide 48

Slide 48 text

1. Pocochaにおけるフロントエンドの領域 2. Pocochaにおけるフロントの歴史 フレームワーク移行 3. Pocochaにおけるフロントの歴史 インフラ・アーキテクチャ変更 4. 展望 48

Slide 49

Slide 49 text

CSR と SSR 49

Slide 50

Slide 50 text

CSR(Client Side Rendering) 1. ユーザがリクエストを送る 2. サーバからのレスポンス後に JS がクライアント(ブラウザ)へダウ ンロードされる 3. クライアント側で JS が実行される 4. 実行が終わった段階でページが表示される 50

Slide 51

Slide 51 text

SSR(Server Side Rendering) 1. ユーザがリクエストを送る 2. リクエストが到達した段階で、サーバ側で JS が実行される 3. 初期表示用のページ(First View)をレンダリングして、レスポンス が返る 4. その後必要に応じてクライアント側でも JS が実行され、最終的な ページが表示される 51

Slide 52

Slide 52 text

SSR のメリット 52

Slide 53

Slide 53 text

SSR のメリット ● UX 向上 ○ 初回レンダリングがブラウザではなくサーバで行われるので、高速 ○ ブラウザでの JS の実行を待たずに描画されるため、空白ページやインジ ケータが表示されない 53

Slide 54

Slide 54 text

SSR のメリット ● UX 向上 ○ 初回レンダリングがブラウザではなくサーバで行われるので、高速 ○ ブラウザでの JS の実行を待たずに描画されるため、空白ページやインジ ケータが表示されない ● SEO ○ 必要な情報をサーバ側でレンダリングした上でレスポンスが返るので /users/[userId] のような動的なルーティングでも OGP を設定できる ○ クローラに関しては、レンダリングのタイムラグ以外は問題ない 54

Slide 55

Slide 55 text

SSR のデメリット 55

Slide 56

Slide 56 text

SSR のデメリット ● 自前で導入するのは難しい ○ フレームワークに依存することになる 56

Slide 57

Slide 57 text

SSR のデメリット ● 自前で導入するのは難しい ○ フレームワークに依存することになる ● コードが煩雑になる ○ Next.js(当時は 9.1.6) では getInitialProps という SSR でも CSR で も呼ばれるライフサイクルがあり、Universal JS を意識する必要があっ た 57

Slide 58

Slide 58 text

SSR のデメリット ● 自前で導入するのは難しい ○ フレームワークに依存することになる ● コードが煩雑になる ○ Next.js(当時は 9.1.6) では getInitialProps という SSR でも CSR で も呼ばれるライフサイクルがあり、Universal JS を意識する必要があっ た ○ SSR はサーバ側(Node 環境)で実行されシングルスレッドで動作し、シ ングルスレッドで固有の問題も生じうる 58

Slide 59

Slide 59 text

SSR をやめたい…… 59

Slide 60

Slide 60 text

そんな中 60

Slide 61

Slide 61 text

getStaticProps の登場 ● Next.js 9.3(2020/3)から追加された、SSG(Static Site Generation) 時に 実行されるライフサイクル 61

Slide 62

Slide 62 text

getStaticProps の登場 ● Next.js 9.3(2020/3)から追加された、SSG(Static Site Generation) 時に 実行されるライフサイクル ● SSG 自体は一般的な方式であり、 SSR と異なりサーバ側で事前にビルドされた 静的コンテンツが返るので、レスポンスが早い 62

Slide 63

Slide 63 text

getStaticProps の登場 ● Next.js 9.3(2020/3)から追加された、SSG(Static Site Generation) 時に 実行されるライフサイクル ● SSG 自体は一般的な方式であり、 SSR と異なりサーバ側で事前にビルドされた 静的コンテンツが返るので、レスポンスが早い ● Next.js にも静的に書き出す機能や自動的に SSG される機構が存在したが、9.3 で専用のライフサイクルが登場した 63

Slide 64

Slide 64 text

getStaticProps の登場 ● Next.js 9.3(2020/3)から追加された、SSG(Static Site Generation) 時に 実行されるライフサイクル ● SSG 自体は一般的な方式であり、 SSR と異なりサーバ側で事前にビルドされた 静的コンテンツが返るので、レスポンスが早い ● Next.js にも静的に書き出す機能や自動的に SSG される機構が存在したが、9.3 で専用のライフサイクルが登場した ● 動的ページで SSG を実装するための getStaticPaths というライフサイクルも 同時に登場 64

Slide 65

Slide 65 text

getStaticProps の登場 ● Next.js 9.3(2020/3)から追加された、SSG(Static Site Generation) 時に 実行されるライフサイクル ● SSG 自体は一般的な方式であり、 SSR と異なりサーバ側で事前にビルドされた 静的コンテンツが返るので、レスポンスが早い ● Next.js にも静的に書き出す機能や自動的に SSG される機構が存在したが、9.3 で専用のライフサイクルが登場した ● 動的ページで SSG を実装するための getStaticPaths というライフサイクルも 同時に登場 ● Vercel へのデプロイ時、条件を満たすページは自動で SSG を行って CDN へ展 開してくれるなど、SSG のサポートは強力 65

Slide 66

Slide 66 text

SSGの実装 ● www.example.com/entries のような一 覧ページ 66

Slide 67

Slide 67 text

SSGの実装 ● www.example.com/entries のような一 覧ページ ● ビルド時に getStaticProps が実行さ れ、一覧情報が API から取得される 67

Slide 68

Slide 68 text

SSGの実装 ● www.example.com/entries のような一 覧ページ ● ビルド時に getStaticProps が実行さ れ、一覧情報が API から取得される ● getStaticProps の return がコンポーネ ントへ渡され、APIで取得した情報を元に 事前にビルドされる 68

Slide 69

Slide 69 text

SSGの実装(動的ルーティング) ● www.example.com/entries/[entryId] のような詳細ページ 69

Slide 70

Slide 70 text

SSGの実装(動的ルーティング) ● www.example.com/entries/[entryId] のような詳細ページ ● getStaticPaths で、事前にどの ID の ページについて SSG するかを指定する 70

Slide 71

Slide 71 text

SSGの実装(動的ルーティング) ● www.example.com/entries/[entryId] のような詳細ページ ● getStaticPaths で、事前にどの ID の ページについて SSG するかを指定する ● それぞれのページについて、ページ内容を getStaticProps で API から取得する 71

Slide 72

Slide 72 text

SSGの実装(動的ルーティング) ● www.example.com/entries/[entryId] のような詳細ページ ● getStaticPaths で、事前にどの ID の ページについて SSG するかを指定する ● それぞれのページについて、ページ内容を getStaticProps で API から取得する ● getStaticProps の return がコンポーネ ントへ渡され、getStaticPaths で指定し た全てのパスについて事前ビルドが行われ る 72

Slide 73

Slide 73 text

事前にビルドするページ数が 膨大だったら……? 73

Slide 74

Slide 74 text

74

Slide 75

Slide 75 text

75

Slide 76

Slide 76 text

ISG(Incremental Static Generation) ● getStaticProps 等と同じく Next.js 9.3(2020/3)で追加 ● getStaticPaths で fallback を false 以外に指定した場合に有効化 ● 事前ビルドしていないページへリクエストが到達した段階でインクリ メンタルに SSG を実行し、以後そのページへのリクエストには SSG されたコンテンツが返る 76

Slide 77

Slide 77 text

一度 SSG されたページの内容が 変更されたら……? 77

Slide 78

Slide 78 text

一度 SSG されたページの内容が 変更されたら……? 実際に、エラーページをキャッシュしてしまう障害を起こしたこともありました 78

Slide 79

Slide 79 text

ISR(Incremental Static Regeneration) ● Next.js 9.5(2020/7)で追加 ● getStaticProps の return で revalidate を指定した場合に有効化 ● revalidate で指定した秒数の経過後、新しいリクエストが来たら、再度 SSG を実行す る(= キャッシュを更新する) 79

Slide 80

Slide 80 text

SSR → SSG + ISR 80

Slide 81

Slide 81 text

新アーキテクチャへ移行しよう 81

Slide 82

Slide 82 text

アーキテクチャ移行の2つの壁 ● インフラの移行 ● コードの大幅な変更 82

Slide 83

Slide 83 text

アーキテクチャ移行の2つの壁 [1/2] ● インフラの移行 83

Slide 84

Slide 84 text

アーキテクチャ移行の2つの壁 [1/2] ● インフラの移行 ○ Function 数問題 84

Slide 85

Slide 85 text

アーキテクチャ移行の2つの壁 [1/2] ● インフラの移行 ○ Function 数問題 ■ もともとは Serverless Framework を使って Lambda の一関数に プロジェクトを丸ごとデプロイしていた 85

Slide 86

Slide 86 text

アーキテクチャ移行の2つの壁 [1/2] ● インフラの移行 ○ Function 数問題 ■ もともとは Serverless Framework を使って Lambda の一関数に プロジェクトを丸ごとデプロイしていた ■ Vercel へデプロイすると、SSR をするエンドポイントごと(page ごと)に関数が分割される 86

Slide 87

Slide 87 text

アーキテクチャ移行の2つの壁 [1/2] ● インフラの移行 ○ Function 数問題 ■ もともとは Serverless Framework を使って Lambda の一関数に プロジェクトを丸ごとデプロイしていた ■ Vercel へデプロイすると、SSR をするエンドポイントごと(page ごと)に関数が分割される ■ Vercel の Pro プランではエンドポイント数は上限が 24 ……移行が 決まった段階で、エンドポイント数は約 40 …… 87

Slide 88

Slide 88 text

アーキテクチャ移行の2つの壁 [1/2] ● インフラの移行 ○ Function 数問題 ■ もともとは Serverless Framework を使って Lambda の一関数に プロジェクトを丸ごとデプロイしていた ■ Vercel へデプロイすると、SSR をするエンドポイントごと(page ごと)に関数が分割される ■ Vercel の Pro プランではエンドポイント数は上限が 24 ……移行が 決まった段階で、エンドポイント数は約 40 …… ■ 上記はあくまで SSR が必要なエンドポイントの数であり、SSG さ れるページは含まれない 88

Slide 89

Slide 89 text

アーキテクチャ移行の2つの壁 [1/2] ● インフラの移行 ○ Function 数問題 ■ もともとは Serverless Framework を使って Lambda の一関数に プロジェクトを丸ごとデプロイしていた ■ Vercel へデプロイすると、SSR をするエンドポイントごと(page ごと)に関数が分割される ■ Vercel の Pro プランではエンドポイント数は上限が 24 ……移行が 決まった段階で、エンドポイント数は約 40 …… ■ 上記はあくまで SSR が必要なエンドポイントの数であり、SSG さ れるページは含まれない ● コードを先に修正してから Vercel へ移行する必要がある 89

Slide 90

Slide 90 text

アーキテクチャ移行の2つの壁 [1/2] ● インフラの移行 ○ 250MB問題 90

Slide 91

Slide 91 text

アーキテクチャ移行の2つの壁 [1/2] ● インフラの移行 ○ 250MB問題 ■ 当時使用していた Next.js のバージョンは 9.1.6 で、SSG や ISR を 使うためにアップデートが必要 91

Slide 92

Slide 92 text

アーキテクチャ移行の2つの壁 [1/2] ● インフラの移行 ○ 250MB問題 ■ 当時使用していた Next.js のバージョンは 9.1.6 で、SSG や ISR を 使うためにアップデートが必要 ■ Lambda へデプロイするパッケージの容量の上限は 250MB で、 Next.js をアップデートすると超過することが発覚 92

Slide 93

Slide 93 text

アーキテクチャ移行の2つの壁 [1/2] ● インフラの移行 ○ 250MB問題 ■ 当時使用していた Next.js のバージョンは 9.1.6 で、SSG や ISR を 使うためにアップデートが必要 ■ Lambda へデプロイするパッケージの容量の上限は 250MB で、 Next.js をアップデートすると超過することが発覚 ● Vercel へ先に移行してからコードを修正する必要がある 93

Slide 94

Slide 94 text

つまり 94

Slide 95

Slide 95 text

アーキテクチャ移行の2つの壁 [1/2] ● インフラの移行 ○ Function 数問題 → Vercel へ移行するには SSG, ISR のコードに変える必要がある ○ 250MB問題 → SSG, ISR のコードに変えるには Vercel へ移行する必要がある 95

Slide 96

Slide 96 text

アーキテクチャ移行の2つの壁 [1/2] ● インフラの移行 ○ Function 数問題 → Vercel へ移行するには SSG, ISR のコードに変える必要がある ○ 250MB問題 → SSG, ISR のコードに変えるには Vercel へ移行する必要がある Vercel の Pro プランで運用するには、インフラ移行と アーキテクチャ移行(Next.jsのアプデを含む)を同時 に行う必要がある → 96

Slide 97

Slide 97 text

リスクが大きすぎる 97

Slide 98

Slide 98 text

Enterprise プランにしました 98

Slide 99

Slide 99 text

Enterprise プランにしました Vercel移行 → Next.jsのアプデ → SSG+ISR 99

Slide 100

Slide 100 text

アーキテクチャ移行の2つの壁 [1/2] ● インフラの移行 ○ 補足 ■ Vercel の Pro プランの上限の中でやりくりしようとした結果複雑な ことになったが、実は2020年秋ごろに Hobby プラン以外は上限が 撤廃されたらしい ■ 事業のさらなる拡大により、Enterprise プランでないと帯域幅の上 限に引っかかることとなりました 100

Slide 101

Slide 101 text

アーキテクチャ移行の2つの壁 [2/2] ● コードの大幅な変更 101

Slide 102

Slide 102 text

アーキテクチャ移行の2つの壁 [2/2] ● コードの大幅な変更 ○ getInitialProps の廃止 ■ コンポーネントのレンダリング時にリクエストを投げる CSR 方式へ移行 102

Slide 103

Slide 103 text

アーキテクチャ移行の2つの壁 [2/2] ● コードの大幅な変更 ○ getInitialProps の廃止 ■ コンポーネントのレンダリング時にリクエストを投げる CSR 方式へ移行 ○ OGP が必要なページは getStaticProps を使用 103

Slide 104

Slide 104 text

アーキテクチャ移行の2つの壁 [2/2] ● コードの大幅な変更 ○ getInitialProps の廃止 ■ コンポーネントのレンダリング時にリクエストを投げる CSR 方式へ移行 ○ OGP が必要なページは getStaticProps を使用 ○ OGP が必要な動的ページは getStaticProps + getStaticPaths による ISR 104

Slide 105

Slide 105 text

アーキテクチャ移行の2つの壁 [2/2] ● コードの大幅な変更 ○ getInitialProps の廃止 ■ コンポーネントのレンダリング時にリクエストを投げる CSR 方式へ移行 ○ OGP が必要なページは getStaticProps を使用 ○ OGP が必要な動的ページは getStaticProps + getStaticPaths による ISR ○ その他、getInitialProps を前提に書かれた HOC の廃止も…… 105

Slide 106

Slide 106 text

なんとか倒しきりました (2021/4 運用開始) 106

Slide 107

Slide 107 text

インフラ・アーキテクチャ新旧 アーキテクチャ インフラ 旧 SSR Serverless Framework + AWS Lambda 新 SSG + ISR Vercel 107

Slide 108

Slide 108 text

その他色々な変遷 ● Hooks 導入 ○ クラスコンポーネントの撲滅 ● Redux → Recoil ○ Hooks や非同期処理との相性を考えて移行中 ● LPを爆速で作れる仕組み ○ Pococha の LP を支える技術 - DeNA Design ○ Figma プラグインを作って Pococha の LP 実装をほぼ自動化した · DeNA Engineers' Blog 108

Slide 109

Slide 109 text

1. Pocochaにおけるフロントエンドの領域 2. Pocochaにおけるフロントの歴史 フレームワーク移行 3. Pocochaにおけるフロントの歴史 インフラ・アーキテクチャ変更 4. 展望 109

Slide 110

Slide 110 text

あるべき姿に向けて 110

Slide 111

Slide 111 text

あるべき姿に向けて ● レポジトリの分割 ○ コード修正時に影響範囲を限定できる & QA工数の削減 111

Slide 112

Slide 112 text

あるべき姿に向けて ● レポジトリの分割 ○ コード修正時に影響範囲を限定できる & QA工数の削減 ● Vercel のプロジェクト運用を整備したい ○ レポジトリ連携が出来ないので、開発環境のドメインの数だけプロジェクトが 乱立している ○ レポジトリ連携が GH:E 対応したら、ひとつのプロジェクトへまとめたい 112

Slide 113

Slide 113 text

あるべき姿に向けて ● レポジトリの分割 ○ コード修正時に影響範囲を限定できる & QA工数の削減 ● Vercel のプロジェクト運用を整備したい ○ レポジトリ連携が出来ないので、開発環境のドメインの数だけプロジェクトが 乱立している ○ レポジトリ連携が GH:E 対応したら、ひとつのプロジェクトへまとめたい ● 技術的負債の排除 ○ Rails に残っている Web ページの移行 ○ クラスコンポーネントの撲滅 113

Slide 114

Slide 114 text

あるべき姿に向けて ● レポジトリの分割 ○ コード修正時に影響範囲を限定できる & QA工数の削減 ● Vercel のプロジェクト運用を整備したい ○ レポジトリ連携が出来ないので、開発環境のドメインの数だけプロジェクトが 乱立している ○ レポジトリ連携が GH:E 対応したら、ひとつのプロジェクトへまとめたい ● 技術的負債の排除 ○ Rails に残っている Web ページの移行 ○ クラスコンポーネントの撲滅 ● まだまだやりたいことがある ○ 新機能開発, 各工程での効率化, etc... 114

Slide 115

Slide 115 text

まとめ 115

Slide 116

Slide 116 text

まとめ ● Pocochaにおけるフロントエンドの領域 ● Pocochaにおけるフロントの歴史 フレームワーク移行 ● Pocochaにおけるフロントの歴史 インフラ・アーキテクチャ変更 ● 展望 116

Slide 117

Slide 117 text

まとめ ● Pocochaにおけるフロントエンドの領域 ○ WebView, Web版, 公式サイト等、多岐にわたる ● Pocochaにおけるフロントの歴史 フレームワーク移行 ● Pocochaにおけるフロントの歴史 インフラ・アーキテクチャ変更 ● 展望 117

Slide 118

Slide 118 text

まとめ ● Pocochaにおけるフロントエンドの領域 ○ WebView, Web版, 公式サイト等、多岐にわたる ● Pocochaにおけるフロントの歴史 フレームワーク移行 ○ 事業拡大に耐えうるフレームワークへ ● Pocochaにおけるフロントの歴史 インフラ・アーキテクチャ変更 ● 展望 118

Slide 119

Slide 119 text

まとめ ● Pocochaにおけるフロントエンドの領域 ○ WebView, Web版, 公式サイト等、多岐にわたる ● Pocochaにおけるフロントの歴史 フレームワーク移行 ○ 事業拡大に耐えうるフレームワークへ ● Pocochaにおけるフロントの歴史 インフラ・アーキテクチャ変更 ○ 技術的負債を残さない開発へ ● 展望 119

Slide 120

Slide 120 text

まとめ ● Pocochaにおけるフロントエンドの領域 ○ WebView, Web版, 公式サイト等、多岐にわたる ● Pocochaにおけるフロントの歴史 フレームワーク移行 ○ 事業拡大に耐えうるフレームワークへ ● Pocochaにおけるフロントの歴史 インフラ・アーキテクチャ変更 ○ 技術的負債を残さない開発へ ● 展望 ○ 健全な体制で、Web ならではの価値を提供 120

Slide 121

Slide 121 text

121