Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
NestJSを実運用してみて.pdf
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
gizm000
September 20, 2024
Programming
300
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
NestJSを実運用してみて.pdf
gizm000
September 20, 2024
Transcript
35 slides
NestJSを実運用してみて 営業製作所 白石 卓馬
会社紹介:営業製作所 ・設立 2020年4月 ・本社 大阪 (肥後橋駅 徒歩3分) ・従業員数 約150名 (2024年4月時点)
・目的 日本の製造業を支える ・特徴 泥臭い中にこそ本質がある
自己紹介 ・なまえ 白石 卓馬 (gizm000) ・出身地 大阪 ・職種 ソフトウェアエンジニア ・経歴
SIer → 受託 → SaaS
営業製作所のざっくり技術スタック ・フロントエンド:Next.js ・サーバーサイド:NestJS ・IaC:Terraform (CDKじゃないヨ) 業務で使う 80 98%以上がTypeScript
営業製作所のざっくり技術スタック ・フロントエンド:Next.js ・サーバーサイド:NestJS ・IaC:Terraform (CDKじゃないヨ) 業務で使う 80 98%以上がTypeScript
NestJSを採用している
なぜNestJSを採用したか? ・TypeScriptがサポートされている ・GraphQLがサポートされている ・PrismaORMのモジュールが提供されている ・Node.js界隈ではわりと枯れている (2017年リリース, Star 66.9K) ・Mediumとかで調べても結構情報がある ・最近は日本語の情報も増えてきている
なぜNestJSを採用したか? ・(個人的には)わりと理解しやすい ・DIはそこまで必要かはわからないが、楽ではある ・明示的に new する必要がない ・サーバーに対するe2eテスト用のAPIも用意されている ・ボイラープレートが多いので記述のブレを少なくできそう
実際に導入してみた感触 としても悪くないが...
None
ポジティブな意見が わりとある!
最近、風当たりが 強くない? 🤔
None
ネガティブな意見が 増えてきた・・・?
デコレータ およびDIがなぁ...
デコレータ およびDIがなぁ...
クラスにつけたり・・・ デコレータ
プロパティにつけたり・・・ デコレータ
@Fieldをつけると、 schema.gqlに GraphQLスキーマとして出力される デコレータ
TypeScriptでstring型のため、 GraphQLでStringとして定義されている デコレータ
NestJSのデコレータはなぜダメ? ・reflect-metadataを使って得られたメタデータを利用している ・TypeScriptの emitDecoratorMetadata オプションを true にする必要 ・型定義の情報を利用するため、開発時に型チェックをスキップできない ・ビルドが遅い... 😢
・TypeScript 5.0からはレガシー機能となった ・仕様の異なるデコレータが正式版として採択されてしまった ・experimentalDecorators フラグを有効にすれば利用可能
デコレータ およびDIがなぁ...
依存性注入は いつ必要?
なぜ依存性を注入するのか ・外環境に依存していて簡単にモックできるようにしたい ・決済API, AWS SDKとか ・依存するモジュールが多い ・依存関係を記述するのが面倒臭い ・同一のインタフェースを持っていれば付け替えられるようにしたい ・GoF デザインパターンの
Template methodパターンのイメージ
依存性注入に反対勢の意見 ・同一のIFを持った別オブジェクトに付け替えることそんなにある? ・環境変数に依存するケースぐらいではないか ・異なるロガーを付け替えられるようにとか、本当にある? ・エラーがわかりにくい、依存関係がわかりにくい ・Nest can't resolve dependencies…. ・依存関係を表示するツールが
ま さ か の 有 料
果たして、本当にDIは必要か? TypeScriptであれば、依存関係は 型定義によって担保されるので、 十分なのでは...?
Now coding...
・依存関係は明確にしよう! ・関数単位で依存している方が楽だぞ!
・依存関係は明確にしよう! ・関数単位で依存している方が楽だぞ! NestJSはどこまで依存しているかわからな くて大変になる... 子モジュールが依存している孫モジュール のimportがされていないくてエラーになると か、めんどくさい!!!
ところで...
experimentalDecoratorに 依存していなくて コードファーストに書ける GraphQLライブラリ...
experimentalDecoratorに 依存していなくて コードファーストに書ける GraphQLライブラリ... 実はまだない ?
1. Pothos (旧GraphQL Nexus) 2. GraphQL Modules 3. type-graphql-next どれも使ったことない...
Claude調べ
ご清聴ありがとうご ざいました
さいごに ・絶賛採用活動中です❗ → X, LinkedIn, Green, LAPRAS, … 情報交換程度でも良いので、 よかったらご連絡を😆
More Decks by gizm000
See All by gizm000
XStateでReactに秩序を与えたい
gizm000
0
1.4k
営業製作所_採用ピッチ資料_202407
gizm000
3
6.1k
React_TypeScript_LT.pdf
gizm000
0
230
もう、例外投げたくないねん neverthrow
gizm000
1
540
サーバーサイドもTSにしたらモノレポになった.pdf
gizm000
2
210
レガシー業界を乗り越える
gizm000
1
80
Other Decks in Programming
See All in Programming
Spec-Driven Development - Why Vaadin Is the Perfect Fit
simas
PRO
0
250
AIが生成したコードは読むべきか?抽象化設計とコードの品質保証 / abstraction-design-and-quality
minodriven
16
9.1k
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
310
Distance field of Julia set
kinakomoti321
0
320
まずはコードより業務と向き合う:テーブル解体のためにPdMを呼んだ話
sakawe_ee
0
230
ビジネスロジックを堅牢に~Scala 3のドメインプリミティブ~
j5ik2o
0
160
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
4
4.4k
どうしても Eloquent でリポジトリパターンをやりたいんだ #phpcon_niigata / phpcon-niigata-2026
shogogg
0
180
Crash Auto Pipelines
veronikapj
1
410
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
370
TS 7.0 で baseUrl が使えなくなった今、パスエイリアスをどうするか
bicstone
2
650
Getting Started with Vibe Coding
miccheng
0
220
Featured
See All Featured
Everyday Curiosity
cassininazir
0
400
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
The SEO Collaboration Effect
kristinabergwall1
1
620
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
Raft: Consensus for Rubyists
vanstee
143
7.9k
The Language of Interfaces
destraynor
162
27k
The Curious Case for Waylosing
cassininazir
1
610
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Practical Orchestrator
shlominoach
192
12k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.7k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Automating Front-end Workflow
addyosmani
1370
210k