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

開発速度を上げつつ品質を保つためのフロントエンド開発

Ryuya Yanagi
November 05, 2023

 開発速度を上げつつ品質を保つためのフロントエンド開発

PR TIMESで行なっている開発速度向上と品質担保のためにやっているフロントエンド開発の取り組みについてご紹介します。

Ryuya Yanagi

November 05, 2023
Tweet

More Decks by Ryuya Yanagi

Other Decks in Technology

Transcript

  1. 会社名 株式会社PR TIMES 所在地 東京都港区赤坂一丁目11番44号 設立日 2005年12月26日(16期目) 資本金 4億2066万円 代表者

    代表取締役社長 山口 拓己 従業員数 約250名(正社員135名※グルコース含む) 会社概要
  2. Product|基幹事業 プレスリリース配信サービスを運営 企業の一次情報が日本で最も集まるプラットフォームとして、国内トップシェア • 利用企業社数 • 国内上場企業利用率 • プレスリリース数 •

    メディアユーザー数 • パートナーメディア • サイト閲覧数 • SNSアカウント • 個人ユーザー数 83,548社 54.5% 33,801件 / 月 25,562名 234媒体 7,597万PV / 月 Facebook 128,949 Twitter 456,987 174,997名
  3. ページ単位でのReactリプレイス 旧技術スタック - jQuery - JavaScript (ES5以前) - JavaScript (ES6以降)

    - Vue.js - SCSS 新技術スタック - React - TypeScript - Emotion - TanStack Query - Recoil
  4. Monorepo vs Multi Repo - PR TIMESのフロントエンドメンバーは4人(当時) - Multi Repoにするとオーナーが存在しないRepositoryができそう

    - packageを運用した経験があるメンバーがいない - releaseやversion管理がよく分からない - private packageにする必要があり認証が煩雑になる MonorepoによるDesign Systemの配布
  5. Feature Flagの活用 Feature Flagとは export const FeaturePage = () =>

    { return ( <div> <h1>Feature Page</h1> {FeatureFlag ? <NewFeatureComponent /> : <OldFeatureComponent />} </div> ); };
  6. XOによるコーディングルールの統一 XO(https://github.com/xojs/xo) とは Opinionated but configurable ESLint wrapper with lots

    of goodies included. Enforces strict and readable code. Never discuss code style on a pull request again! No decision-making. No .eslintrc to manage. It just works! 意見が多いが設定可能なESLintラッパー。厳密で読みやすいコードを強制します。 もうプルリクエストでコードスタイルを議論する必要はありません!意思決定不 要。.eslintrcを管理する必要もありません。ただ動くだけです! (DeepL翻訳)
  7. Unit/Integration Testの拡充 使用しているツール Unit Test - Vitest, React Testing Library,

    JSDom, MSW, storybook/testing-library Integration Test - Playwright(API Fetchはinterceptでmock)
  8. Visual Regression TestによるUI崩れの検知 Playwright単体でのVisual Regression Test test('VRT', async ({ page

    }) => {
 await page.goto('/');
 // タイトルという文言が表示されているか確認する
 await expect(page.getByText('タイトル')).toBeVisible();
 // VRT
 await expect(page).toHaveScreenshot('VRT.png');
 });

  9. まとめ 開発速度向上の取り組み - Reactリプレイス - Design System - Feature Flag

    品質担保の取り組み - XOによる厳格なコーディング規約 - Unit/Integration Testの拡充 - Visual Regression Test