SlideShare ist ein Scribd-Unternehmen logo
1 von 21
Downloaden Sie, um offline zu lesen
© RakSul,Inc. All Rights Reserved.
RakSulのInternal API開発で
gRPCを導入した話
Omotesando.rb #45
Nobuhiro Nikushi
2019/04/03
© RakSul,Inc. All Rights Reserved.
About me
Nobuhiro Nikushi
二串 信弘  
● Works at RAKSUL INC. from 2017/3
● Engineering Manager at Printing EC Team.
● Favorite Languages: Ruby, Golang,
TypeScript, etc
● Private: English, Violin, 子育て
Engineering Manager and Tech Lead at RAKSUL
github: @nikushi
twitter: @nikushi_jp
ファブレス型印刷/広告EC
“ラクスル”
物流のUber
“ハコベル”
Our services
印刷や物流といった伝統的な産業で事業を展開
● ラクスルのシステムのRebuild
○ 一枚岩なレガシーシステムを ラクスルではどのように Rebuildしているの
か?https://www.slideshare.net/nixiesan/rebuild-124366117
○ そうだ、ラクスルを作り直そう! | RakSul Tech Blog
https://tech.raksul.com/2017/12/18/raksul-platform-project/
● 商品カタログ機能のInternal API化 # 今日の話
What do I do?
商品カタログAPI(MD API)の立ち上げにあたってgRPCを採用
その経緯を紹介します
Today’s topic
© RakSul,Inc. All Rights Reserved.
印刷EC = raksul.com における商品カタログサービス。もともとモノリスアプリケーション
内に存在していた機能を別サービス化。
ユースケース
● ECサイトは商品仕様をAPI経由で参照できる
● カテゴリマネージャー向け(商品登録・更新、販売価格の更新など)
What is MD API?
© RakSul,Inc. All Rights Reserved.
商品仕様の例: チラシ・フライヤー
© RakSul,Inc. All Rights Reserved.
商品仕様の例: 名刺
© RakSul,Inc. All Rights Reserved.
商品仕様の例: 冊子
© RakSul,Inc. All Rights Reserved.
Components
Monolithic App
Monolithic App
MD API
GET https://raksul.com/flyer GET https://raksul.com/flyer
gRPC over h2c
server implemented
by grpc gem, with
Rails’ ecosystem.
Still monolithic Rails
app, but this layer
acts like BFF.
gRPC client stub,
implemented by
grpc gem
© RakSul,Inc. All Rights Reserved.
商品カタログの特性
● raksul.com の商品カテゴリ数はN個(チラシ、名刺、冊子、etc..)
● 商品カテゴリ毎にデータスキーマは異なる
本プロジェクトでAPI仕様記述言語に求めること
● API仕様記述ファイルを商品カテゴリ毎に分けたい
● API仕様記述のエディタでの書きやすさを重視
We choose gRPC, Why?
© RakSul,Inc. All Rights Reserved.
Protocol Buffers
● import によるファーストクラスのファ
イル分割サポート
● エディタのサポートが強力
○ 無論エディタによるが
○ JetBrains系エディタのproto plugin
はとても良い
■ message間、ファイル間の
コードジャンプ
■ syntax error feedback
We choose gRPC, Why?
© RakSul,Inc. All Rights Reserved.
RakSulではAPI開発にSwaggerを使ってきたが本案件では採用しなかった
● $ref を使うとファイル分割できるが
○ $ref: '../components/pet.yml' こういうの
● ローカルエディタでのコードジャンプは効くが、Swagger Editorは未対応
○ (余談) 社内アンケートではSwagger Editor 派と ローカルエディタ派にそもそも分かれた
○ (余談) 私個人としては面倒だが Swagger Editor 使っていた
● Swagger UIや committee がresolveしてくれない
○ `$ref` を resolve し1ファイルに統合するスクリプトを作る ?
■ `$ref` の解決は Ruby ではなく別途 node を使うことになる
○ ファイル修正するたびにコマンド実行 ? or Guard で watchする?
Swagger, why not?
© RakSul,Inc. All Rights Reserved.
swagger-blocks という gem がある
swagger記法をRuby の DSL で書ける
今回の要件も叶えれるが、本当に俺たちはRubyでSwaggerを書きたいか?
最終更新日が1 year ago
等々考えて見送った。
© RakSul,Inc. All Rights Reserved.
● JSON Schema より圧倒的に書きやすい(とおもった)
○ 記述量少ない && エディタサポートがいい感じなのでサクサク書ける
● REST制約(GET/POST/PUT/DELETE)に縛られないAPI設計ができること
○ 技術負債解消の文脈では関数単位で切り出しがしやすい!
● メンバーのモチベーションは高い、技術的な裾のが広がった
○ Protocol Buffersが便利だと気づく
○ 他案件でも採用
● インフラ的チャレンジ(Sidecar Envoy, Service Discovery, Service Mesh,
Container, etc)
gRPCを採用後に感じた良かったこと
© RakSul,Inc. All Rights Reserved.
gRPCを使ったサービスを本番運用に乗せるには考えることがたくさんある
● Infrastructure(monitoring, load balancing, graceful deploy, etc)
● Understanding gRPC protocol(status code, metadata, etc)
● Interceptor
● mock in unit tests
● mono git repository for proto files
● Understanding gRPC Server(Ruby and gRPC C-Core impl)
● etc
ロングストーリー。これらの話はまたいつかの機会に話したい。
gRPC in Production
© RakSul,Inc. All Rights Reserved.
We are hiring!
© RakSul,Inc. All Rights Reserved.
Thank you!
© RakSul,Inc. All Rights Reserved.
Appendix
© RakSul,Inc. All Rights Reserved.
raksul-proto: mono repo for all systems’ proto files
raksul-proto $ tree raksul/
raksul
└── printmd
└── v1
├── businesscard.proto
├── b3flyer.proto
├── flyer.proto
├── price.proto
…etc..
© RakSul,Inc. All Rights Reserved.
フロントエンド向けのAPI戦略
● フロント向けのAPIは引き続き RESTFul APIを採用
● Swaggerを使う. gRPC-Web も考えたが見送り
○ PMやフロントエンドエンジニアの慣れ chorome developer tools
● しかしここでJSON Schemaを書いてしまっては裏側をgRPCにしたとしても意味が
無い
protoc-gen-swaggerを使ってフロントエンド向けAPIの仕様もProtocol Buffers で書いて
swagger.json 出力するようにした
ref: スキーマ定義言語 Protocol Buffers と protoc-gen-swagger を使って Web API のスキマを埋めよう
| VOYAGE GROUP techlog
https://techlog.voyagegroup.com/entry/protoc-gen-swagger
protoc-gen-swagger

Weitere ähnliche Inhalte

Was ist angesagt?

AWS re:Invent 2013 参加報告(新サービスとセッション)
AWS re:Invent 2013 参加報告(新サービスとセッション)AWS re:Invent 2013 参加報告(新サービスとセッション)
AWS re:Invent 2013 参加報告(新サービスとセッション)
Akio Katayama
 
私はこれでJSONをやめました〜あるいはAWSの設定をコード化するとはどういうことか〜
私はこれでJSONをやめました〜あるいはAWSの設定をコード化するとはどういうことか〜私はこれでJSONをやめました〜あるいはAWSの設定をコード化するとはどういうことか〜
私はこれでJSONをやめました〜あるいはAWSの設定をコード化するとはどういうことか〜
Terui Masashi
 
APIを叩くだけでない、Deep Learning on AWS で自分だけの学習モデルを作ろう! by JAWS-UG AI支部
APIを叩くだけでない、Deep Learning on AWS で自分だけの学習モデルを作ろう! by JAWS-UG AI支部APIを叩くだけでない、Deep Learning on AWS で自分だけの学習モデルを作ろう! by JAWS-UG AI支部
APIを叩くだけでない、Deep Learning on AWS で自分だけの学習モデルを作ろう! by JAWS-UG AI支部
Daisuke Nagao
 
クラウド環境におけるWebアプリケーションの正しい作り方(for Perl users)
クラウド環境におけるWebアプリケーションの正しい作り方(for Perl users)クラウド環境におけるWebアプリケーションの正しい作り方(for Perl users)
クラウド環境におけるWebアプリケーションの正しい作り方(for Perl users)
Terui Masashi
 
モバイルゲームにおけるAWSの泥臭い使い方
モバイルゲームにおけるAWSの泥臭い使い方モバイルゲームにおけるAWSの泥臭い使い方
モバイルゲームにおけるAWSの泥臭い使い方
Junpei Nakada
 

Was ist angesagt? (20)

レガシーなアプリにWeb apiを実装してなみだ目になったのでちょっといろいろ教えてください
レガシーなアプリにWeb apiを実装してなみだ目になったのでちょっといろいろ教えてくださいレガシーなアプリにWeb apiを実装してなみだ目になったのでちょっといろいろ教えてください
レガシーなアプリにWeb apiを実装してなみだ目になったのでちょっといろいろ教えてください
 
【資料】【Web開発者向け】クラウドセミナー@渋谷 #2【Azure入門】
【資料】【Web開発者向け】クラウドセミナー@渋谷 #2【Azure入門】【資料】【Web開発者向け】クラウドセミナー@渋谷 #2【Azure入門】
【資料】【Web開発者向け】クラウドセミナー@渋谷 #2【Azure入門】
 
Node.jsで使えるファイルDB"NeDB"のススメ
Node.jsで使えるファイルDB"NeDB"のススメNode.jsで使えるファイルDB"NeDB"のススメ
Node.jsで使えるファイルDB"NeDB"のススメ
 
Node.jsに縁のない職場でnode.jsを使い始める戦術
Node.jsに縁のない職場でnode.jsを使い始める戦術Node.jsに縁のない職場でnode.jsを使い始める戦術
Node.jsに縁のない職場でnode.jsを使い始める戦術
 
極貧Webサービス運用 kawasaki.rb #044
極貧Webサービス運用 kawasaki.rb #044極貧Webサービス運用 kawasaki.rb #044
極貧Webサービス運用 kawasaki.rb #044
 
AWS re:Invent 2013 参加報告(新サービスとセッション)
AWS re:Invent 2013 参加報告(新サービスとセッション)AWS re:Invent 2013 参加報告(新サービスとセッション)
AWS re:Invent 2013 参加報告(新サービスとセッション)
 
私はこれでJSONをやめました〜あるいはAWSの設定をコード化するとはどういうことか〜
私はこれでJSONをやめました〜あるいはAWSの設定をコード化するとはどういうことか〜私はこれでJSONをやめました〜あるいはAWSの設定をコード化するとはどういうことか〜
私はこれでJSONをやめました〜あるいはAWSの設定をコード化するとはどういうことか〜
 
APIを叩くだけでない、Deep Learning on AWS で自分だけの学習モデルを作ろう! by JAWS-UG AI支部
APIを叩くだけでない、Deep Learning on AWS で自分だけの学習モデルを作ろう! by JAWS-UG AI支部APIを叩くだけでない、Deep Learning on AWS で自分だけの学習モデルを作ろう! by JAWS-UG AI支部
APIを叩くだけでない、Deep Learning on AWS で自分だけの学習モデルを作ろう! by JAWS-UG AI支部
 
俺と LightSail 概要と使ってみた
俺と LightSail  概要と使ってみた俺と LightSail  概要と使ってみた
俺と LightSail 概要と使ってみた
 
クラウド環境におけるWebアプリケーションの正しい作り方(for Perl users)
クラウド環境におけるWebアプリケーションの正しい作り方(for Perl users)クラウド環境におけるWebアプリケーションの正しい作り方(for Perl users)
クラウド環境におけるWebアプリケーションの正しい作り方(for Perl users)
 
グラフ解析で社長の脳内さらす!
グラフ解析で社長の脳内さらす!グラフ解析で社長の脳内さらす!
グラフ解析で社長の脳内さらす!
 
モバイルゲームにおけるAWSの泥臭い使い方
モバイルゲームにおけるAWSの泥臭い使い方モバイルゲームにおけるAWSの泥臭い使い方
モバイルゲームにおけるAWSの泥臭い使い方
 
AWS Step FunctionとLambdaでディープラーニングの訓練を全自動化する
AWS Step FunctionとLambdaでディープラーニングの訓練を全自動化するAWS Step FunctionとLambdaでディープラーニングの訓練を全自動化する
AWS Step FunctionとLambdaでディープラーニングの訓練を全自動化する
 
Fargate起動歴1日の男が語る運用の勘どころ
Fargate起動歴1日の男が語る運用の勘どころFargate起動歴1日の男が語る運用の勘どころ
Fargate起動歴1日の男が語る運用の勘どころ
 
JAWS-UG Osaka 2013.11.02 Feel the Elesticity v2.0
JAWS-UG Osaka 2013.11.02 Feel the Elesticity v2.0JAWS-UG Osaka 2013.11.02 Feel the Elesticity v2.0
JAWS-UG Osaka 2013.11.02 Feel the Elesticity v2.0
 
VRディープ座談会 introduction ojima
VRディープ座談会 introduction ojimaVRディープ座談会 introduction ojima
VRディープ座談会 introduction ojima
 
Serverless Ninja Warriors [panel]
Serverless Ninja Warriors [panel]Serverless Ninja Warriors [panel]
Serverless Ninja Warriors [panel]
 
サーバーレスでシステムを開発する時に⼤切な事
サーバーレスでシステムを開発する時に⼤切な事サーバーレスでシステムを開発する時に⼤切な事
サーバーレスでシステムを開発する時に⼤切な事
 
Serverless Meetup Tokyo #2 オープニング
Serverless Meetup Tokyo #2 オープニングServerless Meetup Tokyo #2 オープニング
Serverless Meetup Tokyo #2 オープニング
 
Scalaプロダクトのビルド高速化
Scalaプロダクトのビルド高速化Scalaプロダクトのビルド高速化
Scalaプロダクトのビルド高速化
 

Ähnlich wie RakSulのInternal API開発で gRPCを導入した話

Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurb
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurbSidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurb
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurb
Koichiro Sumi
 
レガシーシステムのDBマイグレーションし始めた話
レガシーシステムのDBマイグレーションし始めた話レガシーシステムのDBマイグレーションし始めた話
レガシーシステムのDBマイグレーションし始めた話
nekogeruge_987
 
Scala.jsはじめました!
Scala.jsはじめました!Scala.jsはじめました!
Scala.jsはじめました!
K Kinzal
 
fluxflex meetup in Tokyo
fluxflex meetup in Tokyofluxflex meetup in Tokyo
fluxflex meetup in Tokyo
Kyosuke Inoue
 
JavaScriptトレンド総括(2014)
JavaScriptトレンド総括(2014)JavaScriptトレンド総括(2014)
JavaScriptトレンド総括(2014)
VOYAGE GROUP
 
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? - なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
健人 井関
 
Fluxflex meetup 2011 in Tokyo
Fluxflex meetup 2011 in TokyoFluxflex meetup 2011 in Tokyo
Fluxflex meetup 2011 in Tokyo
Kyosuke Inoue
 

Ähnlich wie RakSulのInternal API開発で gRPCを導入した話 (20)

Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurb
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurbSidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurb
Sidekiq Proを1年ほど使ってみて良かったところ、困ったところ | 新宿.rb 29th #shinjukurb
 
GAE + Spannerで目指せ No (Uncomfortable) Ops
GAE + Spannerで目指せ No (Uncomfortable) OpsGAE + Spannerで目指せ No (Uncomfortable) Ops
GAE + Spannerで目指せ No (Uncomfortable) Ops
 
レガシーシステムのDBマイグレーションし始めた話
レガシーシステムのDBマイグレーションし始めた話レガシーシステムのDBマイグレーションし始めた話
レガシーシステムのDBマイグレーションし始めた話
 
Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介
 
Scala.jsはじめました!
Scala.jsはじめました!Scala.jsはじめました!
Scala.jsはじめました!
 
ビッグじゃなくても使えるSpark Streaming
ビッグじゃなくても使えるSpark Streamingビッグじゃなくても使えるSpark Streaming
ビッグじゃなくても使えるSpark Streaming
 
SpockからRSpecにきたときの気づき #coedorb
SpockからRSpecにきたときの気づき #coedorbSpockからRSpecにきたときの気づき #coedorb
SpockからRSpecにきたときの気づき #coedorb
 
fluxflex meetup in Tokyo
fluxflex meetup in Tokyofluxflex meetup in Tokyo
fluxflex meetup in Tokyo
 
Deploy TypeScript with CodePipeline in Fargate
Deploy TypeScript with CodePipeline in FargateDeploy TypeScript with CodePipeline in Fargate
Deploy TypeScript with CodePipeline in Fargate
 
らくちん Go言語
らくちん Go言語らくちん Go言語
らくちん Go言語
 
Nodeにしましょう
NodeにしましょうNodeにしましょう
Nodeにしましょう
 
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
 
Start-padrino
Start-padrinoStart-padrino
Start-padrino
 
JavaScriptトレンド総括(2014)
JavaScriptトレンド総括(2014)JavaScriptトレンド総括(2014)
JavaScriptトレンド総括(2014)
 
CloudSQL v2は デキる子なのか?
CloudSQL v2は デキる子なのか?CloudSQL v2は デキる子なのか?
CloudSQL v2は デキる子なのか?
 
SwaggerとAPIのデザイン
SwaggerとAPIのデザインSwaggerとAPIのデザイン
SwaggerとAPIのデザイン
 
GraphQLについての5分間
GraphQLについての5分間GraphQLについての5分間
GraphQLについての5分間
 
grpc-gateway を試してみた fukuoka.go#11
grpc-gateway を試してみた fukuoka.go#11grpc-gateway を試してみた fukuoka.go#11
grpc-gateway を試してみた fukuoka.go#11
 
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? - なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
 
Fluxflex meetup 2011 in Tokyo
Fluxflex meetup 2011 in TokyoFluxflex meetup 2011 in Tokyo
Fluxflex meetup 2011 in Tokyo
 

RakSulのInternal API開発で gRPCを導入した話

  • 1. © RakSul,Inc. All Rights Reserved. RakSulのInternal API開発で gRPCを導入した話 Omotesando.rb #45 Nobuhiro Nikushi 2019/04/03
  • 2. © RakSul,Inc. All Rights Reserved. About me Nobuhiro Nikushi 二串 信弘   ● Works at RAKSUL INC. from 2017/3 ● Engineering Manager at Printing EC Team. ● Favorite Languages: Ruby, Golang, TypeScript, etc ● Private: English, Violin, 子育て Engineering Manager and Tech Lead at RAKSUL github: @nikushi twitter: @nikushi_jp
  • 4. ● ラクスルのシステムのRebuild ○ 一枚岩なレガシーシステムを ラクスルではどのように Rebuildしているの か?https://www.slideshare.net/nixiesan/rebuild-124366117 ○ そうだ、ラクスルを作り直そう! | RakSul Tech Blog https://tech.raksul.com/2017/12/18/raksul-platform-project/ ● 商品カタログ機能のInternal API化 # 今日の話 What do I do?
  • 6. © RakSul,Inc. All Rights Reserved. 印刷EC = raksul.com における商品カタログサービス。もともとモノリスアプリケーション 内に存在していた機能を別サービス化。 ユースケース ● ECサイトは商品仕様をAPI経由で参照できる ● カテゴリマネージャー向け(商品登録・更新、販売価格の更新など) What is MD API?
  • 7. © RakSul,Inc. All Rights Reserved. 商品仕様の例: チラシ・フライヤー
  • 8. © RakSul,Inc. All Rights Reserved. 商品仕様の例: 名刺
  • 9. © RakSul,Inc. All Rights Reserved. 商品仕様の例: 冊子
  • 10. © RakSul,Inc. All Rights Reserved. Components Monolithic App Monolithic App MD API GET https://raksul.com/flyer GET https://raksul.com/flyer gRPC over h2c server implemented by grpc gem, with Rails’ ecosystem. Still monolithic Rails app, but this layer acts like BFF. gRPC client stub, implemented by grpc gem
  • 11. © RakSul,Inc. All Rights Reserved. 商品カタログの特性 ● raksul.com の商品カテゴリ数はN個(チラシ、名刺、冊子、etc..) ● 商品カテゴリ毎にデータスキーマは異なる 本プロジェクトでAPI仕様記述言語に求めること ● API仕様記述ファイルを商品カテゴリ毎に分けたい ● API仕様記述のエディタでの書きやすさを重視 We choose gRPC, Why?
  • 12. © RakSul,Inc. All Rights Reserved. Protocol Buffers ● import によるファーストクラスのファ イル分割サポート ● エディタのサポートが強力 ○ 無論エディタによるが ○ JetBrains系エディタのproto plugin はとても良い ■ message間、ファイル間の コードジャンプ ■ syntax error feedback We choose gRPC, Why?
  • 13. © RakSul,Inc. All Rights Reserved. RakSulではAPI開発にSwaggerを使ってきたが本案件では採用しなかった ● $ref を使うとファイル分割できるが ○ $ref: '../components/pet.yml' こういうの ● ローカルエディタでのコードジャンプは効くが、Swagger Editorは未対応 ○ (余談) 社内アンケートではSwagger Editor 派と ローカルエディタ派にそもそも分かれた ○ (余談) 私個人としては面倒だが Swagger Editor 使っていた ● Swagger UIや committee がresolveしてくれない ○ `$ref` を resolve し1ファイルに統合するスクリプトを作る ? ■ `$ref` の解決は Ruby ではなく別途 node を使うことになる ○ ファイル修正するたびにコマンド実行 ? or Guard で watchする? Swagger, why not?
  • 14. © RakSul,Inc. All Rights Reserved. swagger-blocks という gem がある swagger記法をRuby の DSL で書ける 今回の要件も叶えれるが、本当に俺たちはRubyでSwaggerを書きたいか? 最終更新日が1 year ago 等々考えて見送った。
  • 15. © RakSul,Inc. All Rights Reserved. ● JSON Schema より圧倒的に書きやすい(とおもった) ○ 記述量少ない && エディタサポートがいい感じなのでサクサク書ける ● REST制約(GET/POST/PUT/DELETE)に縛られないAPI設計ができること ○ 技術負債解消の文脈では関数単位で切り出しがしやすい! ● メンバーのモチベーションは高い、技術的な裾のが広がった ○ Protocol Buffersが便利だと気づく ○ 他案件でも採用 ● インフラ的チャレンジ(Sidecar Envoy, Service Discovery, Service Mesh, Container, etc) gRPCを採用後に感じた良かったこと
  • 16. © RakSul,Inc. All Rights Reserved. gRPCを使ったサービスを本番運用に乗せるには考えることがたくさんある ● Infrastructure(monitoring, load balancing, graceful deploy, etc) ● Understanding gRPC protocol(status code, metadata, etc) ● Interceptor ● mock in unit tests ● mono git repository for proto files ● Understanding gRPC Server(Ruby and gRPC C-Core impl) ● etc ロングストーリー。これらの話はまたいつかの機会に話したい。 gRPC in Production
  • 17. © RakSul,Inc. All Rights Reserved. We are hiring!
  • 18. © RakSul,Inc. All Rights Reserved. Thank you!
  • 19. © RakSul,Inc. All Rights Reserved. Appendix
  • 20. © RakSul,Inc. All Rights Reserved. raksul-proto: mono repo for all systems’ proto files raksul-proto $ tree raksul/ raksul └── printmd └── v1 ├── businesscard.proto ├── b3flyer.proto ├── flyer.proto ├── price.proto …etc..
  • 21. © RakSul,Inc. All Rights Reserved. フロントエンド向けのAPI戦略 ● フロント向けのAPIは引き続き RESTFul APIを採用 ● Swaggerを使う. gRPC-Web も考えたが見送り ○ PMやフロントエンドエンジニアの慣れ chorome developer tools ● しかしここでJSON Schemaを書いてしまっては裏側をgRPCにしたとしても意味が 無い protoc-gen-swaggerを使ってフロントエンド向けAPIの仕様もProtocol Buffers で書いて swagger.json 出力するようにした ref: スキーマ定義言語 Protocol Buffers と protoc-gen-swagger を使って Web API のスキマを埋めよう | VOYAGE GROUP techlog https://techlog.voyagegroup.com/entry/protoc-gen-swagger protoc-gen-swagger