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
TypeSciprt + Express + Prisma + Node.js API開発
Search
N Akita
March 18, 2023
Technology
0
17
TypeSciprt + Express + Prisma + Node.js API開発
TypeSciprt + Express + Prisma + Node.js API開発
N Akita
March 18, 2023
Tweet
Share
More Decks by N Akita
See All by N Akita
npmライブラリを自作して、感じたこと
nakita628
0
60
スキーマ駆動で、Zod OpenAPI Honoによる、API開発するために、Hono Takibiというライブラリを作っている
nakita628
0
600
Other Decks in Technology
See All in Technology
顧客との商談議事録をみんなで読んで顧客解像度を上げよう
shibayu36
0
270
SRE Enabling戦記 - 急成長する組織にSREを浸透させる戦いの歴史
markie1009
0
140
Greatest Disaster Hits in Web Performance
guaca
0
280
予期せぬコストの急増を障害のように扱う――「コスト版ポストモーテム」の導入とその後の改善
muziyoshiz
1
2k
会社紹介資料 / Sansan Company Profile
sansan33
PRO
15
400k
Agent Skils
dip_tech
PRO
0
120
ランサムウェア対策としてのpnpm導入のススメ
ishikawa_satoru
0
200
今日から始めるAmazon Bedrock AgentCore
har1101
4
420
OpenShiftでllm-dを動かそう!
jpishikawa
0
130
インフラエンジニア必見!Kubernetesを用いたクラウドネイティブ設計ポイント大全
daitak
1
380
生成AIを活用した音声文字起こしシステムの2つの構築パターンについて
miu_crescent
PRO
3
210
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
3k
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Embracing the Ebb and Flow
colly
88
5k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
250
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
300
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
260
Git: the NoSQL Database
bkeepers
PRO
432
66k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
170
Producing Creativity
orderedlist
PRO
348
40k
Claude Code のすすめ
schroneko
67
210k
How GitHub (no longer) Works
holman
316
140k
Leo the Paperboy
mayatellez
4
1.4k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
62
50k
Transcript
TypeSciprt + Express + Prisma + Node.js API開発 Y.pm N
Akita
発表者:N Akita • 法学部法律学科卒業。 • 2022年8月に合同会社Y.pm入社。 • 最初に学んだプログラミング言語は、Java。 • 現在、Docker、Linuxを重点的に学習中。
• システム設計できるエンジニアを目指しています。 • 正規表現やテキスト処理に強い、Perlの知識も身につけたい。
アジェンダ • Perlについて、思うこと • TypeScriptとは • PrismaとSQL • Expressとは •
TypeSciprt + ExpressJS + Prisma + Node.js API開発 • まとめ
Perlについて思うこと • 正規表現やテキスト処理に強い Perlですが、プログ ラミング初学者が、ソースコードを見た時、記号だら けで、頭が混乱すると思いました。 • PythonやJavaScriptなどのような、シンプルな構文 は、多くの人が見てもわかりやすい点から、 Perlの
人気は、落ちているのかなと考えられます。 • オブジェクト指向、型の概念など、プログラミング言 語の文法知識を深く理解している人に向いている言 語であると、感じました。 • どのプログラミング言語を使おうが、最終的には、生 産的な処理を行える、アルコリズムを考えることが重 要だと思います。 2017年の最も嫌いなプログラミング言語ランキング
TypeScriptとは
JavaScriptに静的型付けやクラス、 インタフェースなどの機能を追加した言語 JavaScriptの例 TypeScriptとJavaScriptの比較 TypeScriptの例 静的型付けにより、意図しない値を代入することを防ぐことができる。 実行結果は、3を期待しているが、12と表 示されてしまう。 TypeScript
PrismaとSQL
Prisma Node.jsやTypeScriptなどのプログラミング言語で使用できる、オープンソースのORM データベースのクエリを直接書く代わりに、高レベルなAPIを使ってデータベースにアクセス可能 ※ORMとは、データの操作をオブジェクト指向言語のやり方で扱える手法 Prisma Prismaにより、作成されたSQL PrismaによるUserテーブル作成の例 Prismaにより、SQLを使用せずにTABLE作成することが可能になる。
PrismaによるQuery実行 INSERT INTO User (name, email, age) VALUES ('yamada', '
[email protected]
',
20); prisma.user.create({ data: { name: 'yamada', email: '
[email protected]
', age: 20, }, }); Prismaによるレコード挿入 SQLによるレコード挿入 SQLを意識せずに、データ操作が可能! 普段SQLやデータベースに触れる機会が少ない、フロントエンドエンジニアや SQLやデータベースの知識がない人でも、何をしているのか理解しやすい。
Prisma以外のORM TypeORM MySQL、PostgreSQL、MariaDB、SQLite、MS SQL Server、Oracle、MongoDB、CockroachDBなど、多くの異なる種類のデータ ベースをサポート Prisma Prismaは、TypeORMほどサポートしていない。 Prismaは、TypeORMほど、選択肢が少ないが、 少ない選択肢は、学習コストが低く、メンテナンスが容易になる。
Expressとは
Express Node.js用の軽量かつ柔軟なWebアプリケーションフレームワーク HTTPリクエストとレスポンスを処理し、ルーティング、ミドルウェア、テンプレートエンジン、 データベース接続などの機能を提供している Expressの使用例 Expressを使うことで、シンプルに、 API開発が可能になる!
TypeScript + Express + Prisma + Node.js API開発
TypeScript + Express + Prisma + Node.js API開発の業務 • TypeScript
+ Express + Prisma + Node.jsの組み合わせにより、シンプルなコー ディングが可能になり、高速に開発に取り組めました。 • レイヤードアーキテクチャを参考にした構成を使い、複数の層に分けて、API開発を 行いました。 • 各層を独立して開発できるため、変更点を見つけるのに苦労せず、何の処理をして いるのか、明確に理解しながら開発できました。
レイヤードアーキテクチャ を参考にした構成 ソフトウェアを複数の層に分割し、それぞれの層を独立して設計・実装する ことで、可読性、保守性、拡張性を向上させることができる。 app アプリケーション層。 ハンドラー層に処理を受け渡す受け渡す役目。 handler ハンドラー層 パスルーティングを行い、サービス層に処理を引き渡す役目。
service サービス層。 副作用のある関数を含む処理を担当。インフラ層やドメイン層に処理を引き渡す。 ※副作用とは、関数の呼び出しによって関数自体の出力以外の変更が行われることを指します。 infra インフラ層。 外部システム(データベースや外部のAPIなど)とのやりとりを担当。どこにも依存しない。 domain ドメイン層。 副作用のない関数と定数だけで構成される。どこにも依存しない。
これから必要であると感じたこと • 初めての業務でしたが、シンプルな実装のできる組み合わせのため、ストレスなく 開発を進めることができました。 • JavaScriptとの互換性が高く、JavaScriptの知識がある程度あれば、TypeScriptを 扱うことが可能だと感じました。 • プログラミング言語のコーディング技術も重要だが、何よりも設計者の意図を理解 して、開発を行うことが必要だと感じました。
• より少ないコードで、アルゴリズムを組むことが重要であると感じました。
まとめ • TypeScript+Express+Prisma+Node.jsを使用することにより、シンプルに開発を行うことがで き、生産性を上げることができる。 • プログラミング言語の文法も重要ですが、 ChatGPTやGitHub Copilotなどの登場により、コー ディング技術よりも、設計や効率的な処理可能なアルゴリズムを作成できるエンジニアの需要 が伸びるのではないか。
• 共同開発である以上、難しいことをより簡単にし、開発速度を上げるためにどうしたら良いかを 考えるべき。