Submit Search
中規模Angularアプリケーションの再設計
8 likes
6,959 views
bitbank, Inc. Tokyo, Japan
bitbankの中規模Angularアプリケーションを再設計し、パフォーマンスの改善やメンテナンス性の向上を試みている話について発表します。
Engineering
Read more
1 of 33
Download now
Downloaded 10 times
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
More Related Content
PDF
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
Yoshiki Hayama
PDF
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
Yoshiki Hayama
PDF
MagicOnion入門
torisoup
PDF
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
PDF
まじめに!できる!LT
Akabane Hiroyuki
PPTX
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
Atsushi Nakamura
PPTX
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
NTT DATA Technology & Innovation
PPTX
JIRA / Confluence の必須プラグインはこれだ
Narichika Kajihara
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
Yoshiki Hayama
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
Yoshiki Hayama
MagicOnion入門
torisoup
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
まじめに!できる!LT
Akabane Hiroyuki
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
Atsushi Nakamura
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
NTT DATA Technology & Innovation
JIRA / Confluence の必須プラグインはこれだ
Narichika Kajihara
What's hot
(20)
PPTX
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
NTT DATA Technology & Innovation
PDF
IT系エンジニアのためのプレゼンテーション入門
Masahito Zembutsu
PDF
世界でいちばんわかりやすいドメイン駆動設計
増田 亨
KEY
やはりお前らのMVCは間違っている
Koichi Tanaka
PDF
ドメイン駆動設計 基本を理解する
増田 亨
PDF
モジュールの凝集度・結合度・インタフェース
Hajime Yanagawa
PDF
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
PDF
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
PDF
マイクロサービス化設計入門 - AWS Dev Day Tokyo 2017
Yusuke Suzuki
PDF
マイクロにしすぎた結果がこれだよ!
mosa siru
PDF
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
日本マイクロソフト株式会社
PDF
C#でわかる こわくないMonad
Kouji Matsui
PDF
今どきの若手育成にひそむ3つの思いこみ
Mariko Hayashi
PDF
Dockerfileを改善するためのBest Practice 2019年版
Masahito Zembutsu
PPTX
分散システムについて語らせてくれ
Kumazaki Hiroki
PDF
Lean coffee
Takeshi Arai
PDF
文字コードに起因する脆弱性とその対策(増補版)
Hiroshi Tokumaru
PDF
オブジェクト指向エクササイズのススメ
Yoji Kanno
PDF
Node.jsアプリの開発をモダン化するために取り組んできたこと
bitbank, Inc. Tokyo, Japan
PDF
LayerXのQAチームで目指したい動き方 (社内資料)
mosa siru
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
NTT DATA Technology & Innovation
IT系エンジニアのためのプレゼンテーション入門
Masahito Zembutsu
世界でいちばんわかりやすいドメイン駆動設計
増田 亨
やはりお前らのMVCは間違っている
Koichi Tanaka
ドメイン駆動設計 基本を理解する
増田 亨
モジュールの凝集度・結合度・インタフェース
Hajime Yanagawa
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
マイクロサービス化設計入門 - AWS Dev Day Tokyo 2017
Yusuke Suzuki
マイクロにしすぎた結果がこれだよ!
mosa siru
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
日本マイクロソフト株式会社
C#でわかる こわくないMonad
Kouji Matsui
今どきの若手育成にひそむ3つの思いこみ
Mariko Hayashi
Dockerfileを改善するためのBest Practice 2019年版
Masahito Zembutsu
分散システムについて語らせてくれ
Kumazaki Hiroki
Lean coffee
Takeshi Arai
文字コードに起因する脆弱性とその対策(増補版)
Hiroshi Tokumaru
オブジェクト指向エクササイズのススメ
Yoji Kanno
Node.jsアプリの開発をモダン化するために取り組んできたこと
bitbank, Inc. Tokyo, Japan
LayerXのQAチームで目指したい動き方 (社内資料)
mosa siru
Ad
More from bitbank, Inc. Tokyo, Japan
(20)
PDF
インフラチームの歴史とこれから
bitbank, Inc. Tokyo, Japan
PDF
ビットバンクのデプロイ戦略について
bitbank, Inc. Tokyo, Japan
PDF
ビットバンク流 アジャイル開発の紹介.pdf
bitbank, Inc. Tokyo, Japan
PDF
ビットバンクで求められるプロジェクトマネジメント
bitbank, Inc. Tokyo, Japan
PDF
ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境
bitbank, Inc. Tokyo, Japan
PDF
ビットバンクのマッチングエンジン.pdf
bitbank, Inc. Tokyo, Japan
PDF
Lightning Network, Swap, Nloop
bitbank, Inc. Tokyo, Japan
PDF
ビットバンクにおける少人数で支えるインフラチームの戦略
bitbank, Inc. Tokyo, Japan
PDF
bitbank Corporate Information
bitbank, Inc. Tokyo, Japan
PDF
ng build --prod & Continuous Delivery
bitbank, Inc. Tokyo, Japan
PDF
マーブル図で怖くないRxJS
bitbank, Inc. Tokyo, Japan
PDF
持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜
bitbank, Inc. Tokyo, Japan
PDF
仮想通貨取引所 bitbank の IaC の導入と実践
bitbank, Inc. Tokyo, Japan
PDF
Introduction of bitbank frontend development environment
bitbank, Inc. Tokyo, Japan
PDF
DeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるか
bitbank, Inc. Tokyo, Japan
PDF
ビットコインウォレットで手軽にパスワードレス認証が可能なbitidについての紹介
bitbank, Inc. Tokyo, Japan
PPTX
Ethereumのシャーディング概論
bitbank, Inc. Tokyo, Japan
PDF
Daocasinoにおけるstate channel実装
bitbank, Inc. Tokyo, Japan
PDF
TypeScriptでライトニングネットワークを使ってみよう
bitbank, Inc. Tokyo, Japan
PDF
Deploy TypeScript with CodePipeline in Fargate
bitbank, Inc. Tokyo, Japan
インフラチームの歴史とこれから
bitbank, Inc. Tokyo, Japan
ビットバンクのデプロイ戦略について
bitbank, Inc. Tokyo, Japan
ビットバンク流 アジャイル開発の紹介.pdf
bitbank, Inc. Tokyo, Japan
ビットバンクで求められるプロジェクトマネジメント
bitbank, Inc. Tokyo, Japan
ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境
bitbank, Inc. Tokyo, Japan
ビットバンクのマッチングエンジン.pdf
bitbank, Inc. Tokyo, Japan
Lightning Network, Swap, Nloop
bitbank, Inc. Tokyo, Japan
ビットバンクにおける少人数で支えるインフラチームの戦略
bitbank, Inc. Tokyo, Japan
bitbank Corporate Information
bitbank, Inc. Tokyo, Japan
ng build --prod & Continuous Delivery
bitbank, Inc. Tokyo, Japan
マーブル図で怖くないRxJS
bitbank, Inc. Tokyo, Japan
持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜
bitbank, Inc. Tokyo, Japan
仮想通貨取引所 bitbank の IaC の導入と実践
bitbank, Inc. Tokyo, Japan
Introduction of bitbank frontend development environment
bitbank, Inc. Tokyo, Japan
DeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるか
bitbank, Inc. Tokyo, Japan
ビットコインウォレットで手軽にパスワードレス認証が可能なbitidについての紹介
bitbank, Inc. Tokyo, Japan
Ethereumのシャーディング概論
bitbank, Inc. Tokyo, Japan
Daocasinoにおけるstate channel実装
bitbank, Inc. Tokyo, Japan
TypeScriptでライトニングネットワークを使ってみよう
bitbank, Inc. Tokyo, Japan
Deploy TypeScript with CodePipeline in Fargate
bitbank, Inc. Tokyo, Japan
Ad
中規模Angularアプリケーションの再設計
1.
中規模Angularアプリケーションの 再設計 Suguru Inatomi bitbank LT
Night #5
2.
© bitbank inc. 2 Suguru
Inatomi @laco2net
3.
今日のアジェンダ 3
4.
© bitbank inc. アジェンダ
4 ● アーキテクチャ導入の話 ● パフォーマンス改善の話 ● 品質改善の話
5.
アーキテクチャの話 5
6.
課題なきアーキテクチャは ただのアート 6
7.
© bitbank inc. bitbankアプリの大きな課題
7 ● 状態管理の分散 ○ Serviceごとに管理の仕方がバラバラ ● ビジネスロジックの点在 ○ コンポーネントがロジックを持っている
8.
© bitbank inc. 願望
8 ● 状態管理の分散 ○ 状態管理を一元化したい ● ビジネスロジックの点在 ○ コンポーネントから切り出してまとめたい ○ 適切にモジュール分割したい
9.
願望を叶えるための 構造を考える 9
10.
© bitbank inc. 中規模Angularアーキテクチャ
v1.1 10
11.
© bitbank inc. ベースになる原理原則
11 ● Presentation Domain Separation (PDS) ○ プレゼンテーションとドメインの分離 ● Single Responsibility Principle (SRP) ○ 単一責任の原則 ● Stable Dependencies Principle (SDP) ○ 安定依存の原則 ● Command Query Responsibility Segregation (CQRS) ○ コマンド・クエリ責務分離 ● Single source of truth (SSOT) ○ 唯一の情報源
12.
© bitbank inc. つまりどういうこと?
12 ● Presentation Domain Separation (PDS) ○ コンポーネントからビジネスロジックを切り出す ● Single Responsibility Principle (SRP) ○ サービスの役割を明確にして境界づける ● Stable Dependencies Principle (SDP) ○ ユースケース依存のモジュールとそうでないものを境界づける ● Command Query Responsibility Segregation ○ 状態を変更する経路を限定する ● Single source of truth ○ アプリケーションの状態を一元管理する
13.
© bitbank inc. Presentation
Domain Separation 13 Presentation系とDomain系を分離
14.
© bitbank inc. Single
Responsibility Principle 14 役割ごとにモジュールを分類
15.
© bitbank inc. Stable
Dependencies Principle 15 より安定しているモジュールに依存する
16.
© bitbank inc. Command
Query Responsibility Segregation 16 WriteOnlyのUsecaseと ReadOnlyのQueryを Componentが利用する
17.
© bitbank inc. Single
source of truth 17 アプリケーションの状態は Storeで管理する
18.
© bitbank inc. Usecase-Store-Query
18 ● Storeの実装として @ngrx/store を採用
19.
© bitbank inc. NgRxと学習曲線の設計
19 ● NgRxへの関心をStore層に閉じる ○ NgRxから別のライブラリに変えやすくする ○ NgRxを知らなくても開発に参加できるようにする ● 参考: システムの学習曲線とAngularアプリケーションの設計
20.
© bitbank inc. Work
in Progress 20 ● Presentationのモジュール化はがんばりすぎない ○ 効果が薄い ● PDSができたら60点(可) ○ PDSさえ出来ていればどうとでもなる ● Webのことだけ考える(bitbankの場合) ○ locationやwindowの抽象化に固執しない ● TypeScriptとして簡潔であることを重視する ○ AngularやRxJSを使いこなそうとしない
21.
小休止 questions$ .pipe( takeUntil( timer(3分)
) ) .subscribe() 21
22.
パフォーマンス改善の話 22
23.
© bitbank inc. やったこと
23 ● バンドルサイズの削減 ○ main.bundle.js: 1.96MB -> 1.29MB (gzip前) ● 一部CSSのインライン化 ○ 起動前のローディング用のCSS
24.
© bitbank inc. バンドルサイズの削減内訳
24 ● 脱lodash ( => lodash.XXX ) ● 脱moment ( => dayjs ) ● 脱SharedModule ● Angular v8.0 (Differential Loading) ○ 参考
25.
© bitbank inc. バンドルサイズ推移
25
26.
© bitbank inc. 初期CSSのインライン化
26 ● ローディングアニメーション用のCSS ● CSSのロードが終わるまでローディングが出なかった ● index.htmlにハードコード ○ ほぼ変わることのない部分 ○ HTMLのサイズはそれほど問題ではない
27.
© bitbank inc. 留意点
27 ● bitbankのアプリの特殊性 ○ ほぼ検索流入しない ○ リアルタイムデータ依存(SSRしない) ● 初期ロードパフォーマンスの重要度: 低 ● アーキテクチャを犠牲にしてまで高速化するモチベーションはない ○ あるべき形でそれ相応のパフォーマンスであればOK
28.
品質改善の話 28
29.
© bitbank inc. 品質とは?
29 ● バグが少ないアプリケーションを目指す ● アプリケーションの入口と出口で品質を担保する ○ 入口: デプロイ前にバグを除去する = テスト ○ 出口: デプロイ後にバグを検知する = 監視
30.
© bitbank inc. アプリケーションの監視
30 ● エラーの発生を検知する ○ ツール: Sentry ● 検知できた例 ○ リリース後に特定のブラウザでエラーが起きていた ■ Polyfill不足 ○ `Cannot read property *** of undefined` ■ TypeScriptの型定義漏れ (Null Check)
31.
© bitbank inc. ノイズが多い問題
31 ● どんなエラーも全部流れてくる ○ アプリケーション側でハンドルすべき例外 ○ サードパーティJSがグローバルに投げるエラー ● 監視を運用するにはノイズを除去する必要がある ○ Slack通知が多すぎる ● 取り組み ○ 例外処理の見直し ○ HTTPリクエストにリトライを導入 ○ 通知すべきエラーのフィルター設定
32.
まとめ 32
33.
© bitbank inc. Takeaway
33 ● アーキテクチャは割り切りとコスパが大事 ○ 例:「PDSさえできてれば合格」 ● 守破離。まずは歴史に学び、原理原則を知る ● moment.jsやlodashの利用は計画的に ● SharedModuleが許されるのは小規模アプリまで ● アプリケーションの監視は重要 ○ 実行時エラーに気づける仕組みを作る
Download