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
入社3ヶ月の振り返りを兼ねた Wantedlyのバックエンド設計の紹介
Search
Tomomi Nishino
December 18, 2024
0
180
入社3ヶ月の振り返りを兼ねた Wantedlyのバックエンド設計の紹介
入社から3ヶ月のオンボーディングの振り返りを兼ねて、gRPC + Protocol BufferとGraphQLでのAPI実装について説明します。
Tomomi Nishino
December 18, 2024
Tweet
Share
More Decks by Tomomi Nishino
See All by Tomomi Nishino
分岐地獄を脱出した話: 抽象メソッド化と動的なインスタンス生成
nishinot2024
0
190
Featured
See All Featured
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
180
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.2k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
From π to Pie charts
rasagy
0
100
SEO for Brand Visibility & Recognition
aleyda
0
4.1k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
210
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.1k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
370
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
690
Transcript
© 2024 Wantedly, Inc. 入社3ヶ月の振り返りを兼ねた Wantedlyのバックエンド設計の紹介 Dec. 18 2024 -
Tomomi Nishino @keppagurun Wantedly Tech Night 〜Wantedlyのバックエンド開発のリアル〜
© 2024 Wantedly, Inc. ⾃⼰紹介 西野 智美 Tomomi Nishino X:@keppagurun
Visit Client Growth所属 2024年9月にウォンテッドリー入社 オンボーディングが終了してチームの施策に 参加し始めたところ これまでのマイクロサービスの開発経験は JSON + REST APIの構成のみ
© 2024 Wantedly, Inc. Wantedlyのマイクロサービスアーキテクチャ • マイクロサービス間通信 ◦ gRPC +
Protocol Buffers • Frontend ↔ Backend間の通信 ◦ GraphQL この構成でのAPI実装を身につけるのが オンボーディングの内容
© 2024 Wantedly, Inc. 今日話すこと • gRPC + Protocol Buffers
◦ スキーマファースト開発の良さ • GraphQL ◦ gRPC(Protocol Buffers)との併用 対象者 • gRPC + Protocol Buffers + GraphQL の初学者
© 2024 Wantedly, Inc. gRPC + Protocol Buffers スキーマファースト開発の良さ
© 2024 Wantedly, Inc. gRPC + Protocol Buffers gRPCとは Google社が開発したRemote
Procedure Callのフレームワーク。 多くのプログラミング言語やプラットフォームをサポートしており、HTTP/2による効率化 された通信と、送受信メッセージにProtocol Buffersを選択することで低遅延かつ高いパ フォーマンスを出すことができる。 Protocol Buffersとは 構造化データをシリアライズするための仕組み。バイナリフォーマットのため軽量かつ高速 な処理ができる。 シリアライズ・デシリアライズするためには.protoファイルでのスキーマ定義が必要。
© 2024 Wantedly, Inc. gRPC + Protocol Buffers スキーマファーストとは データの構造や仕様を定義したスキーマを最初に作成し、そのスキーマに基づいて開発を進
める手法のこと。APIの作成においては、フロントエンドとバックエンドがスキーマを共有 すること効率的で一貫性のある開発が行えるのが特徴。 ➡ 詳しく知りたい初学者向け ウォンテッドリーAdvent Calender 2024の18日目「今さらスキーマファーストに入門する」もどうぞ
© 2024 Wantedly, Inc. gRPC + Protocol Buffers Protocol Buffersのスキーマ定義
• .protoファイル • 型とフィールド名の組み合わせ ◦ エンジニアであれば直感的にわかりやすい このことで生まれるメリットは? Protocol Buffersはスキーマ定義が必要になる
© 2024 Wantedly, Inc. gRPC + Protocol Buffers Wantedly Engineering
Handbook protobuf スキーマと gRPC 通信より https://docs.wantedly.dev/fields/the-system/apis スキーマファースト開発が強制されるのが protobuf + gRPC の強みのひとつです。スキー マファーストであることによって以下のような利点があります。 • サーバーとクライアントが実装を並行して進めることができる。 • データに関する暗黙の知識を言語化し、共有する機会になる。
© 2024 Wantedly, Inc. gRPC + Protocol Buffers 実際に経験してみて •
前提としてウォンテッドリーは職務混合型のチーム体制を取っている ◦ フロントエンドエンジニアとバックエンドエンジニアが同じチームにいる • バックエンドエンジニアが作成した.protoファイルをフロントエンドエンジニアもレ ビューする ◦ 早い段階で理想的な設計に近づけることができる ◦ 手戻りが少なくなる • .protoファイルはコードの一部だがドキュメントの代わりになる ◦ パラメータについて列挙した仕様書を作成して保守する必要がない ◦ まだ把握できてない既存機能を調べる時にかなり助けられた
© 2024 Wantedly, Inc. GraphQL gRPC(Protocol Buffers)との併用
© 2024 Wantedly, Inc. GraphQL GraphQLとは Facebook社(現Meta社)によって開発された、APIのためのクエリ言語。またはそのサー バー側ランタイムのこと。 データベースにおけるSQLのSELECT文のように、クライアント側からレスポンスに欲しい パラメータだけを指定することができるのが特徴であり、REST
APIとの大きな違いである。 マイクロサービスアーキテクチャではバックエンドのサービスが増えるにつれてWebアプリ からの接続先が増えていってしまうが、GraphQLサーバーをAPIゲートウェイとして利用す ることでWebアプリからの呼び出し先を1つに集約できるメリットもある
© 2024 Wantedly, Inc. GraphQLにAPIを作成するには GraphQL APIを作成するには、データをどのような型で受け取り、どのような型で返すのか をGraphQLのSDL(Schema Description Language)でスキーマを定義する必要がある。
次に、そのスキーマで定義されたAPIが実際にデータを操作するための処理(リゾルバ)を 実装する。 このスキーマは先ほどのProtocol Buffersのスキーマとは別のものになる。 GraphQL
© 2024 Wantedly, Inc. GraphQL GraphQLでもスキーマを定義する必要がある ため、ウォンテッドリーではProtocol Buffers との併用にあたっては.protoファイルの定義に 基づいて、GraphQLスキーマのリクエストと
レスポンスの型を定義している。 これはGraphQL Nexusなどを利用して、 GraphQL部分の実装負担が減るように整備さ れている。 このあたりは試行錯誤の歴史があり、 理解するまでにかなりの時間がかかった
© 2024 Wantedly, Inc. まとめ
© 2024 Wantedly, Inc. まとめ • gRPC + Protocol Buffers
◦ 機能的な利点もあるが、スキーマファーストの開発はフロントエンドエンジニアと バックエンドエンジニアが同チームにいる強みを活かせる ◦ スキーマを仕様書として位置付けることで、ドキュメント作成と更新の負担から解 放される • GraphQL ◦ 元々学習コストが高いとは聞いていたが、gRPCと併用している場合はさらにハー ドルが高くなると感じた ◦ REST APIのような気軽さはないがマイクロサービスを集約することができるのは実 装の面白みがある技術だと感じた JSON + REST APIしか経験してこなかったバックエンドエンジニアの感想