Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Goaで始めるマイクロサービス
Search
Naoto Kido
June 08, 2025
Technology
0
31
Goaで始めるマイクロサービス
Goaと言うGo言語のフレームワークを使用し、マイクロサービスを構築する最初のステップを解説してます。
Naoto Kido
June 08, 2025
Tweet
Share
More Decks by Naoto Kido
See All by Naoto Kido
ObjectTとは
naoido
0
4
学生団体メンバー向け自己紹介
naoido
0
7
CloudflareでSPA開発
naoido
1
18
Other Decks in Technology
See All in Technology
MySQLとPostgreSQLのコレーション / Collation of MySQL and PostgreSQL
tmtms
1
1k
Snowflakeでデータ基盤を もう一度作り直すなら / rebuilding-data-platform-with-snowflake
pei0804
6
1.6k
打 造 A I 驅 動 的 G i t H u b ⾃ 動 化 ⼯ 作 流 程
appleboy
0
360
Haskell を武器にして挑む競技プログラミング ─ 操作的思考から意味モデル思考へ
naoya
7
1.6k
生成AI時代におけるグローバル戦略思考
taka_aki
0
200
多様なデジタルアイデンティティを攻撃からどうやって守るのか / 20251212
ayokura
0
490
MLflowダイエット大作戦
lycorptech_jp
PRO
1
140
.NET 10の概要
tomokusaba
0
120
WordPress は終わったのか ~今のWordPress の制作手法ってなにがあんねん?~ / Is WordPress Over? How We Build with WordPress Today
tbshiki
2
830
1人1サービス開発しているチームでのClaudeCodeの使い方
noayaoshiro
2
430
今年のデータ・ML系アップデートと気になるアプデのご紹介
nayuts
1
520
AI 駆動開発勉強会 フロントエンド支部 #1 w/あずもば
1ftseabass
PRO
0
400
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
97
6.4k
Music & Morning Musume
bryan
46
7k
Code Review Best Practice
trishagee
74
19k
How to build a perfect <img>
jonoalderson
0
4.6k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Color Theory Basics | Prateek | Gurzu
gurzu
0
140
Code Reviewing Like a Champion
maltzj
527
40k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
54k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
81
Claude Code のすすめ
schroneko
65
200k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
32
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