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
68
0
Share
TypeScriptのバックエンド開発について
mimu
October 21, 2024
More Decks by mimu
See All by mimu
マルチレポだってスキーマ駆動開発がしたい!
mmrakt
0
68
lt.pdf
mmrakt
0
39
npm/Yarn/pnpmゆるふわ解説
mmrakt
0
1.4k
Type Script型パズル(?)超入門
mmrakt
0
100
まだWebpackで消耗してるの?
mmrakt
0
99
Other Decks in Programming
See All in Programming
プロパティの順序で型推論が壊れる!? TypeScript6.0の修正からContext-Sensitivityの仕組みを追う
bicstone
2
1.3k
Swiftのレキシカルスコープ管理
kntkymt
0
210
CLIであることを活かしたGitHub Copilot CLI活用術 / GitHub Copilot CLI Pro Tips & Tricks
nao_mk2
1
1.2k
CSC307 Lecture 17
javiergs
PRO
0
310
AI駆動開発勉強会 広島支部 第一回勉強会 AI駆動開発概要とワークショップ
hayatoshimiu
0
430
TSKaigi2026-静的解析への投資がAI時代のコード品質を支える ── カスタムESLintルールの設計と運用
hayatokudou
7
1.3k
Copilot CLI の継戦能力を高める コンテキスト管理
nozomutu
1
1.2k
Moments When Things Go Wrong
aurimas
3
140
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
2.8k
Signal Forms: Beyond the Basics @ngBaguette 2026 in Paris
manfredsteyer
PRO
0
200
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
3
230
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
2
1.1k
Featured
See All Featured
Designing for Timeless Needs
cassininazir
1
240
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
270
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
560
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
22k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
200
74k
How to build a perfect <img>
jonoalderson
1
5.5k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
The SEO Collaboration Effect
kristinabergwall1
1
470
Being A Developer After 40
akosma
91
590k
Odyssey Design
rkendrick25
PRO
2
660
So, you think you're a good person
axbom
PRO
2
2k
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の信頼はきっと上がるはず!