Slide 1

Slide 1 text

Spring gRPC で始める gRPC 入門 2025-06-07 JJUG CCC 2025 Spring BABY JOB株式会社 浅野 正貴 (@mackey0225)

Slide 2

Slide 2 text

Spring gRPC で始める gRPC 入門 自己紹介 名前:浅野 正貴 所属:BABY JOB株式会社 関ジャバの運営もやってます X: @mackey0225

Slide 3

Slide 3 text

Spring gRPC で始める gRPC 入門 お品書き ● gRPC とは ● Spring gRPC とは ● サンプルコードを用いた実装 ● デモ ● まとめ

Slide 4

Slide 4 text

gRPC とは

Slide 5

Slide 5 text

Spring gRPC で始める gRPC 入門 gRPC とは ● RPC のフレームワークの1つ ● Google 内の基盤技術が起源 ● 様々な言語やプラットフォームで利用可能 ● HTTP/2 で通信 ● 4つの通信タイプ ● Protocol Buffers(protobuf)

Slide 6

Slide 6 text

Spring gRPC で始める gRPC 入門 RPC フレームワークの1つ ● Remote Procedure Call の略 ● 遠隔の端末上の関数・手続きを呼び出し実行する技術 ● 考え方自体は昔からあり、歴史は長い ○ 1970年代:RFC 694、RFC 707、Xerox PARC など ○ 80年代・90年代:Sun RPC、CORBA、Java RMI など ● 他には Apache Thrift、Apache bRPC、JSON-RPC など ● マイクロサービス間の通信やモバイルアプリで使われる

Slide 7

Slide 7 text

Spring gRPC で始める gRPC 入門 Google 内の基盤技術が起源 ● Google の RPC フレームワーク Stubby がルーツ ○ 内部では 10 年以上の利用実績 ● 2013年から gRPC の内部プロジェクトが開始 ● 2015年2月:GitHub で公開 ● 2016年8月:1.0.0 リリース (GA) ● 2017年2月:CNCF のプロジェクト

Slide 8

Slide 8 text

Spring gRPC で始める gRPC 入門 余談:gRPC は何を表しているか? ● gRPC Remote Procedure Call ● Golden Retriever PanCakes ● バージョンごとに "g" に意味がある ○ 1.30:gradius、1.58:goku など gRPC マスコット PanCakesくん (再帰的。。。?)😕

Slide 9

Slide 9 text

Spring gRPC で始める gRPC 入門 余談:gRPC は何を表しているか? ● gRPC Remote Procedure Call ● Golden Retriever PanCakes ● バージョンごとに "g" に意味がある ○ 1.30:gradius、1.58:goku など ● Google Remote Procedure Call は完全否定 gRPC マスコット PanCakesくん (再帰的。。。?)😕

Slide 10

Slide 10 text

Spring gRPC で始める gRPC 入門 余談:gRPC は何を表しているか? ● gRPC Remote Procedure Call ● Golden Retriever PanCakes ● バージョンごとに "g" に意味がある ○ 1.30:gradius、1.58:goku など ● Google Remote Procedure Call は完全否定 gRPC マスコット PanCakesくん (再帰的。。。?)😕 引用元:YouTube: Keynote Overview of gRPC Ivy Zhuang, Software Engineer, Google https://www.youtube.com/watch?v=E3ez34fdC0k

Slide 11

Slide 11 text

Spring gRPC で始める gRPC 入門 様々な言語やプラットフォームで利用可能 ● Java をはじめ多くの言語で利用可能 ○ C++, Go, Python, Node.js, Kotlin, PHP など ○ 異なる言語で書かれたサービス間での通信が可能 ● 様々な OS、モバイルで利用可能 ○ ブラウザからはプロキシ(gRPC-web)を使えば可能

Slide 12

Slide 12 text

Spring gRPC で始める gRPC 入門 HTTP/2 で通信 ● HTTP/2 は2015年5月に RFC 7540 で標準化 ○ その後、2022年6月に RFC 9113 で更新 ● HTTP/2 は Google が開発していた SPDY がベース ● HTTP/1.1 との比較 ○ バイナリプロトコルによる高速かつ効率な通信が可能 ○ 単一のコネクションで複数の並列通信が可能

Slide 13

Slide 13 text

Spring gRPC で始める gRPC 入門 4つの通信タイプ 以下の 4 つがある ● 単項RPC ● サーバーストリーミングRPC ● クライアントストリーミングRPC ● 双方向ストリーミングRPC

Slide 14

Slide 14 text

Spring gRPC で始める gRPC 入門 4つの通信タイプ(イメージ) Client Server Client Server Client Server Client Server 単項RPC サーバー ストリーミングRPC クライアント ストリーミングRPC 双方向 ストリーミングRPC

Slide 15

Slide 15 text

Spring gRPC で始める gRPC 入門 Protocol Buffers(protobuf) ● Google が開発したシリアライズライブラリ ○ https://github.com/protocolbuffers ● IDL(インターフェース定義言語)を用いて記述 ○ 拡張子は .proto ○ service(API仕様) と message(データ構造) を定義 ■ 静的型付け ○ protoc で各言語のコードを生成する(コンパイル)

Slide 16

Slide 16 text

Spring gRPC で始める gRPC 入門 Protocol Buffers(protobuf)

Slide 17

Slide 17 text

Spring gRPC で始める gRPC 入門 Protocol Buffers(protobuf) サービス メッセージ 構文宣言

Slide 18

Slide 18 text

Spring gRPC で始める gRPC 入門 Protocol Buffers(protobuf) サービス メッセージ 構文宣言 package, option は割愛🙏

Slide 19

Slide 19 text

Spring gRPC で始める gRPC 入門 Protocol Buffers(protobuf) 最初にバージョンの指定 現状は「syntax = "proto3";」でOK

Slide 20

Slide 20 text

Spring gRPC で始める gRPC 入門 Protocol Buffers(protobuf) 最初にバージョンの指定 現状は「syntax = "proto3";」でOK ちなみに 新しい定義「edition = "2023";」は grpc-java ではできない。。。

Slide 21

Slide 21 text

Spring gRPC で始める gRPC 入門 Protocol Buffers(protobuf) 最初にバージョンの指定 現状は「syntax = "proto3";」でOK ちなみに 新しい定義「edition = "2023";」は grpc-java ではできない。。。 https://github.com/grpc/grpc-java/issues/11526 こんな Issue があるんよ

Slide 22

Slide 22 text

Spring gRPC で始める gRPC 入門 Protocol Buffers(protobuf) 最初にバージョンの指定 現状は「syntax = "proto3";」でOK ちなみに 新しい定義「edition = "2023";」は grpc-java ではできない。。。 https://github.com/grpc/grpc-java/issues/11526 こんな Issue があるんよ

Slide 23

Slide 23 text

Spring gRPC で始める gRPC 入門 Protocol Buffers(protobuf) クライアントとサーバー間の定義 先の 4 つの通信もここで宣言する

Slide 24

Slide 24 text

Spring gRPC で始める gRPC 入門 Protocol Buffers(protobuf) クライアントとサーバー間の定義 先の 4 つの通信もここで宣言する

Slide 25

Slide 25 text

Spring gRPC で始める gRPC 入門 Protocol Buffers(protobuf) サービスの引数・戻り値を定義する

Slide 26

Slide 26 text

Spring gRPC で始める gRPC 入門 Protocol Buffers(protobuf)- message 代表的なものは以下 ● Scalar:基本となる型(文字列、数値、真偽値など) ● Enum:複数の異なる定数の集合 ● Repeated:配列・リスト ● Map:キー・バリューの組 ● Any:任意の型 ● Oneof:最大1つのフィールドだけ設定する

Slide 27

Slide 27 text

Spring gRPC で始める gRPC 入門 Protocol Buffers(protobuf) フィールド番号 フィールドを識別するためのもの メッセージ内で一意にしないといけない

Slide 28

Slide 28 text

Spring gRPC で始める gRPC 入門 gRPC とは ● RPC のフレームワークの1つ ● Google 内の基盤技術が起源 ● 様々な言語やプラットフォームで利用可能 ● HTTP/2 で通信 ● 4つの通信タイプ ● Protocol Buffers(protobuf)

Slide 29

Slide 29 text

Spring gRPC とは

Slide 30

Slide 30 text

Spring gRPC で始める gRPC 入門 Spring gRPC とは - 簡単な機能説明 ● Spring Boot アプリに gRPC を導入できる ○ gRPC のクライアント、サーバーの両方 ● Actuator を用いてメトリクスの取得が可能 ● GraalVM のネイティブバイナリにコンパイルが可能 ● 将来的には Spring Security との連携も予定

Slide 31

Slide 31 text

Spring gRPC で始める gRPC 入門 Spring gRPC とは - タイムライン ● 公開は2024年9月 ○ 当初は実験的なプロジェクトとして公開 ● 現在の最新は 0.8.0 ○ このバージョンで正式なプロジェクトに昇格 ● Spring Boot 4 系が出るタイミングで 1.0.0 になる予定 ○ 今年の秋くらいになりそう

Slide 32

Slide 32 text

Spring gRPC で始める gRPC 入門 Spring gRPC とは ● Spring プロジェクトのひとつ ● 公開は2024年9月 ○ 当初は実験的なプロジェクトとして公開 ○ 2025年5月13日に正式なプロジェクトとして追加 ● 現在の最新バージョンは 0.8.0 https://spring.io/blog/2025/05/13/spring-grpc-promoted

Slide 33

Slide 33 text

Spring gRPC で始める gRPC 入門 Spring gRPC とは ● Spring プロジェクトのひとつ ● 公開は2024年9月 ○ 当初は実験的なプロジェクトとして公開 ○ 2025年5月13日に正式なプロジェクトとして追加 ● 現在の最新バージョンは 0.8.0 https://spring.io/blog/2025/05/13/spring-grpc-promoted Spring gRPC 1.0.0のSpring Boot連携機能は、Spring Boot 4.0.0で本体へ移行します。 そのため、Spring gRPC 1.0.0のサポートは、Spring Boot 4.0.0 のライフサイクルに合わせられるとお考えください。

Slide 34

Slide 34 text

Spring gRPC で始める gRPC 入門 Spring gRPC とは - 使い方・開発の概要 ● Spring Boot で gRPC サービスを簡単に構築可能 ○ Spring Initializr で Spring gRPC を選択 ○ proto フォルダに proto ファイルを作成・配置 ○ ビルドツールでクラスファイルを生成 ○ 作成されたクラスファイルを元にサービス実装

Slide 35

Slide 35 text

サンプルコードを用いた実装

Slide 36

Slide 36 text

Spring gRPC で始める gRPC 入門 お試し Spring gRPC Spring Initializr で Spring gRPC を選択する

Slide 37

Slide 37 text

Spring gRPC で始める gRPC 入門 お試し Spring gRPC プロジェクト作成時点で proto ディレク トリが作成されている

Slide 38

Slide 38 text

Spring gRPC で始める gRPC 入門 お試し Spring gRPC コード参考: https://github.com/spring-projects/spring-grpc/blob/main/samples/grpc-server/src/main/proto/hel lo.proto proto ディレクトリ内に .proto ファイルを追加する

Slide 39

Slide 39 text

Spring gRPC で始める gRPC 入門 お試し Spring gRPC ビルドするとコードが生成される

Slide 40

Slide 40 text

Spring gRPC で始める gRPC 入門 お試し Spring gRPC 生成コードを使用し処理を記述 コード参考: https://github.com/spring-projects/spring-grpc/blob/main/samples/grpc-server/src/main/java/org/ springframework/grpc/sample/GrpcServerService.java

Slide 41

Slide 41 text

Spring gRPC で始める gRPC 入門 お試し Spring gRPC いつも通り、Spring Boot を起動。

Slide 42

Slide 42 text

Spring gRPC で始める gRPC 入門 お試し Spring gRPC いつも通り、Spring Boot を起動。

Slide 43

Slide 43 text

Spring gRPC で始める gRPC 入門 お試し Spring gRPC .proto で定義したエンドポイントを叩くと結果が返る。 (「\u003e」は「>」がエスケープされている)

Slide 44

Slide 44 text

デモ ソースは以下に配置 https://github.com/mackey0225/jjugccc2025spring

Slide 45

Slide 45 text

Spring gRPC で始める gRPC 入門 デモの構成イメージ gRPC Client gRPC Server Client REST gRPC (Client に対しての Server) port:8080 port:8081

Slide 46

Slide 46 text

まとめ

Slide 47

Slide 47 text

Spring gRPC で始める gRPC 入門 まとめ ● gRPC は分散アーキテクチャで重要な要素 ● Spring 謹製の gRPC ライブラリ ○ 将来的に安定した長期サポートを得やすい ○ 簡単に gRPC を導入できるのは魅力 ● 導入・本番運用は 1.0.0 の公開後が良いかも ○ 視野に入れる意味で現時点で触るのは有り

Slide 48

Slide 48 text

ご清聴いただき ありがとうございました