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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
ブロックテーマでサイトをリニューアルした話 / 2026-01-31 Kansai WordPress Meetup
torounit
0
470
20260208_第66回 コンピュータビジョン勉強会
keiichiito1978
0
180
顧客の言葉を、そのまま信じない勇気
yamatai1212
1
360
ClickHouseはどのように大規模データを活用したAIエージェントを全社展開しているのか
mikimatsumoto
0
260
GitHub Issue Templates + Coding Agentで簡単みんなでIaC/Easy IaC for Everyone with GitHub Issue Templates + Coding Agent
aeonpeople
1
250
Context Engineeringの取り組み
nutslove
0
370
こんなところでも(地味に)活躍するImage Modeさんを知ってるかい?- Image Mode for OpenShift -
tsukaman
1
160
SREのプラクティスを用いた3領域同時 マネジメントへの挑戦 〜SRE・情シス・セキュリティを統合した チーム運営術〜
coconala_engineer
2
670
AzureでのIaC - Bicep? Terraform? それ早く言ってよ会議
torumakabe
1
590
Greatest Disaster Hits in Web Performance
guaca
0
270
What happened to RubyGems and what can we learn?
mikemcquaid
0
310
AIエージェントに必要なのはデータではなく文脈だった/ai-agent-context-graph-mybest
jonnojun
0
140
Featured
See All Featured
Un-Boring Meetings
codingconduct
0
200
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
320
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
230
Claude Code のすすめ
schroneko
67
210k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
76
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
67
Measuring & Analyzing Core Web Vitals
bluesmoon
9
760
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
71k
Utilizing Notion as your number one productivity tool
mfonobong
3
220
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
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