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
OpenAPI を用いた GoのAPIサーバー の開発自動化
Search
ysakura_
December 06, 2021
Technology
0
81
OpenAPI を用いた GoのAPIサーバー の開発自動化
マネーフォワードのPublic API開発において、OpenAPIを用いてGoのAPIサーバー構築を効率化しました。
利用シーン/技術選定/使ってみての長所短所を記載しています。
ysakura_
December 06, 2021
Tweet
Share
More Decks by ysakura_
See All by ysakura_
Goでの設定情報管理に苦労した話
ysakura_
0
410
マネーフォワードにおけるGoとマイクロサービスの活用事例
ysakura_
0
580
Other Decks in Technology
See All in Technology
AI時代の「本当の」ハイブリッドクラウド — エージェントが実現した、あの頃の夢
ebibibi
0
120
2026年もソフトウェアサプライチェーンのリスクに立ち向かうために / Product Security Square #3
flatt_security
0
240
NewSQL_ ストレージ分離と分散合意を用いたスケーラブルアーキテクチャ
hacomono
PRO
4
350
2026-03-11 JAWS-UG 茨城 #12 改めてALBを便利に使う
masasuzu
2
380
Claude Code 2026年 最新アップデート
oikon48
13
10k
us-east-1 に障害が起きた時に、 ap-northeast-1 にどんな影響があるか 説明できるようになろう!
miu_crescent
PRO
13
4.3k
20260311 ビジネスSWG活動報告(デジタルアイデンティティ人材育成推進WG Ph2 活動報告会)
oidfj
0
330
AWS DevOps Agent vs SRE俺 / AWS DevOps Agent vs me, the SRE
sms_tech
3
830
わからなくて良いなら、わからなきゃだめなの?
kotaoue
1
360
Oracle Cloud Infrastructure IaaS 新機能アップデート 2025/12 - 2026/2
oracle4engineer
PRO
0
140
JAWS Days 2026 楽しく学ぼう! 認証認可 入門/20260307-jaws-days-novice-lane-auth
opelab
11
2.3k
楽しく学ぼう!コミュニティ入門 AWSと人が つむいできたストーリー
hiroramos4
PRO
1
200
Featured
See All Featured
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
990
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
390
Into the Great Unknown - MozCon
thekraken
40
2.3k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
63
51k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
140
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
1
1.3k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
550
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
110k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
640
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.5k
Transcript
OpenAPIを用いて、GoのAPIサーバー構築を効率化した話
自己紹介
• 櫻 勇人(さくら ゆうと) ◦ Twitter: ysakura_ ◦ Go歴は3年ほど •
株式会社マネーフォワード @ 京都開発拠点 ◦ サーバーサイドエンジニア ▪ toB領域を主に担当 ◦ これまで ▪ Go製のマイクロサービスの開発運用 ◦ 最近 ▪ Public APIの開発推進 ▪ OAuth 2.0の認可基盤の開発 自己紹介
• MFでのAPI開発 • OpenAPIを採用した理由 • 利用したライブラリの紹介 • MFでの利用シーン • ライブラリの良かった点
/ 辛かった点 • 結論 今日話す事
• Public APIを絶賛開発中 ◦ 外部のサービスとの連携性向上が目的 ◦ Goのマイクロサービスがある所は GoでAPIを実装 • APIの基盤も構築中
◦ OAuth 2.0の認可基盤など ◦ こちらは別の機会に MFでのAPI開発
• OpenAPI ◦ 特定の開発言語に依存しない標準的な RESTful APIのインターフェース定義 ◦ 例 • スキーマ駆動開発をしたい
◦ 最初にスキーマ(API定義)を作り、それを元に開発を進めること ▪ 社外の人にAPIを使って貰うので、スキーマからスタートしたい ◦ API定義とサーバー実装がズレない様にしたい ▪ 外部に提供しているインターフェイスとずれると困る ▪ スキーマからGoのコードが自動生成される様にしたい • 利用事例が多いものを採用したい OpenAPIを採用した理由
https://github.com/deepmap/oapi-codegen • 使い方 利用したライブラリの紹介 go get github.com/deepmap/oapi-codegen/cmd/oapi-codegen oapi-codegen petstore-expanded.yaml >
petstore.gen.go
https://github.com/deepmap/oapi-codegen • 自動生成されるコードの例 ◦ OpenAPI ▪ petstore-expanded.yaml ◦ 型 ▪
petstore-types.gen.go ◦ handlerのベース実装 ▪ petstore-server.gen.go ◦ クライアント ▪ petstore-client.gen.go 利用したライブラリの紹介
MFでの利用シーン • APIサーバー ◦ handlerの自動生成 ◦ 型の自動生成 • テスト ◦
E2Eテストで自動生成されたクライアントを利用
• 型の自動生成 ◦ OpenAPIの型(Schema)が、Goの型として自動生成される ▪ petstore-types.gen.go ▪ OpenAPIとサーバー実装のズレが無くなった • handlerのベース実装の自動生成
◦ ルーターへのhandler登録 (生成例) ◦ パラメーターのパース (生成例) ◦ OpenAPIに基づいたhandlerのInterface(生成例) ▪ このInterfaceを守らないとBuildが失敗する • OpenAPIとサーバー実装のズレが無くなった oapi-codegenで良かった点
• クライアントの自動生成 ◦ E2Eテストで用いた ◦ 実装が減り、テスト作成がかなり楽になった ▪ HTTPリクエストの作成など ◦ 実装例
▪ 初期化 ▪ リクエスト oapi-codegenで良かった点
• Validatorが採用出来ず、自前でバリデーションを実装した ◦ OpenAPIを元にしたValidatorが提供されている(実装) ◦ APIサーバーから返るエラーは、自社のエラーフォーマットに沿う様にしたかった ▪ エラー時の文言/JSONを変更できないので、 oapi-codegenのValidatorは利用せず ◦
今思えば、oapi-codegenのエラーを受け取り、エラーハンドリングすべきだったかも ▪ 後続のmiddlewareで処理する様な形 • APIレスポンスのfieldの並び順が、OpenAPIの並び順と同じにならない ◦ curl等でデバッグする人向けに、重要な情報を上部に表示したかった ◦ OpenAPIの並びをソートして、 Goの構造体が作成される仕様 oapi-codegenで辛かった点
• リクエストとレスポンスで同じ型として扱いたいものが、別の型となってしまう ◦ ページネーションなど ▪ Cursor • Parameters ▪ NextCursor
• Schema ◦ これはもしかすると、 OpenAPIの使い方が悪いのかもしれない oapi-codegenで辛かった点
• スキーマ駆動開発は楽 ◦ OpenAPIを正とした開発の安心感は強い • deepmap/oapi-codegen オススメ ◦ handlerのロジック実装に集中する事が出来た 結論
We are hiring! Goを使って、ユーザーの課題を解決したいエンジニアを募集中です! カジュアル面談から是非