Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
リプレイスプロジェクトで考えるフロントエンド開発 / Classi Angular Night #1
Search
Wataru KASAHARA
January 31, 2019
Programming
3
2.4k
リプレイスプロジェクトで考えるフロントエンド開発 / Classi Angular Night #1
Classi Angular Night #1 -EdTech業界での活用事例とベストプラクティス-
https://connpass.com/event/112186/
Wataru KASAHARA
January 31, 2019
Tweet
Share
More Decks by Wataru KASAHARA
See All by Wataru KASAHARA
NgRx component と component-store について / mini-ng-japan-2020
kasaharu
0
830
Classi リプレイスプロジェクト フロントエンドアーキテクチャ変遷 / Classi Angular Night #4
kasaharu
3
1.6k
Deep dive into component / classi-angular-night-number-3
kasaharu
0
2.2k
Angular Way をまっすぐ歩くために / classi-angular-night-number-2
kasaharu
1
2k
React 初心者が初級者になるまで / react-sakana
kasaharu
0
34
Other Decks in Programming
See All in Programming
2万ページのSSG運用における工夫と注意点 / Vue Fes Japan 2024
chinen
3
1.3k
Kotlin2でdataクラスの copyメソッドを禁止する/Data class copy function to have the same visibility as constructor
eichisanden
1
120
讓數據說話:用 Python、Prometheus 和 Grafana 講故事
eddie
0
350
RailsのPull requestsのレビューの時に私が考えていること
yahonda
5
1.7k
飲食業界向けマルチプロダクトを実現させる開発体制とリアルな現状
hiroya0601
1
390
Go言語でターミナルフレンドリーなAIコマンド、afaを作った/fukuokago20_afa
monochromegane
2
140
弊社の「意識チョット低いアーキテクチャ」10選
texmeijin
5
23k
破壊せよ!データ破壊駆動で考えるドメインモデリング / data-destroy-driven
minodriven
16
4k
Sidekiqで実現する 長時間非同期処理の中断と再開 / Pausing and Resuming Long-Running Asynchronous Jobs with Sidekiq
hypermkt
6
2.7k
Server Driven Compose With Firebase
skydoves
0
390
macOS でできる リアルタイム動画像処理
biacco42
6
1.7k
Universal Linksの実装方法と陥りがちな罠
kaitokudou
1
220
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
A better future with KSS
kneath
238
17k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
13
1.9k
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
KATA
mclloyd
29
13k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
7
150
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
355
29k
Optimizing for Happiness
mojombo
376
69k
Build The Right Thing And Hit Your Dates
maggiecrowley
32
2.4k
Optimising Largest Contentful Paint
csswizardry
33
2.9k
The Cost Of JavaScript in 2023
addyosmani
45
6.6k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
Transcript
Copyright © 2019 Classi Corp. All Rights Reserved. リプレイスプロジェクトで考える フロントエンド開発
2019/1/31 Classi Angular Night #1 Copyright © 2019 Classi Corp. All Rights Reserved. Classi 株式会社 笠原渉
Copyright © 2019 Classi Corp. All Rights Reserved. • 笠原
渉 (かさはら わたる) • Classi 株式会社 • フロントエンドエンジニア • リプレイス案件担当 1 About Me @kasaharu
Copyright © 2019 Classi Corp. All Rights Reserved. 1. 今の
Classi の問題点 2. リプレイスプロジェクトの目的 3. 今やってること 4. これから 2 目次
Copyright © 2019 Classi Corp. All Rights Reserved. • 複数のリポジトリ
& さまざまなライブラリ ◦ 10 を超えるリポジトリ ◦ AngularJS, Angular, React, Backbone などを使用 • インストール時から変わらないバージョン ◦ セキュリティリスク & EOL • ルールのないコード ◦ コードリーディングの難易度高 • テストコードなし ◦ デグレード可能性大 3 今の Classi が抱える問題点
Copyright © 2019 Classi Corp. All Rights Reserved. • 複数のリポジトリ
& さまざまなライブラリ ◦ 10 を超えるリポジトリ ◦ AngularJS, Angular, React, Backbone などを使用 • インストール時から変わらないバージョン ◦ セキュリティリスク & EOL • ルールのないコード ◦ コードリーディングの難易度高 • テストコードなし ◦ デグレード可能性大 4 今の Classi が抱える問題点 メンテナンス・機能追加が困難!!!
Copyright © 2019 Classi Corp. All Rights Reserved. 5 リプレイスプロジェクト
Copyright © 2019 Classi Corp. All Rights Reserved. • Mono-repo
化 & Angular 一本化 • 継続的なパッケージアップデート • コーディングルールの整備 • テストコード 6 リプレイスプロジェクトの目的
Copyright © 2019 Classi Corp. All Rights Reserved. 7 Mono-repo
化
Copyright © 2019 Classi Corp. All Rights Reserved. • Angular
Multiple Projects ◦ 1 workspace(repository) で複数のプロジェクトが管理できる ◦ Angular CLI v6 で提供された機能 8 Mono-repo 化
Copyright © 2019 Classi Corp. All Rights Reserved. • 利点
◦ リポジトリが 1 つ -> ルールを共有しやすい ▪ CI の設定 ▪ npm scripts ◦ package.json が 1 つ ▪ プロジェクト間で使用するパッケージにばらつきがでにくい ▪ バージョンアップ : 1 回やればよい 9 Mono-repo 化
Copyright © 2019 Classi Corp. All Rights Reserved. 10 継続的なパッケージアップデート
Copyright © 2019 Classi Corp. All Rights Reserved. • Renovate
の導入 ◦ GitHub Apps • 特徴 ◦ 対象リポジトリの package.json を監視 してパッケージに更新があった場合 PR を発行 11 継続的なパッケージアップデート
Copyright © 2019 Classi Corp. All Rights Reserved. • Renovate
の利点 ◦ スケジュール管理 ◦ auto merge 機能 • 参考 ◦ フロントエンド開発でパッケージのアッ プデートを継続的におこなう 12 継続的なパッケージアップデート
Copyright © 2019 Classi Corp. All Rights Reserved. 13 コーディングルールの整備
Copyright © 2019 Classi Corp. All Rights Reserved. • フレームワークを揃えたらコーディングルールが統一
14 コーディングルールの整備
Copyright © 2019 Classi Corp. All Rights Reserved. • フレームワークを揃えたらコーディングルールが統一
15 コーディングルールの整備 もちろんそんなことはない!
Copyright © 2019 Classi Corp. All Rights Reserved. • Linter
& Formatter の導入 ◦ TSLint ◦ stylelint ◦ Prettier 16 コーディングルールの整備
Copyright © 2019 Classi Corp. All Rights Reserved. • TSLint
◦ 最初から「導入は」されている ◦ ただしルールは見直しが必要 ▪ 循環的複雑度の閾値設定 ▪ console.log() の禁止 17 コーディングルールの整備
Copyright © 2019 Classi Corp. All Rights Reserved. • stylelint
◦ CSS の Linter ◦ stylelint-config-standard というデファクトなルールがあるので導 入が楽 18 コーディングルールの整備
Copyright © 2019 Classi Corp. All Rights Reserved. • Prettier
◦ Formatter ◦ TS ファイルだけでなく HTML にも対応 19 コーディングルールの整備
Copyright © 2019 Classi Corp. All Rights Reserved. • 利点
◦ コードレビューのコストが格段に下がる ▪ 細かいレビューは自動化 ◦ コードレビューの質があがる ▪ 本質的なレビューが可能 ◦ CI で動かすことで定常的にチェックできる • 欠点 ◦ 良くも悪くも Lint & Formatter に従う ◦ フォーマット結果が一意にならない時がある… 20 コーディングルールの整備
Copyright © 2019 Classi Corp. All Rights Reserved. 21 単体テスト
Copyright © 2019 Classi Corp. All Rights Reserved. • 単体テストを実施
◦ Angular CLI -> Jasmine と Karma が導入済み ◦ つまり書くだけ! 22 単体テスト
Copyright © 2019 Classi Corp. All Rights Reserved. • カバレッジの閾値設定
◦ 設定した閾値を下回るとエラーになる ◦ 今回はすべてのカバレッジで 100% を設定 23 単体テスト
Copyright © 2019 Classi Corp. All Rights Reserved. • なぜカバレッジの閾値を
100% にしたか ◦ 予期していないパターンの漏れ防止 ◦ 継続的なパッケージアップデートをするために簡単にリグレッ ションする方法が必要だった 24 単体テスト
Copyright © 2019 Classi Corp. All Rights Reserved. • ベースを整えた上で次のことを考える
25 今やっていること
Copyright © 2019 Classi Corp. All Rights Reserved. 26 コンポーネント設計
Copyright © 2019 Classi Corp. All Rights Reserved. 27 コンポーネント設計
Atomic Design Flux Architecture
Copyright © 2019 Classi Corp. All Rights Reserved. 28 Atomic
Design
Copyright © 2019 Classi Corp. All Rights Reserved. • UI
コンポーネント設計のためのデザインフレームワー ク ◦ ref. http://atomicdesign.bradfrost.com/ • 小さいコンポーネントの組み合わせで UI を作る 29 Atomic Design
Copyright © 2019 Classi Corp. All Rights Reserved. • 依存関係が明確
◦ 上が下に依存、その逆は禁止 30 Atomic Design Atoms Molecules Organisms Templates Pages Button, Heading Form Header ページの枠組み
Copyright © 2019 Classi Corp. All Rights Reserved. 31 Atomic
Design を考える前に
Copyright © 2019 Classi Corp. All Rights Reserved. • デザインガイドライン
◦ Classi にはデザインガイドラインが存在 • デザインガイドラインの目的 ◦ 数年かけて作られたサービスのデザイン統一 • 現状 ◦ 独立したリポジトリで CSS を定義しているが、HTML の構造は使 う側で書く • 問題点 ◦ 使う側で HTML を記述するので手間がかかる ◦ 期待する HTML の構造を変更すると使っている側で軒並み変更 が必要 32 コンポーネント設計
Copyright © 2019 Classi Corp. All Rights Reserved. • デザインガイドライン
◦ Classi にはデザインガイドラインが存在 • デザインガイドラインの目的 ◦ 数年かけて作られたサービスのデザイン統一 • 現状 ◦ 独立したリポジトリで CSS を定義しているが、HTML の構造は使 う側で書く • 問題点 ◦ 使う側で HTML を記述するので手間がかかる ◦ 期待する HTML の構造を変更すると使っている側で軒並み変更 が必要 33 コンポーネント設計 あくまでデザインガイドライン
Copyright © 2019 Classi Corp. All Rights Reserved. 34 ガイドラインベースの
コンポーネント作成
Copyright © 2019 Classi Corp. All Rights Reserved. • すでにデザインのベースがあるので再利用可能なコ
ンポーネント群に仕上げる 35 Atomic Design ベースのコンポーネント作成
Copyright © 2019 Classi Corp. All Rights Reserved. 36 Atomic
Design ベースのコンポーネント作成 デザインガイドライン Atomic Design
Copyright © 2019 Classi Corp. All Rights Reserved. • Mono-repo
内での components project ◦ Angular CLI の Library 機能を使ったコンポーネントライブラリの 作成 ▪ Application project と責務を分けられる ▪ 複数の Application project で使用可能 • 参考 ◦ Angular Library を使って共通コンポーネントを作る 37 Classi での Atomic Design Componets
Copyright © 2019 Classi Corp. All Rights Reserved. • 方針
◦ Atoms レベルのコンポーネントから作成 ▪ 再利用がしやすい最小部品から用意 ▪ 一部 Header, Footer などの Organisms は作成 • Storybook によるカタログ化 38 Classi での Atomic Design Componets
Copyright © 2019 Classi Corp. All Rights Reserved. • 方針
◦ Atoms レベルのコンポーネントから作成 ▪ 再利用がしやすい最小部品から用意 ▪ 一部 Header, Footer などの Organisms は作成 • Storybook によるカタログ化 39 Classi での Atomic Design Componets Storybook 教えてくれ、誰か
Copyright © 2019 Classi Corp. All Rights Reserved. 40 状態管理
Copyright © 2019 Classi Corp. All Rights Reserved. • NgRx
を使用 ◦ Redux インスパイアの Angular 用状態管理ライブラリ • 追加のパッケージを入れることで Redux Devtools Extension も使える 41 状態管理
Copyright © 2019 Classi Corp. All Rights Reserved. 42 Atomic
Design & Flux Architecture
Copyright © 2019 Classi Corp. All Rights Reserved. 43 コンポーネント設計
Effects Reducer Action State Container Component Presentational Component Component Library Angular NgRx
Copyright © 2019 Classi Corp. All Rights Reserved. 44 コンポーネント設計
Effects Reducer Action State Container Component Presentational Component Component Library Angular NgRx
Copyright © 2019 Classi Corp. All Rights Reserved. 45 コンポーネント設計
Effects Reducer Action State Container Component Presentational Component Component Library Angular NgRx
Copyright © 2019 Classi Corp. All Rights Reserved. 46 コンポーネント設計
Effects Reducer Action State Container Component Presentational Component Component Library Angular NgRx
Copyright © 2019 Classi Corp. All Rights Reserved. 47 コンポーネント設計
Web API Effects Reducer Action State Container Component Presentational Component Component Library Angular NgRx
Copyright © 2019 Classi Corp. All Rights Reserved. 48 コンポーネント設計
Web API Effects Reducer Action State Container Component Presentational Component Component Library Angular NgRx 責務を明確に
Copyright © 2019 Classi Corp. All Rights Reserved. • 当たり前のことを当たり前に
◦ パッケージアップデート ◦ コーディングルール整備 ◦ 単体テスト • アプリケーション設計 ◦ コンポーネント設計 ◦ 状態管理 49 今やっていること
Copyright © 2019 Classi Corp. All Rights Reserved. • コンポーネント設計
◦ Library で切り分けた共通コンポーネント以外の境界 • Store 設計 ◦ Store どの粒度で作るか問題 50 悩み
Copyright © 2019 Classi Corp. All Rights Reserved. 51 これからの課題
Copyright © 2019 Classi Corp. All Rights Reserved. • パフォーマンス測定
• E2E テスト 52 課題
Copyright © 2019 Classi Corp. All Rights Reserved. ご清聴ありがとうございました 53