Slide 1

Slide 1 text

© 2012-2022 BASE, Inc. 1 #vuefes_cloudsign @gatchan0807 BASEのフロントエンド組織の人数が 2.5倍になって起きた変化 VueFes Japan Online 2022 スポンサーセッション @gatchan0807 (がっちゃん)

Slide 2

Slide 2 text

© 2012-2022 BASE, Inc. 2 #vuefes_cloudsign @gatchan0807 自己紹介 がっちゃん(Yuki Koga) @gatchan0807 ● BASE株式会社 2021年1月入社 ● 所属: BASE / Product Dev / CRM3 ○ 「共通コンポーネントのテスト実装方法にあえてVRTを 選択した話」のプログラミングをするパンダさんと同じチーム ● 好き:フロントエンド、個人開発、アーニャ(SPY×FAMILY) ○ 「#アニャじぇね」というWebアプリを作ったので、 よければ遊んでみてください〜!

Slide 3

Slide 3 text

© 2012-2022 BASE, Inc. 3 #vuefes_cloudsign @gatchan0807 感想や質問などの ツイート大歓迎!

Slide 4

Slide 4 text

© 2012-2022 BASE, Inc. 4 © 2012-2022 BASE, Inc. 4 今日お話すること

Slide 5

Slide 5 text

© 2012-2022 BASE, Inc. 5 #vuefes_cloudsign @gatchan0807 今日お話すること 1 2 BASEのフロントエンドは これからどこに進んでいくのか BASEでは中〜大規模になった Vue.jsアプリケーションをどのように運用しているのか

Slide 6

Slide 6 text

© 2012-2022 BASE, Inc. 6 #vuefes_cloudsign @gatchan0807 以下の記事から2年経った今 2020年12月2日公開 Vue.js 3 アップデート対応の現状報告 Vue.js 2.6からVue.js 3にアップデートしていく際にどのような作業を 行っていくのかの戦略と実施した具体的な作業の一部を 解説している記事 2020年9月17日公開 BASEにおけるVue.jsのこれまでとこれから 2018年時点のフロントエンド技術のリプレース時に、Vue.jsを 選択してから2020年末時点までの振り返りと BASEのフロントエンド技術に対する基本的な考え方が書かれた記事 https://devblog.thebase.in/entry/2020/12/02/160000 https://devblog.thebase.in/entry/2020/09/17/110000

Slide 7

Slide 7 text

© 2012-2022 BASE, Inc. 7 © 2012-2022 BASE, Inc. 7 BASEとは どんなプロダクトなのか

Slide 8

Slide 8 text

© 2012-2022 BASE, Inc. 8 #vuefes_cloudsign @gatchan0807 コンセプト: 誰でも簡単に使える ネットショップ作成サービス ● 商品・注文管理 ● ショップデザイン ● 顧客情報管理 などを行うショップオーナー向け機能 + ● 商品検索 ● 決済・注文(カート) などを行う購入者(カスタマー)向け機能

Slide 9

Slide 9 text

© 2012-2022 BASE, Inc. 9 #vuefes_cloudsign @gatchan0807 ショップ運営に必須な機能とは別に、 ショップオーナーが 自身のショップに必要な機能だけを 選択して利用できるようにする仕組み 拡張機能「BASE Apps」 抽選販売 App クーポン App 広告効果測定 App メッセージ App HTML編集 App 配送日設定 App ブログ App 定期振込 App 他にも外部サービスとの 連携Appも多数…

Slide 10

Slide 10 text

© 2012-2022 BASE, Inc. 10 © 2012-2022 BASE, Inc. 10 技術構成は どうなってるのか

Slide 11

Slide 11 text

© 2012-2022 BASE, Inc. 11 #vuefes_cloudsign @gatchan0807 購入者向けページ

Slide 12

Slide 12 text

© 2012-2022 BASE, Inc. 12 #vuefes_cloudsign @gatchan0807 ショップオーナー向けページ

Slide 13

Slide 13 text

© 2012-2022 BASE, Inc. 13 #vuefes_cloudsign @gatchan0807 ショップオーナー向けページ ここのお話は パンダさんの発表にて

Slide 14

Slide 14 text

© 2012-2022 BASE, Inc. 14 © 2012-2022 BASE, Inc. 14 BASEというプロダクトと フロントエンド組織の繋がり

Slide 15

Slide 15 text

© 2012-2022 BASE, Inc. 15 #vuefes_cloudsign @gatchan0807 2020年〜2022年にかけて、コロナ禍によるEC需要が高まり、 プロダクトの利用者が急増した プロダクト利用者の急増

Slide 16

Slide 16 text

© 2012-2022 BASE, Inc. 16 #vuefes_cloudsign @gatchan0807 伴ってエンジニア組織の拡大 フロントエンド組織の人数 (業務委託メンバー含む) エンジニア組織全体の人数 (業務委託メンバー含む)

Slide 17

Slide 17 text

© 2012-2022 BASE, Inc. 17 #vuefes_cloudsign @gatchan0807 組織の変遷 2018年12月 【数名】 デザイナー組織からスピンオフしてフロントエンド組織誕生 (frontend チーム) 2021年1月 【10名弱】 フロントエンド組織が2チームに分割(gatchan0807 + 3名がJOIN) (frontend1 / frontend2 チーム) 2022年9月現在 【20名弱】 フロントエンド/バックエンド問わず所属する8チームに (CRMチーム、Sales Promotionチーム、 etc...) プロジェクトにメンバー数名をアサインする形 プロジェクトにチームごとにアサインする形

Slide 18

Slide 18 text

© 2012-2022 BASE, Inc. 18 #vuefes_cloudsign @gatchan0807 組織の変遷 2018年12月 【数名】 デザイナー組織からスピンオフしてフロントエンド組織誕生 (frontend チーム) 2021年1月 【10名弱】 フロントエンド組織が2チームに分割(gatchan0807 + 3名がJOIN) (frontend1 / frontend2 チーム) 2022年9月現在 【20名弱】 フロントエンド/バックエンド問わず所属する8チームに (CRMチーム、Sales Promotionチーム、 etc...) プロジェクトにメンバー数名をアサインする形 プロジェクトにチームごとにアサインする形

Slide 19

Slide 19 text

© 2012-2022 BASE, Inc. 19 #vuefes_cloudsign @gatchan0807 組織の変遷 2018年12月 【数名】 デザイナー組織からスピンオフしてフロントエンド組織誕生 (frontend チーム) 2021年1月 【10名弱】 フロントエンド組織が2チームに分割(gatchan0807 + 3名がJOIN) (frontend1 / frontend2 チーム) 2022年9月現在 【20名弱】 フロントエンド/バックエンド問わず所属する8チームに (CRMチーム、Sales Promotionチーム、 etc...) プロジェクトにメンバー数名をアサインする形 プロジェクトにチームごとにアサインする形

Slide 20

Slide 20 text

© 2012-2022 BASE, Inc. 20 © 2012-2022 BASE, Inc. 20 組織の変化に合わせて フロントエンドのコードを どう変化させてきたか

Slide 21

Slide 21 text

© 2012-2022 BASE, Inc. 21 #vuefes_cloudsign @gatchan0807 フロントエンドのコードの変遷 〜2018年ごろ CakePHPのテンプレートエンジン機能 + jQueryやバニラJSによるデータフェッチ

Slide 22

Slide 22 text

© 2012-2022 BASE, Inc. 22 #vuefes_cloudsign @gatchan0807 フロントエンドのコードの変遷 2019年〜2020年ごろ CakePHPで大枠のルーティング + Vue.jsで機能単位で分けた小さなSPAで画面を構築

Slide 23

Slide 23 text

© 2012-2022 BASE, Inc. 23 #vuefes_cloudsign @gatchan0807 フロントエンドのコードの変遷 2019年〜2020年ごろ CakePHPで大枠のルーティング + Vue.jsで機能単位で分けた小さなSPAで画面を構築

Slide 24

Slide 24 text

© 2012-2022 BASE, Inc. 24 #vuefes_cloudsign @gatchan0807 フロントエンドのコードの変遷 2019年〜2020年ごろ CakePHPで大枠のルーティング + Vue.jsで機能単位で分けた小さなSPAで画面を構築

Slide 25

Slide 25 text

© 2012-2022 BASE, Inc. 25 #vuefes_cloudsign @gatchan0807 フロントエンドのコードの変遷 2019年〜2020年ごろ CakePHPで大枠のルーティング + Vue.jsで機能単位で分けた小さなSPAで画面を構築

Slide 26

Slide 26 text

© 2012-2022 BASE, Inc. 26 #vuefes_cloudsign @gatchan0807 フロントエンドのコードの変遷 2019年〜2020年ごろ CakePHPで大枠のルーティング + Vue.jsで機能単位で分けた小さなSPAで画面を構築 ローカル環境と デプロイ時のビルド時間の 肥大化が問題に!

Slide 27

Slide 27 text

© 2012-2022 BASE, Inc. 27 #vuefes_cloudsign @gatchan0807 フロントエンドのコードの変遷 2021年〜現在 CakePHPで大枠のルーティング + 巨大になったVue.jsアプリケーションを パッケージに分割

Slide 28

Slide 28 text

© 2012-2022 BASE, Inc. 28 #vuefes_cloudsign @gatchan0807 拡張機能「BASE Apps」という仕組みは フロントエンドパッケージの分割の単位としてピッタリで、 ディレクトリを機能単位で分けて管理・開発している どんな単位で分割してる? app-delivery-date/ app-takeout/ items/

Slide 29

Slide 29 text

© 2012-2022 BASE, Inc. 29 #vuefes_cloudsign @gatchan0807 (2020年末時点の記事からの抜粋) ● Deprecatedな機能の置き換え ● 社内UIライブラリ(BBQ)のVue3対応 ● monorepo化と依存整理 ● packageごとにバージョンを切り替えて徐々に移行 2020年末のブログ記事でも言及 https://devblog.thebase.in/entry/2020/12/02/160000

Slide 30

Slide 30 text

© 2012-2022 BASE, Inc. 30 #vuefes_cloudsign @gatchan0807 (2020年末時点の記事からの抜粋) ● Deprecatedな機能の置き換え ● 社内UIライブラリ(BBQ)のVue3対応 ● monorepo化と依存整理 ● packageごとにバージョンを切り替えて徐々に移行 2020年末のブログ記事でも言及 https://devblog.thebase.in/entry/2020/12/02/160000

Slide 31

Slide 31 text

© 2012-2022 BASE, Inc. 31 © 2012-2022 BASE, Inc. 31 BASEのmonorepo化の 工夫と苦労

Slide 32

Slide 32 text

© 2012-2022 BASE, Inc. 32 #vuefes_cloudsign @gatchan0807 BASEのmonorepoの特徴 → 機能単位で分けるmonorepo

Slide 33

Slide 33 text

© 2012-2022 BASE, Inc. 33 #vuefes_cloudsign @gatchan0807 ディレクトリ構成(イメージ) - web - frontend - src - app - items - orders - apps/ - coupon - domain - infra - components - web - frontend - shopadmin - items - orders - app-coupon - packages - api-client - util Before After パッケージ単位 パッケージ単位 パッケージ単位 パッケージ単位 パッケージ単位 パッケージ単位

Slide 34

Slide 34 text

© 2012-2022 BASE, Inc. 34 #vuefes_cloudsign @gatchan0807 2022年8月 ついに約90個のパッケージの 🎉monorepo化完了!🎉

Slide 35

Slide 35 text

© 2012-2022 BASE, Inc. 35 #vuefes_cloudsign @gatchan0807 monorepo化のメリット ● ビルド単位が細かくなる ○ ビルドの並列化が可能になる ○ ビルド成果物をキャッシュしておくことができるようになる ● BASE Appsや機能(パッケージ)の独立性が保たれる ○ 大人数での開発にも耐えやすくなる(スケールしやすくなる)

Slide 36

Slide 36 text

© 2012-2022 BASE, Inc. 36 #vuefes_cloudsign @gatchan0807 ● ビルドのワークフロー / ビルド成果物の管理が煩雑になり、速度も低下 ○ 細かく分けた事によってオーバーヘッドが生まれ、そのまま全てビルドする形だと フルビルドにかかる時間が長くなってしまった ● ボイラープレートが増え、パッケージの新規作成が大変 ○ package.json / webpack.config.jsなど、パッケージごとに用意する必要が あるものがたくさんあって、開発初期の手間が増えてしまった monorepo化しても残った課題

Slide 37

Slide 37 text

© 2012-2022 BASE, Inc. 37 #vuefes_cloudsign @gatchan0807 ● ビルドのワークフロー / ビルド成果物の管理が煩雑になり、速度も低下 ○ 細かく分けた事によってオーバーヘッドが生まれ、そのまま全てビルドする形だと フルビルドにかかる時間が長くなってしまった ⇒ Turborepoの導入 ● ボイラープレートが増え、パッケージの新規作成が大変 ○ package.json / webpack.config.jsなど、パッケージごとに用意する必要が あるものがたくさんあって、開発初期の手間が増えてしまった ⇒ scaffdogの導入 monorepo化しても残った課題

Slide 38

Slide 38 text

© 2012-2022 BASE, Inc. 38 #vuefes_cloudsign @gatchan0807 Turborepoの導入 〜ビルド並列化とキャッシュ利用〜

Slide 39

Slide 39 text

© 2012-2022 BASE, Inc. 39 #vuefes_cloudsign @gatchan0807 Next.js / SWR / Hyperなどを提供するVercelが 開発しているmonorepoに適したビルドシステム で、以下のような機能が予め用意されている ● ビルド成果物のキャッシュ ● 並列実行の最適化 ● パッケージ間の依存関係を考慮した再ビルド ○ ※パッケージごとに設定されたビルドコマンドを呼び出す形 Turborepoとは

Slide 40

Slide 40 text

© 2012-2022 BASE, Inc. 40 #vuefes_cloudsign @gatchan0807 Turborepoを導入したことによって ローカル環境・デプロイサーバー共に 高速化成功!🎉 336秒 → 292秒 44秒改善! ※Turborepo導入時の記録

Slide 41

Slide 41 text

© 2012-2022 BASE, Inc. 41 #vuefes_cloudsign @gatchan0807 monorepo化が進んだ今は さらに恩恵を受けられている! フルビルド時: 567秒 フルキャッシュ時: 12秒 一部パッケージにのみ 変更があった時: 85秒

Slide 42

Slide 42 text

© 2012-2022 BASE, Inc. 42 #vuefes_cloudsign @gatchan0807 scaffdogの導入 〜新しいパッケージを簡単に作る〜

Slide 43

Slide 43 text

© 2012-2022 BASE, Inc. 43 #vuefes_cloudsign @gatchan0807 scaffdogとは @wadackel さんが開発している Markdownベースのスキャフォールディングツール 以下のような特徴がある ● 1つの.mdファイルの中に出力する複数ファイルの テンプレートを記述できる ● h1とcodeブロック部分以外はメモとして 利用できるので、後から読みやすい

Slide 44

Slide 44 text

© 2012-2022 BASE, Inc. 44 #vuefes_cloudsign @gatchan0807 scaffdogを導入したことによって 新しいパッケージを対話式CLIで生成でき、 属人化せずに作成の手間が省けるように 🎉

Slide 45

Slide 45 text

© 2012-2022 BASE, Inc. 45 © 2012-2022 BASE, Inc. 45 BASEのフロントエンドの これから

Slide 46

Slide 46 text

© 2012-2022 BASE, Inc. 46 #vuefes_cloudsign @gatchan0807 monorepo化後の未来 monorepo化によって、BASE Appsや基本機能内の 影響範囲を(ライブラリ等込で)明確に区切ることができた

Slide 47

Slide 47 text

© 2012-2022 BASE, Inc. 47 #vuefes_cloudsign @gatchan0807 monorepo化後の未来 ⇒ BASE Appsや基本機能の新規開発・リニューアル時に、 Vueのバージョンやフレームワーク / ライブラリに縛られずに 個別に技術選定・アップデートをできるように monorepo化によって、BASE Appsや基本機能内の 影響範囲を(ライブラリ等込で)明確に区切ることができた

Slide 48

Slide 48 text

© 2012-2022 BASE, Inc. 48 #vuefes_cloudsign @gatchan0807 ⇒ BASE Appsや基本機能の新規開発・リニューアル時に、 Vueのバージョンやフレームワーク / ライブラリに縛られずに 個別に技術選定・アップデートをできるように monorepo化後の未来 monorepo化によって、BASE Appsや基本機能内の 影響範囲を(ライブラリ等込で)明確に区切ることができた これからここをやっていくぞ!!!

Slide 49

Slide 49 text

© 2012-2022 BASE, Inc. 49 © 2012-2022 BASE, Inc. 49 まとめ

Slide 50

Slide 50 text

© 2012-2022 BASE, Inc. 50 #vuefes_cloudsign @gatchan0807 今日お話すること(まとめ) 1 BASEでは中〜大規模になった Vue.jsアプリケーションをどのように運用しているのか

Slide 51

Slide 51 text

© 2012-2022 BASE, Inc. 51 #vuefes_cloudsign @gatchan0807 今日お話すること(まとめ) BASEではmonorepoを活用して、 既存のVueのアセットを運用・改善しています! 1 BASEでは中〜大規模になった Vue.jsアプリケーションをどのように運用しているのか

Slide 52

Slide 52 text

© 2012-2022 BASE, Inc. 52 #vuefes_cloudsign @gatchan0807 今日お話すること(まとめ) BASEのフロントエンドは これからどこに進んでいくのか 2 BASEでは中〜大規模になった Vue.jsアプリケーションをどのように運用しているのか 1 BASEではmonorepoを活用して、 既存のVueのアセットを運用・改善しています!

Slide 53

Slide 53 text

© 2012-2022 BASE, Inc. 53 #vuefes_cloudsign @gatchan0807 今日お話すること(まとめ) BASEのフロントエンドは これからどこに進んでいくのか 2 BASEでは中〜大規模になった Vue.jsアプリケーションをどのように運用しているのか 1 BASEではmonorepoを活用して、 既存のVueのアセットを運用・改善しています! monorepoに分けたパッケージ内で細かくライブラリ アップデートや機能改善を行っていきます!

Slide 54

Slide 54 text

© 2012-2022 BASE, Inc. 54 #vuefes_cloudsign @gatchan0807 今日お話しできなかったこと

Slide 55

Slide 55 text

© 2012-2022 BASE, Inc. 55 #vuefes_cloudsign @gatchan0807 などなど、他にもお話したいト ピックはたくさん… 今日お話しできなかったこと BASEのノーコードエディタ (ショップデザイン編集機能)について カート機能の大規模リプレイス(Next.js)

Slide 56

Slide 56 text

© 2012-2022 BASE, Inc. 56 #vuefes_cloudsign @gatchan0807 などなど、他にもお話したいト ピックはたくさん… 今日お話しできなかったこと BASEのノーコードエディタ (ショップデザイン編集機能)について カート機能の大規模リプレイス(Next.js) 「BASE テックブログ」で検索!🔍 or カジュアル面談まで󰡇

Slide 57

Slide 57 text

© 2012-2022 BASE, Inc. 57 #vuefes_cloudsign @gatchan0807 (2020年末時点の記事からの抜粋) ● Deprecatedな機能の置き換え ● 社内UIライブラリ(BBQ)のVue3対応 ● monorepo化と依存整理 ● packageごとにバージョンを切り替えて徐々に移行 2020年末のブログ記事でも言及 https://devblog.thebase.in/entry/2020/12/02/160000 monorepo化以外の部分は 現在進行中!

Slide 58

Slide 58 text

© 2012-2022 BASE, Inc. 58 © 2012-2022 BASE, Inc. 58 We are hiring! https://herp.careers/v1/base