Upgrade to Pro — share decks privately, control downloads, hide ads and more …

minneのモダンWeb開発:フロントエンド編

yukishinonome
December 25, 2020

 minneのモダンWeb開発:フロントエンド編

2020年12月時点でのminneのフロントエンド刷新の概要です。「ペパボテックカンファレンス#13」で登壇した際のスライドになります。東雲はフロントエンド刷新にメインのエンジニアとして参加しています。

yukishinonome

December 25, 2020
Tweet

Other Decks in Technology

Transcript

  1. 2 2 Yuki Yamakoshi 山越 祐希    東雲( @Yshinonome_IT )

    2020年 GMOペパボ新卒入社 minne事業部マーケットグループ フロントエンドエンジニア 業務 • Web版minneの開発改善 • フロントエンド刷新
  2. 8 8 Web開発の流れ エンジニアとデザイナーの並行開発を可能にする デザイナー Web エンジニア 今までのWeb開発 開始 終了

    Web エンジニア 画面フローや画面デザインを考えてもらう デザイナーの作業を待つ ※他のタスクを進めます 考えたモックなどをエンジニアに渡す デザイナーの案を受けて実装を行う
  3. 9 9 Web開発の流れ エンジニアとデザイナーの並行開発を可能にする デザイナー サーバーサイド エンジニア これからのWeb開発 開始 終了

    フロントエンド エンジニア タスクの分割 対応が必要な コンポーネントを 伝える それぞれの領域で並行作業 一緒に表示の調整・確認 API提供
  4. 11 11 技術選定 Vue.js メリット • HTMLベースのテンプレート構文なので学習コストが低い • 双方向データバインディングにより、 データ更新による挙動を簡単に実装できる

    デメリット • 双方向データバインディングはデータの流れを複雑にする • TypeScriptとの相性が微妙 • メジャーアップデートがあり、Composition APIの書き方覚える必要がある
  5. 12 12 技術選定 React メリット • TypeScriptとの相性が良い • 単方向データバインディングによりデータの流れがわかりやすい 大規模開発で有利

    • React Hooksの登場によりかなり書きやすくなった クラスを書く必要がほぼなくなった デメリット • JSX記法なのでデザイナーもJavaScriptをある程度学ぶ必要がある 学習コストが高い
  6. 13 13 技術選定 minneではReact 理由 • TypeScriptでの開発が前提なので相性が良い方が良い • 開発の規模が大きくなっていってもデータの流れがわかりやすい •

    コンポーネントを適切に分けて開発をすれば プログラムの再利用性が高い 学習コストの面を考慮しても上記のメリットを取るべきと判断した
  7. 15 15 技術選定 minneではNext.js 理由 • アプリケーションフレームワークを使うことで開発コストを抑える • minneはユーザーが作品を登録し頻繁に更新が行われ、 SEOも維持したいのでSSRがやりたかった

    • ビルド周りの最適化やページのプリフェッチなどの パフォーマンスチューニングを裏でやってくれる • ルーティングの設定を自分でやる必要がない
  8. 17 17 技術選定 CSS Modules(Next.js 9.2〜) メリット • CSSファイルで書くのでそのままの記法で書ける •

    JSファイルと分離されている • Next.jsがデフォルトサポートしていて、 ファイル名.module.css にするとScopedなCSSになる デメリット • TypeScriptの型システムの恩恵がそのままでは得られない
  9. 18 18 技術選定 CSS in JS(styled-components) メリット • ファイル単位、コンポーネント単位でのスコープが可能 •

    JSとして書くのでJSの変数をそのまま使える デメリット • SSR対応させるには設定が必要になる
  10. 19 19 技術選定 minneではCSS Modules 理由 • CSSファイルをJSファイルから分離することで エンジニアとデザイナーがより並行作業しやすくなる(感覚) •

    JSファイルの行数も抑えられ、 組み込みコンポーネントで書けるからコードが読みやすい(感覚) • 選定の判断をするほどの機能的な良し悪しの差は あまりないと思っていて、ひとまず、 よりシンプルに書けるCSS Modulesを使ってみようという判断
  11. 21 21 新しいフロントエンド構成図 Next.js(React)× TypeScript 社内横断の デザインシステム Inhouse ライブラリ APIの取得(Apollo

    Client) コンポーネント Container Components Presentational Components GraphQL CSS Modules テスト(Jest) フロントエンドの インフラ