Amebaブログ会員が利用するWebアプリケーションの構成を変更し、Webフロントエンドエンジニアが管理しきれるようにシステムを刷新している過程を紹介します。
Amebaブログの会員画面システム刷新の道程
View Slide
2自己紹介菅原 良太 (すがわら りょうた)株式会社サイバーエージェント● 子会社でメディアの立ち上げ● Ameba事業本部でWebフロントエンドエンジニア○ AmebaのSNSプラットフォームの運用開発○ Amebaブログの運用開発○ AmebaのWebフロントエンドエンジニア組織の開発● 新米パパ@ryo_suga
3Today● Amebaブログのシステム刷新とは● 開発の歩み● 現状の評価と今後の展望
Amebaブログのシステム刷新とは
5Amebaブログのシステム刷新とはシステムの複雑性を解消しシステム毎の責務を明確にし運用負荷を低くし生産性を向上させ、事業スピードを加速可能にする
6課題● システムの複雑性○ 多種多様な構成の乱立による認知負荷の拡大● 責務の曖昧さ○ BFFがフロントエンド/バックエンドで競合し開発イテレーションが回りづらい● 運用負荷○ リリースステップが分かれていて運用負荷が高い● 高い属人性○ 作ったっきり更新されずリリースできなくなる
7刷新を終えたときの理想を設定● 画面に関する開発サイクルをWebフロントエンドで完結できる○ 開発のリードタイムを短く、ハイパフォーマーを目指せる● Webフロントエンド開発者がUI開発に集中できる● 乱立したアプリケーションのカバレッジ(人/品質/運用面)が高い○ 作ったきりにならない体制を実現するシステム構成になっている● BFF・インフラ・開発環境の標準化と属人性解消○ システム管理を担えるメンバーが育つ→ 息を吸うようにすべてのシステムの品質を維持・向上し続けたいミッション
8難易度● 仕様の考古学● Webフロントエンド開発者が管理できる構成へのリアーキテクチャ○ Webフロントエンドで管理しきるためのバックエンド依存の分離● 新インフラ基盤への順応(責務領域の拡大○ Webフロントエンド領域での "Do it the Ameba Platform way" の設計● 限られた期間でどう刷新成果を最大化させるか○ 数年放置されたUIをSpindle(Design System)に乗せる○ UI開発に集中できるBFFの標準化
開発の歩み
10対象システムの把握要件定義 仕様策定 詳細設計 実装
11対象システムの把握要件定義 仕様策定 詳細設計 実装1. 対象システムの把握2. システム設計と技術選定3. 新しい仕様を策定 4. Design Docs 5. アプリケーション開発
12対象システムの把握要件定義 仕様策定 詳細設計 実装1. 対象システムの把握2. システム設計と技術選定3. 新しい仕様を策定 4. Design Docs 5. アプリケーション開発コード = 仕様・実装言語が変わる ⇒ 仕様をコードから日本語化・機能の整理 ⇒ 仕様の適正化仕様 (esa)
13AmebaのPlatformで利用するNode.js向けの共通実装をGitHub Packagesで提供例)● ログのフォーマット/レベルルールを統一● メトリクス実装を統一● トレーシング実装を統一● 他共通クライアントの実装システム設計と技術選定要件定義 仕様策定 詳細設計 実装1. 対象システムの把握2. システム設計と技術選定3. 新しい仕様を策定 4. Design Docs 5. アプリケーション開発Platform(アプリケーションが乗るインフラ環境)、アプリケーション基盤を統一
14システム設計と技術選定要件定義 仕様策定 詳細設計 実装1. 対象システムの把握2. システム設計と技術選定3. 新しい仕様を策定 4. Design Docs 5. アプリケーション開発要件が実現可能か、実例を想定したシーケンスの候補を比較検証例)● ログイン判定● ブラウザからのAPI呼び出し● ステート管理など
15システム設計と技術選定要件定義 仕様策定 詳細設計 実装1. 対象システムの把握2. システム設計と技術選定3. 新しい仕様を策定 4. Design Docs 5. アプリケーション開発UI / APIアプリケーションの責務分離APIエンドポイントの責務FrontendがBackendへデータを参照・更新するI/FSessionなど共通実装の点在を防ぐ画面(UI)のエンドポイントの責務UIの構築・ブラウザの振る舞いに集中アプリ数 ≒ ドメイン数
16システム設計と技術選定要件定義 仕様策定 詳細設計 実装1. 対象システムの把握2. システム設計と技術選定3. 新しい仕様を策定 4. Design Docs 5. アプリケーション開発システム運用の認知負荷を下げるためにモノレポ構成● モノレポ管理ツールには nx を利用● 各アプリケーションの構成の統一○ 新規アプリ作成時にテンプレートから生成○ 基盤のアップデート● CI / CD のワークフローを統一
17新しい仕様を策定要件定義 仕様策定 詳細設計 実装1. 対象システムの把握2. システム設計と技術選定3. 新しい仕様を策定 4. Design Docs 5. アプリケーション開発要件を元に”作るもの”の仕様を策定1. エンドポイント毎の仕様○ 画面仕様○ API仕様2. デザイン作成● Spindle利用でデザイン品質を統一3. テストケース● この時点でQCに向けたテストケースを作成具体的なコードではなくフローの説明を記載仕様通りに実装すれば誰でも同じ実装ができるレベルでドキュメンテーションを行う
18Design Docs要件定義 仕様策定 詳細設計 実装1. 対象システムの把握2. システム設計と技術選定3. 新しい仕様を策定 4. Design Docs 5. アプリケーション開発設計戻しを最小限に留める● 仕様をコードにする事前設計・計画● 具体的になにをどう実装するのかを共有できる○ 例:■ コンポーネントの粒度■ 関数の実例■ インターフェース● システム構成から乖離がないかのレビューもこの時点で実施○ 設計のコーチングとしても機能
19アプリケーション開発要件定義 仕様策定 詳細設計 実装1. 対象システムの把握2. システム設計と技術選定3. 新しい仕様を策定 4. Design Docs 5. アプリケーション開発Design Docsをもとに実装● コーディング● 自動テスト○ 基本的にはUnitテスト○ APIはエンドポイント単位でのスペックをテスト○ UIはコンポーネント単位でVisualRegressionテストDesign Docs通りにうまく行けば良いうまく行かなくても学びが明確になる
現状の評価と今後の展望
21現状の評価と今後の展望Good● UI責務をフロント責務のシステムに移すことで生産性・保守性が向上した● UIの開発に集中できる環境が作れた● モノレポにすることでコストは上がるが保守が容易になったMore● まだ影響範囲が狭いので、より適用対象を広げたときシステムが運用に耐えうるか● BFFの変更を先行して行っているので、バックエンド側の刷新を含めた際の最適の設計
ご清聴ありがとうございましたAmebaブログの会員画面システム刷新の道程