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
Goaで始めるマイクロサービス
Search
Naoto Kido
June 08, 2025
Technology
0
28
Goaで始めるマイクロサービス
Goaと言うGo言語のフレームワークを使用し、マイクロサービスを構築する最初のステップを解説してます。
Naoto Kido
June 08, 2025
Tweet
Share
More Decks by Naoto Kido
See All by Naoto Kido
ObjectTとは
naoido
0
3
学生団体メンバー向け自己紹介
naoido
0
3
CloudflareでSPA開発
naoido
1
12
Other Decks in Technology
See All in Technology
Amazon ECS & AWS Fargate 運用アーキテクチャ2025 / Amazon ECS and AWS Fargate Ops Architecture 2025
iselegant
17
5.8k
Lambda Web Adapterについて自分なりに理解してみた
smt7174
5
130
rubygem開発で鍛える設計力
joker1007
2
220
使いたいMCPサーバーはWeb APIをラップして自分で作る #QiitaBash
bengo4com
0
970
AWS Summit Japan 2025 Community Stage - App workflow automation by AWS Step Functions
matsuihidetoshi
1
300
Amazon S3標準/ S3 Tables/S3 Express One Zoneを使ったログ分析
shigeruoda
4
570
プロダクトエンジニアリング組織への歩み、その現在地 / Our journey to becoming a product engineering organization
hiro_torii
0
130
Witchcraft for Memory
pocke
1
580
MySQL5.6から8.4へ 戦いの記録
kyoshidaxx
1
270
Oracle Audit Vault and Database Firewall 20 概要
oracle4engineer
PRO
3
1.7k
Node-RED × MCP 勉強会 vol.1
1ftseabass
PRO
0
160
Tech-Verse 2025 Global CTO Session
lycorptech_jp
PRO
0
770
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
BBQ
matthewcrist
89
9.7k
How STYLIGHT went responsive
nonsquared
100
5.6k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Building a Modern Day E-commerce SEO Strategy
aleyda
42
7.4k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.3k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
930
Adopting Sorbet at Scale
ufuk
77
9.4k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.8k
Transcript
Goaで始めるマイクロサービス Naoto Kido(なおいど) 1
1. はじめに 自己紹介 名前: Naoto Kido(naoido) 所属: 福岡デザイン&テクノロジー専門学校 3年 好きな言語:
Java, Go 2
2. マイクロサービスとは 3
概要 マイクロサービスとは、モノリス(1つのサーバーに全ての機能が含まれている)とは違い、 1つのアプリケーションを小さな独立したサービスに分割して開発する手法です。 1つのアプリケーションを複数の独立したコンポーネントに分割することで、 従来の開発手法よりビルド、テスト、デプロイ、アップデートを簡単に実行できることになります。 4
マイクロサービスとの出会い ドメイン駆動開発を調査している時にマイクロサービスの存在を知り、 ハッカソンで複数の言語を使用したバックを作成する際に使用したことでマイクロサービスの沼にハマっていきました。 ハッカソン参加したての頃はモノリスでの開発で1つのバックエンドを複数人で同時に作業していました。 しかし、コンフリクトが発生したり、仕様が勝手に書き換えられたりするという問題がありました。 担当箇所をサーバーごと切り分けることでタスクの管理を楽にし、 担当箇所はお気に入りの言語で開発するなどの恩恵をもたらしてくれました。 5
作成したマイクロサービス達 6
刹那 https://topaz.dev/projects/575f49eb3bc26cf370b1 7
QRコード神経衰弱 url: https://topaz.dev/projects/a939290be6545eff5895 8
マイクロサービスのメリット モノリシックな開発でよくあった「デスマーチ」陥る心配が少なくなる。 各ドメインごとにアジャイル開発で同時に作業を進めることができるため、迅速な開発が可能になる。 9
どうやって実装するのか → Goa 10
3. Goaとは 11
公式サイト情報 従来の開発では、実装が設計を主導し、一貫性の欠如や技術的負債につながることがありました。Goaはこのパラダイム を反転させます。設計が唯一の真実の源となり、以下を自動的に生成します。 本番環境対応のサーバーコード 型安全なクライアントライブラリ 包括的なAPIドキュメント トランスポート層の実装(HTTP/gRPC) 入力バリデーションとエラー処理 12
Goaの開発ステップ 1. designを書く 2. designからトランスポート層などの生成 3. ベースのファイル群を生成 4. ビジネスロジックの実装 5.
サーバーを起動 13
1. Designを書く // サービスを定義 var _ = Service("greet", func() {
// サービスの説明 Description("Greet service") // gRPCの有効化・サービス共通のgRPC設定 GRPC(func() { Package("greet.v1") }) // メソッド(エンドポイント)の定義 Method("Greet", func() { Description("Greet method") // 戻り値をStringで定義する Result(String) GRPC(func() { Response(CodeOK) }) }) }) 14
2. designからトランスポート層などの生成 goa gen goa-example/microservices/greet/design 実装に必要なトランスポート層を生成してくれます。 genされたファイルは編集しません。 design.goを変更するたび goa gen
しなおす必要があります。 greet ├── design/ # 生成元のdesginを定義する場所 ├── gen # 生成されたファイル群 │ ├── greet # サービスとクライアントに必要なファイル群 │ │ ├── client.go │ │ ├── endpoints.go │ │ └── service.go │ └── grpc # gRPC関連のファイル群 │ ├── cli │ │ └── greet │ │ └── cli.go │ └── greet │ ├── client/ # このサービスを使うためのクライアントファイル群 │ ├── pb/ # protoやそこから生成されるファイル群 │ │ ├── goagen_greet_greet.pb.go │ │ ├── goagen_greet_greet.proto │ │ └── goagen_greet_greet_grpc.pb.go │ └── server/ ├── go.mod └── go.sum 15
3. ベースのファイル群を生成 goa example goa-example/microservices/greet/design designを元にビジネスロジックを記述するためのベースファイルを生成してくれます。 greet ├── cmd │
├── greet # サーバーを起動するためのファイル群 │ │ ├── grpc.go │ │ └── main.go │ └── greet-cli # クライアント用のファイル群 │ ├── grpc.go │ └── main.go ├── design │ └── design.go ├── gen/ # goa genで生成されたディレクトリ ├── go.mod ├── go.sum └── greet.go # メソッドを実装するファイル 16
4. ビジネスロジックの実装 生成されたファイル(greet.go) // greet service example implementation. // The
example methods log the requests and return zero values. type greetsrvc struct{} // NewGreet returns the greet service implementation. func NewGreet() greet.Service { return &greetsrvc{} } // Greet method func (s *greetsrvc) Greet(ctx context.Context) (res string, err error) { log.Printf(ctx, "greet.Greet") return } 17
5. サーバーを起動 #ビルド $ go build ./cmd/greet #起動 $ ./greet
18
4. モノレポでのディレクトリ構成 19
モノレポでのディレクトリ構成 今回作ったサンプル: https://github.com/naoido/goa-monorepo-example . ├── build # ビルド関連資材 │ └──
Dockerfile ├── go.work # go workspace ├── microservices # マイクロサービスを格納する │ ├── auth │ │ ├── design │ │ │ └── design.go │ │ ├── go.mod │ │ └── go.sum │ ├── chat │ │ ├── chat.go │ │ ├── design │ │ │ └── design.go │ │ ├── go.mod │ │ └── go.sum │ └── greet │ ├── design │ │ └── design.go │ ├── go.mod │ ├── go.sum │ └── greet.go └── pkg # 共通のパッケージを定義 └── security ├── context.go ├── go.mod ├── go.sum └── security.go 20
つまずいた点 goa genでpkg配下で定義したものを使用するため、 go.modでreplaceして相対的に読み込むようにする replace goa-example/pkg/security => ../../pkg/security 21
5. まとめ マイクロサービスを活用することで、ドメイン単位に開発メンバーをアサインし開発をすることができるため、従来より も早く変更に強い開発ができるようになる。 Goaを使用するとDesign-Firstの力で一貫性のあるバックエンド開発を行うことができます。 gRPCを用いたマイクロサービスを作成する場合はより力を発揮するので是非使ってみてください! よきマイクロサービスライフを! 22