Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
bitbank, Inc. Tokyo, Japan
PDF, PPTX
6,974 views
中規模Angularアプリケーションの再設計
bitbankの中規模Angularアプリケーションを再設計し、パフォーマンスの改善やメンテナンス性の向上を試みている話について発表します。
Engineering
◦
Read more
8
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 33
2
/ 33
3
/ 33
4
/ 33
5
/ 33
6
/ 33
7
/ 33
8
/ 33
9
/ 33
10
/ 33
11
/ 33
12
/ 33
13
/ 33
14
/ 33
15
/ 33
16
/ 33
17
/ 33
18
/ 33
19
/ 33
20
/ 33
21
/ 33
22
/ 33
23
/ 33
24
/ 33
25
/ 33
26
/ 33
27
/ 33
28
/ 33
29
/ 33
30
/ 33
31
/ 33
32
/ 33
33
/ 33
More Related Content
PPTX
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
by
Shota Shinogi
PDF
ドメイン駆動設計のためのオブジェクト指向入門
by
増田 亨
PDF
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
PDF
Riverpodでテストを書こう
by
Shinnosuke Tokuda
PDF
Google Cloud で実践する SRE
by
Google Cloud Platform - Japan
KEY
やはりお前らのMVCは間違っている
by
Koichi Tanaka
PDF
シリコンバレーの「何が」凄いのか
by
Atsushi Nakada
PDF
分散トレーシング技術について(Open tracingやjaeger)
by
NTT Communications Technology Development
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
by
Shota Shinogi
ドメイン駆動設計のためのオブジェクト指向入門
by
増田 亨
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
Riverpodでテストを書こう
by
Shinnosuke Tokuda
Google Cloud で実践する SRE
by
Google Cloud Platform - Japan
やはりお前らのMVCは間違っている
by
Koichi Tanaka
シリコンバレーの「何が」凄いのか
by
Atsushi Nakada
分散トレーシング技術について(Open tracingやjaeger)
by
NTT Communications Technology Development
What's hot
PDF
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
by
Y Watanabe
PDF
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
by
Koichiro Matsuoka
PDF
正しいものを正しく作る塾-設計コース
by
増田 亨
PDF
マイクロサービス 4つの分割アプローチ
by
増田 亨
PDF
例外設計における大罪
by
Takuto Wada
PDF
ドメイン駆動設計 ( DDD ) をやってみよう
by
増田 亨
PDF
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
by
増田 亨
PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
by
Koichiro Matsuoka
PDF
ドメイン駆動で開発する ラフスケッチから実装まで
by
増田 亨
PPTX
分散システムについて語らせてくれ
by
Kumazaki Hiroki
PDF
3週連続DDDその1 ドメイン駆動設計の基本を理解する
by
増田 亨
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
by
Takuto Wada
PDF
それはYAGNIか? それとも思考停止か?
by
Yoshitaka Kawashima
PDF
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
by
Takahiro YAMADA
PDF
オブジェクト指向プログラミングのためのモデリング入門
by
増田 亨
PDF
ドメイン駆動設計 基本を理解する
by
増田 亨
PDF
マイクロにしすぎた結果がこれだよ!
by
mosa siru
PDF
Yahoo! JAPAN の アジャイル開発の普及戦略
by
Yahoo!デベロッパーネットワーク
PDF
ドメイン駆動設計に15年取り組んでわかったこと
by
増田 亨
PDF
Serverless時代のJavaについて
by
Amazon Web Services Japan
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
by
Y Watanabe
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
by
Koichiro Matsuoka
正しいものを正しく作る塾-設計コース
by
増田 亨
マイクロサービス 4つの分割アプローチ
by
増田 亨
例外設計における大罪
by
Takuto Wada
ドメイン駆動設計 ( DDD ) をやってみよう
by
増田 亨
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
by
増田 亨
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
by
Koichiro Matsuoka
ドメイン駆動で開発する ラフスケッチから実装まで
by
増田 亨
分散システムについて語らせてくれ
by
Kumazaki Hiroki
3週連続DDDその1 ドメイン駆動設計の基本を理解する
by
増田 亨
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
by
Takuto Wada
それはYAGNIか? それとも思考停止か?
by
Yoshitaka Kawashima
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
by
Takahiro YAMADA
オブジェクト指向プログラミングのためのモデリング入門
by
増田 亨
ドメイン駆動設計 基本を理解する
by
増田 亨
マイクロにしすぎた結果がこれだよ!
by
mosa siru
Yahoo! JAPAN の アジャイル開発の普及戦略
by
Yahoo!デベロッパーネットワーク
ドメイン駆動設計に15年取り組んでわかったこと
by
増田 亨
Serverless時代のJavaについて
by
Amazon Web Services Japan
More from bitbank, Inc. Tokyo, Japan
PDF
インフラチームの歴史とこれから
by
bitbank, Inc. Tokyo, Japan
PDF
ビットバンクのデプロイ戦略について
by
bitbank, Inc. Tokyo, Japan
PDF
ビットバンク流 アジャイル開発の紹介.pdf
by
bitbank, Inc. Tokyo, Japan
PDF
ビットバンクで求められるプロジェクトマネジメント
by
bitbank, Inc. Tokyo, Japan
PDF
ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境
by
bitbank, Inc. Tokyo, Japan
PDF
ビットバンクのマッチングエンジン.pdf
by
bitbank, Inc. Tokyo, Japan
PDF
Lightning Network, Swap, Nloop
by
bitbank, Inc. Tokyo, Japan
PDF
ビットバンクにおける少人数で支えるインフラチームの戦略
by
bitbank, Inc. Tokyo, Japan
PDF
bitbank Corporate Information
by
bitbank, Inc. Tokyo, Japan
PDF
ng build --prod & Continuous Delivery
by
bitbank, Inc. Tokyo, Japan
PDF
マーブル図で怖くないRxJS
by
bitbank, Inc. Tokyo, Japan
PDF
持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜
by
bitbank, Inc. Tokyo, Japan
PDF
仮想通貨取引所 bitbank の IaC の導入と実践
by
bitbank, Inc. Tokyo, Japan
PDF
Introduction of bitbank frontend development environment
by
bitbank, Inc. Tokyo, Japan
PDF
DeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるか
by
bitbank, Inc. Tokyo, Japan
PDF
ビットコインウォレットで手軽にパスワードレス認証が可能なbitidについての紹介
by
bitbank, Inc. Tokyo, Japan
PPTX
Ethereumのシャーディング概論
by
bitbank, Inc. Tokyo, Japan
PDF
Daocasinoにおけるstate channel実装
by
bitbank, Inc. Tokyo, Japan
PDF
TypeScriptでライトニングネットワークを使ってみよう
by
bitbank, Inc. Tokyo, Japan
PDF
Node.jsアプリの開発をモダン化するために取り組んできたこと
by
bitbank, Inc. Tokyo, Japan
インフラチームの歴史とこれから
by
bitbank, Inc. Tokyo, Japan
ビットバンクのデプロイ戦略について
by
bitbank, Inc. Tokyo, Japan
ビットバンク流 アジャイル開発の紹介.pdf
by
bitbank, Inc. Tokyo, Japan
ビットバンクで求められるプロジェクトマネジメント
by
bitbank, Inc. Tokyo, Japan
ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境
by
bitbank, Inc. Tokyo, Japan
ビットバンクのマッチングエンジン.pdf
by
bitbank, Inc. Tokyo, Japan
Lightning Network, Swap, Nloop
by
bitbank, Inc. Tokyo, Japan
ビットバンクにおける少人数で支えるインフラチームの戦略
by
bitbank, Inc. Tokyo, Japan
bitbank Corporate Information
by
bitbank, Inc. Tokyo, Japan
ng build --prod & Continuous Delivery
by
bitbank, Inc. Tokyo, Japan
マーブル図で怖くないRxJS
by
bitbank, Inc. Tokyo, Japan
持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜
by
bitbank, Inc. Tokyo, Japan
仮想通貨取引所 bitbank の IaC の導入と実践
by
bitbank, Inc. Tokyo, Japan
Introduction of bitbank frontend development environment
by
bitbank, Inc. Tokyo, Japan
DeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるか
by
bitbank, Inc. Tokyo, Japan
ビットコインウォレットで手軽にパスワードレス認証が可能なbitidについての紹介
by
bitbank, Inc. Tokyo, Japan
Ethereumのシャーディング概論
by
bitbank, Inc. Tokyo, Japan
Daocasinoにおけるstate channel実装
by
bitbank, Inc. Tokyo, Japan
TypeScriptでライトニングネットワークを使ってみよう
by
bitbank, Inc. Tokyo, Japan
Node.jsアプリの開発をモダン化するために取り組んできたこと
by
bitbank, Inc. Tokyo, Japan
中規模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