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
Cloud Functions in Go at Mercari
Search
@babarot
July 13, 2019
Technology
6.4k
9
Share
Cloud Functions in Go at Mercari
https://fukuoka.gocon.jp/ja/schedule/
@babarot
July 13, 2019
More Decks by @babarot
See All by @babarot
SLOをゼロからつくる
babarot
15
6.4k
Insert an Example of Software Engineer Here
babarot
4
2k
Kubernetes manifests management and operation in Mercari
babarot
27
7.1k
Testing with YAML
babarot
5
5.2k
tfnotify - Show Terraform execution plan beautifully on GitHub
babarot
5
14k
Micoservices Platform in Mercari
babarot
3
190
Terraform Ops for Microservices
babarot
16
15k
シェルスクリプトを書く技術
babarot
3
1.1k
Other Decks in Technology
See All in Technology
Oracle Cloud Infrastructure IaaS 新機能アップデート 2026/3 - 2026/5
oracle4engineer
PRO
1
160
脅威をエンジニアリングの糧にして:恐怖を乗り越えた先にあったもの / Turn threats into fuel for engineering: what lay beyond overcoming fear
nrslib
1
380
Platform engineering for developers, architects & the rest of us (AI agents)
danielbryantuk
0
180
AI Engineering Summit Tokyo 2026 AIの前に、やることがある 〜医療データ企業の4フェーズ〜
dtaniwaki
0
1.4k
「気づいたら仕事が終わっている」バクラクAIエージェント本番運用の裏側 / layerx-bakuraku-aie2026
yuya4
18
9.1k
「コーディング」しない人のための Claude Code 入門 ChatGPT の次の一歩 — 業務に組み込む 育成・共有・自動化
rfdnxbro
2
1.1k
実装は速くなった、レビューはどうする? ― 自身のレビューをAIで再現させるサーヴァントエンジニアリングのすゝめ / Implementation got faster. So what about reviews? — An invitation to Servant Engineering: Recreating your own code reviews with AI
nrslib
6
3.1k
ポケモンの型をTypeScriptの型システムで表現してみた
subroh0508
0
140
ChatworkとBPaaS 異なる特性で学んだAI機能開発の ベストプラクティス
kubell_hr
2
2.3k
【Gen-AX】20260530開催_JJUG CCC 2026 Spring
genax
0
390
Databricks 月刊サービスアップデート 2026年05月号
tyosi1212
0
200
チームで実践する AI-DLC 思考の軌跡を残すチェックポイント設計
belongadmin
0
2.1k
Featured
See All Featured
The agentic SEO stack - context over prompts
schlessera
0
790
For a Future-Friendly Web
brad_frost
183
10k
Into the Great Unknown - MozCon
thekraken
41
2.5k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
The Pragmatic Product Professional
lauravandoore
37
7.3k
Abbi's Birthday
coloredviolet
2
7.9k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
Claude Code のすすめ
schroneko
67
220k
A Tale of Four Properties
chriscoyier
163
24k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
930
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
190
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
310
Transcript
マイクロサービスの成果を可視化する @b4b4r07 (Jul 13, 2019) / Go Conference 19 Summer
in Fukuoka Cloud Functions in Go at Mercari
BABAROT / @b4b4r07 Mercari, Inc. SWE @ Microservices Platform Blog
/ tellme.tokyo
None
None
Monolith Microservices Current status Migrating ...
Monolith Microservices Current status Migrating ... Why Microservices?
https://speakerdeck.com/tcnksm/kai-fa-zhe-xiang-kefalseji-pan-wotukuru?slide=22
https://speakerdeck.com/tcnksm/kai-fa-zhe-xiang-kefalseji-pan-wotukuru?slide=22
https://speakerdeck.com/tcnksm/kai-fa-zhe-xiang-kefalseji-pan-wotukuru?slide=22
https://speakerdeck.com/tcnksm/kai-fa-zhe-xiang-kefalseji-pan-wotukuru?slide=22
https://speakerdeck.com/tcnksm/kai-fa-zhe-xiang-kefalseji-pan-wotukuru?slide=22
https://speakerdeck.com/tcnksm/kai-fa-zhe-xiang-kefalseji-pan-wotukuru?slide=22
Scaling Organization Solving Technical Issues 組織を再編し組織としてのアウトプットを 最大化するため 技術的な課題を解決するため
Scaling Organization Solving Technical Issues 組織を再編し組織としてのアウトプットを 最大化するため 技術的な課題を解決するため 果たして本当にこれらが解決されているか?
Scaling Organization Solving Technical Issues 組織を再編し組織としてのアウトプットを 最大化するため 技術的な課題を解決するため 果たして本当にこれらが解決されているか? Let's
measure!
Go ✕ Google Cloud Functions
DevStats
Agenda •Cloud Functions Go, DevStats •Cloud Functions How we use
•Cloud Functions Tips
Agenda •Cloud Functions Go, DevStats •Cloud Functions How we use
•Cloud Functions Tips
1. Cloud Functions Go, DevStats
What's DevStats?
•Datadog Dashboard •Go package for building a collector •Collectors DevStats
マイクロサービスの数やそれに関わる人数、 デプロイ数など、マイクロサービスとその 開発者に関わるさまざまなメトリクス (Developer Metrics)を可視化した Datadogのダッシュボード Datadog Dashboard
Go package for building a collector Collector(Developer Metricsとして可 視化するのに必要なデータソースから メトリクスを生成しデータストアに保存する
Cloud Function)を実装するために必要 な機能を抽象化して提供するパッケージ
Go package for building a collector Collector(Developer Metricsとして可 視化するのに必要なデータソースから メトリクスを生成しデータストアに保存する
Cloud Function)を実装するために必要 な機能を抽象化して提供するパッケージ
Collectors devstatsパッケージを使って実装された 各メトリクスの収集器のあつまり。 例えば、deploy collectorであれば、 デプロイに関する情報を収集しタグ付け、 メトリクスを作成し(producer)、 任意の データストア(Datadogなど)に送信する (exporter)。
Collectors devstatsパッケージを使って実装された 各メトリクスの収集器のあつまり。 例えば、deploy collectorであれば、 デプロイに関する情報を収集しタグ付け、 メトリクスを作成し(producer)、 任意の データストア(Datadogなど)に送信する (exporter)。
devstats project collectors data Cloud Functions
Collectors devstatsパッケージを使って実装された 各メトリクスの収集器のあつまり。 例えば、deploy collectorであれば、 デプロイに関する情報を収集しタグ付け、 メトリクスを作成し(producer)、 任意の データストア(Datadogなど)に送信する (exporter)。
devstats project collectors data 1. produce Cloud Functions
Collectors devstatsパッケージを使って実装された 各メトリクスの収集器のあつまり。 例えば、deploy collectorであれば、 デプロイに関する情報を収集しタグ付け、 メトリクスを作成し(producer)、 任意の データストア(Datadogなど)に送信する (exporter)。
devstats project collectors data 1. produce 2. export Cloud Functions
Why DevStats?
マイクロサービスの強みを活かして、 「本当に組織全体としてのAgilityが上がっているのか」 を計測することは重要である。
生産性の高い組織において開発者数とデプロイ数は比例関係にある
Agenda •Cloud Functions Go, DevStats •Cloud Functions How we use
•Cloud Functions Tips
2. Cloud Functions How we use
Event-driven serverless compute platform Cloud Functions ” ”
Event-driven serverless compute platform Cloud Functions ” ”
DC VM/Container Serverless •物理マシン •リソース •アプリケーション 技術の発展による管理・運用対象の変化 •物理マシン •リソース •アプリケーション
•物理マシン •リソース •アプリケーション
VM/Container Serverless •好きなだけ/好きなようにスケールできる •ベンダー依存がなくポータビリティがある •要件に合わせて実行環境を変更できる •実行はベアメタルほど高速に動作しないが ビルド・テスト・デプロイのサイクルを開発者 に移譲できるので高速に開発できる Containers vs
Severless •関数の呼び出しのたびに起動され課金され るのでアイドル時間のコストを抑えられる •インフラやリソースを管理しなくてよく、 コードを書くことだけに集中できる •テクノロジがブラックボックス •ベンダー依存でありロックインされる可能性 もある
Serverless Containers vs Severless •関数の呼び出しのたびに起動され課金され るのでアイドル時間のコストを抑えられる •インフラやリソースを管理しなくてよく、 コードを書くことだけに集中できる •テクノロジがブラックボックス •ベンダー依存でありロックインされる可能性
もある
Containers vs Severless •比較して語られることも多いが別物の技術 •適材適所で使うことで真価を発揮できる •今回のDevStatsではCloud Functionsを 使ったほうがいいと判断した
✕ Cloud Functions
Background function Two ways to Go HTTP function HTTPリクエストによって呼び出される関数 標準ライブラリのhttp.HandlerFunc型に従う
イベントに応答して起動される関数 e.g. Cloud Storageバケットのコンテンツが 変更されたとき
Background function Two ways to Go HTTP function HTTPリクエストによって呼び出される関数 標準ライブラリのhttp.HandlerFunc型に従う
イベントに応答して起動される関数 e.g. Cloud Storageバケットのコンテンツが 変更されたとき
HTTP function HTTP request
HTTP function
Background function Two ways to Go HTTP function HTTPリクエストによって呼び出される関数 標準ライブラリのhttp.HandlerFunc型に従う
イベントに応答して起動される関数 e.g. Cloud Storageバケットのコンテンツが 変更されたとき
Event Background function Trigger Subscribe
Event Background function Trigger Subscribe Cloud SchedulerなどでTriggerすれば 関数の定期実行ができる
Background function
Cloud Functions How we use in DevStats
Go package "devstats" Collector(Developer Metricsとして可 視化するのに必要なデータソースから メトリクスを生成しデータストアに保存する Cloud Function)を実装するために必要 な機能を抽象化して提供するパッケージ
Go package "devstats" devstatsパッケージでここをインターフェースを取り決める producer exporter
Go package "devstats"
HTTP function case
microservices-kubernetes Number of deploys Collector 1. call 2. trigger マイクロサービスごとのKubernetes
マニフェストを管理するリポジトリ
microservices-kubernetes Number of deploys Collector 1. call 2. trigger POST
/deploys HTTP request マイクロサービスごとのKubernetes マニフェストを管理するリポジトリ
microservices-kubernetes Number of deploys Collector 1. call 2. trigger POST
/deploys HTTP request マイクロサービスごとのKubernetes マニフェストを管理するリポジトリ 3. produce
microservices-kubernetes Number of deploys Collector 1. call 2. trigger POST
/deploys HTTP request マイクロサービスごとのKubernetes マニフェストを管理するリポジトリ 3. produce 4. export
microservices-kubernetes Number of deploys Collector 1. call 2. trigger POST
/deploys HTTP request マイクロサービスごとのKubernetes マニフェストを管理するリポジトリ 3. produce 4. export devstats.deploys env service corp tool kubectl
Spinnaker webhook Number of deploys Collector 1. call 2. trigger
POST /deploys HTTP request 3. produce 4. export devstats.deploys env service corp tool Kubernetesリソースを GUI経由で扱えるコンポーネント spinnaker
https://speakerdeck.com/b4b4r07/kubernetes-manifests-management-and-operation-in-mercari
Background function case
Cloud Scheduler Cloud Pub/Sub Number of developers Collector 1. message
2. trigger
Cloud Scheduler Cloud Pub/Sub Number of developers Collector 1. message
2. trigger microservices-terraform マイクロサービスごとの開発者 を定義したTerraformリポジトリ
Cloud Scheduler Cloud Pub/Sub Number of developers Collector 1. message
2. trigger microservices-terraform 3. produce マイクロサービスごとの開発者 を定義したTerraformリポジトリ
Cloud Scheduler Cloud Pub/Sub Number of developers Collector 1. message
2. trigger microservices-terraform 3. produce 4. export マイクロサービスごとの開発者 を定義したTerraformリポジトリ
Cloud Scheduler Cloud Pub/Sub Number of developers Collector 1. message
2. trigger microservices-terraform マイクロサービスごとの開発者 を定義したTerraformリポジトリ 3. produce 4. export devstats.developers env service corp
https://speakerdeck.com/b4b4r07/terraform-ops-for-microservices
Deploys per Day per Developers
devstats.deploys / Day / devstats.developers
devstats.deploys / Day / devstats.developers
Agenda •Cloud Functions Go, DevStats •Cloud Functions How we use
•Cloud Functions Tips
3. Cloud Functions Tips
•Naming policy •Limitations •Dependencies Tips
Naming policy main以外なら自由
Naming policy エントリーポイントとなる関数名も自由なので、 (w, r)のシグネチャーを持つエクスポート関数が他にもある場合、 コードを見ただけではエントリーポイントかどうか分からない...
Naming policy エントリーポイントとなる関数名も自由なので、 (w, r)のシグネチャーを持つエクスポート関数が他にもある場合、 コードを見ただけではエントリーポイントかどうか分からない...
Naming policy エントリーポイントとなる関数名も自由なので、 (w, r)のシグネチャーを持つエクスポート関数が他にもある場合、 コードを見ただけではエントリーポイントかどうか分からない... =決め打ちにすると分かりやすくなる
Naming policy ちなみに、 このスタイルはGoogle/Googlerのコードでよく見られた例
Limitations ✘ Functions が Subscribe できる Pub/Sub は同じプロジェクト
Dependencies •外部パッケージの依存関係解決にはgo mod (dep)が使える •Cloud Functionsの実行環境上でgetするのは面倒なためローカルで取得して エントリーポイントが書かれた関数コードと一緒にアップロードする
Wrap-up!
•マイクロサービスの成果を測るために DevStats という仕組み をCloud Functions ✕ Goで作った •「推測するな、計測せよ」のプラクティスはコードだけでなく アーキテクチャにも Conclusion
We're hiring! @b4b4r07