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
33
Goaで始めるマイクロサービス
Goaと言うGo言語のフレームワークを使用し、マイクロサービスを構築する最初のステップを解説してます。
Naoto Kido
June 08, 2025
Tweet
Share
More Decks by Naoto Kido
See All by Naoto Kido
ObjectTとは
naoido
0
6
学生団体メンバー向け自己紹介
naoido
0
16
CloudflareでSPA開発
naoido
1
20
Other Decks in Technology
See All in Technology
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
6
68k
AIエージェントを開発しよう!-AgentCore活用の勘所-
yukiogawa
0
170
AzureでのIaC - Bicep? Terraform? それ早く言ってよ会議
torumakabe
1
590
ClickHouseはどのように大規模データを活用したAIエージェントを全社展開しているのか
mikimatsumoto
0
260
SREじゃなかった僕らがenablingを通じて「SRE実践者」になるまでのリアル / SRE Kaigi 2026
aeonpeople
6
2.5k
クレジットカード決済基盤を支えるSRE - 厳格な監査とSRE運用の両立 (SRE Kaigi 2026)
capytan
6
2.8k
10Xにおける品質保証活動の全体像と改善 #no_more_wait_for_test
nihonbuson
PRO
2
320
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
10k
Agent Skils
dip_tech
PRO
0
120
OCI Database Management サービス詳細
oracle4engineer
PRO
1
7.4k
ブロックテーマでサイトをリニューアルした話 / 2026-01-31 Kansai WordPress Meetup
torounit
0
470
Tebiki Engineering Team Deck
tebiki
0
24k
Featured
See All Featured
Joys of Absence: A Defence of Solitary Play
codingconduct
1
290
The Curse of the Amulet
leimatthew05
1
8.7k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
120
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
120
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
1
100
How Software Deployment tools have changed in the past 20 years
geshan
0
32k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3k
Marketing to machines
jonoalderson
1
4.6k
Chasing Engaging Ingredients in Design
codingconduct
0
110
SEO for Brand Visibility & Recognition
aleyda
0
4.2k
Code Reviewing Like a Champion
maltzj
527
40k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
350
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