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
TypeScriptのバックエンド開発について
Search
mimu
October 21, 2024
Programming
66
0
Share
TypeScriptのバックエンド開発について
mimu
October 21, 2024
More Decks by mimu
See All by mimu
マルチレポだってスキーマ駆動開発がしたい!
mmrakt
0
62
lt.pdf
mmrakt
0
33
npm/Yarn/pnpmゆるふわ解説
mmrakt
0
1.3k
Type Script型パズル(?)超入門
mmrakt
0
97
まだWebpackで消耗してるの?
mmrakt
0
98
Other Decks in Programming
See All in Programming
YJITとZJITにはイカなる違いがあるのか?
nakiym
0
220
Claude Code × Gemini × Ebitengine ゲーム制作素人WebエンジニアがGoでゲームを作った話
webzawa
0
140
アーキテクチャモダナイゼーションとは何か
nwiizo
19
5.3k
検索設計から 推論設計への重心移動と Recall-First Retrieval
po3rin
0
270
Offline should be the norm: building local-first apps with CRDTs & Kotlin Multiplatform
renaudmathieu
0
220
PHPで TLSのプロトコルを実装してみるをもう一度しゃべりたい
higaki_program
0
210
ソフトウェア設計の結合バランス #phperkaigi
kajitack
0
130
運転動画を検索可能にする〜Cosmos-Embed1とDatabricks Vector Searchで〜/cosmos-embed1-databricks-vector-search
studio_graph
0
270
Making the RBS Parser Faster
soutaro
0
410
The Less-Told Story of Socket Timeouts
coe401_
3
380
Agentic Elixir
whatyouhide
0
270
Spec Driven Development | AI Summit Vilnius
danielsogl
PRO
1
110
Featured
See All Featured
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
120
It's Worth the Effort
3n
188
29k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
170
New Earth Scene 8
popppiees
3
2.1k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.8k
Optimizing for Happiness
mojombo
378
71k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
250
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.2k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
260
Speed Design
sergeychernyshev
33
1.6k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
230
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
130
Transcript
TSのバックエンド開発に ついて
TOC - やってきたこと - 今後の課題 - まとめ
Challenges 1. AWS Lambda を用いた非同期処理実装 2. API 定義からTypeScriptの型生成&パッケージ共 有
Lambdaを用いた 非同期処理① - 「データの整合性をチェックしてExcel出力する機能」の処理が非常に重く、BE APIからのレスポンスでタイムアウトが発生 - FE ➡ BE APIの同期処理から、Lamdbaを用いた非同期処理に移行
- フロント->バックエンドAPIからLambdaをキックし(正確にはSNSを経由)、フ ロントに一旦レスポンスを返す - フロントから手動でポーリングし、LambdaによるExcel生成処理が終了して いればDL用のリンクを返す
Lambdaを用いた非同期処理② - 非同期化するも処理が想定以上に重く、今度は Lambdaがタイムアウト(Max15min) - ワークフロー構築サービスの AWS Step Functionsを用いてLambdaを処理単 位で分割&ボトルネック部分を並列実行させること
で何とかタイムアウトを解消
Lambdaを用いた非同期処理② - 非同期化するも処理が想定以上に重く、今度は Lambdaがタイムアウト(Max15min) - ワークフロー構築サービスの AWS Step Functionsを用いてLambdaを処理単 位で分割&ボトルネック部分を並列実行させること
で何とかタイムアウトを解消 ここまで辿り着くのに 2~3ヶ月費やすも、 ステークホルダーの信頼獲得&メンバーのレベル アップに繋がった(はず)
None
API定義からTSの型生成&パッケージ共有① - 機能開発の流れ - APIスキーマ定義->FEはそれを元にMSWのモックを利用して 開発 - 状況 - FEとBEどちらもTypeScriptを採用しているが、別repo(マルチ
レポジトリ)に別れており、型定義が共有できない問題 - 特にAPI周りのほぼ同じ型定義を自前で書いており、メンテコ ストが肥大化
API定義からTSの型生成&パッケージ共有① - APIのスキーマから型定義を自動で生成させる - Orvalを採用(他はopenapi-typescript、 swagger-typescript-apiなど色々存在) - 型定義をNpmパッケージ化し、GitHub Packagesでプライベート に公開することでFE・BE(その他repo)で利用可能に
- 残課題はあるものの、スキーマ駆動開発の土台は完成
Problems - BE Appのアーキテクチャ再考 - NoSQLのテーブル設計 - スキーマ駆動開発の推進 - CICD
強化 - Lambda は未だ温かみのある手動デプロイ - …etc
Problems - BE Appのアーキテクチャ再考 - NoSQLのテーブル設計 - スキーマ駆動開発の推進 - CICD
強化 - Lambda は未だ温かみのある手動デプロイ - …etc
BE Appのアーキテクチャ再考 - 現状はDDD(ドメイン駆動設計)を意識した(っぽい)アーキテクチャ で設計されているが、色々と柔い - ドメイン層からビジネスルールが漏れまくっていたり、ユースケースが入力 バリデーションからAPIレスポンス整形まで全部担ってしまったり。。。 - アーキテクチャに関する意思決定の証跡が残っていない問題。。
➡ADR活用中!
BE Appのアーキテクチャ再考 NBX主導のFEの大規模リファクタリングの成功に倣って、BEの リファクタも成功させたい! BEの設計について知見のあるエンジニアが少なく。。我こそはと いう方がもしいれば🙏🙏🙏
NoSQL(DynamoDB)のテーブル設計 - DBにDynamoDBを使用しているが、RDBとは思想や設計手法が 大きく異なる - テーブル数は極力少なく、正規化もしない(重複可) - RDBほどSQLの柔軟性がなく、セカンダリインデックスの活用等テクニック が求められる -
ちなみに採用した経緯も正確には不明。。
NoSQL(DynamoDB)のテーブル設計 - 現状はユーザー(とデータ量)も少ないため割とカジュアルに本番 データを入れ替えたり設計変更しているが、今後は事前の入念な 設計が必要になる - 本来スキーマレスではあるものの、テーブル設計の都合にア プリ側が引っ張られて非効率なコードが生まれている状況
Summary - 色々とチャレンジを成功させているものの、問題は山積み。。 - FE領域では既に信頼を獲得しているので、BEやインフラ周 りまで染み出せるとより評価は上がる! - 我々はFEが強みだが、BEもできるぜ!な人がより増えると CLの信頼はきっと上がるはず!