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
GoogleCloudFunctionsでHTTPフックなGoスクリプトを書く / Writ...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
convto
March 20, 2019
Technology
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
GoogleCloudFunctionsでHTTPフックなGoスクリプトを書く / Write HTTP hook Go script with GoogleCloudFunctions
google cloud functions 触ったメモ
convto
March 20, 2019
More Decks by convto
See All by convto
monorepo の Go テストをはやくした〜い!~最小の依存解決への道のり~ / faster-testing-of-monorepos
convto
2
670
詳解!defer panic recover のしくみ / Understanding defer, panic, and recover
convto
0
380
MCPと認可まわりの話 / mcp_and_authorization
convto
2
1.6k
バクラクの認証基盤の成長と現在地 / bakuraku-authn-platform
convto
4
2.2k
gob バイナリが Go バージョンによって 出力が変わることについて調べてみた / Investigating How gob Binary Output Changes Across Go Versions
convto
0
170
Go 関連の個人的おもしろCVE 5選 / my favorite go cve
convto
3
590
バイナリを眺めてわかる gob encoding の仕様と性質、適切な使い方 / understanding gob encoding
convto
6
3.4k
みんなでたのしむ math/big / i love math big
convto
0
350
Go1.22からの疑似乱数生成器について/go-122-pseudo-random-generator
convto
2
1k
Other Decks in Technology
See All in Technology
toB プロダクトから見たWAF
tokai235
0
260
コミュニティの有益性 ~JAWS Days 2026 での体験を通して~ / The Benefits of a Community ~Through My Experience at JAWS Days 2026~
seike460
PRO
0
310
product engineering with qa
nealle
0
100
從開發到部署全都交給 AI:實作 AI 驅動的自動化流程
appleboy
0
190
次世代ランサムウェア対策の考察 / 20260704 Mitsutoshi Matsuo
shift_evolve
PRO
3
1k
AI時代における最適なQA組織の作り方
ymty
3
260
IaC コードを資産へ:AWS CDK 社内ライブラリと横断展開 / aws-summit-japan-2026
gotok365
10
1.7k
AI-DLCを “そのまま導入しなかった”話 ~組織に合わせてアジャストした 私たちの実践共有~
hiroramos4
PRO
1
460
「勝手に広まる」人気 AI エージェントを爆速で作ろう!(AWS Summit Japan 2026講演資料)
minorun365
PRO
10
2.7k
Kotlin 開発のツラミを爆破した話! / Explode the difficulty of Kotlin dev!
eller86
0
120
Multi-Agent並列開発を 安全に回すための技術 / Technology for Safely Multi-Agent Parallel Development
tooppoo
0
230
データレイクの「見えない問題」を可視化する
sansantech
PRO
1
250
Featured
See All Featured
Docker and Python
trallard
47
3.9k
Side Projects
sachag
455
43k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
67
55k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
450
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
How to train your dragon (web standard)
notwaldorf
97
6.7k
Ruling the World: When Life Gets Gamed
codingconduct
0
270
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
Transcript
GoogleCloudFunctionsでHTTP フックなGoスクリプトを書く 2019/03/20(水) Makuake LT Party #11
convto jisibari Twitter: @convto Github: convto 2
もくじ - GoogleCloudFunctionsって? - Go1.11ランタイムが最近出た! - Slack slach command をつくった!
- 嬉しかったこと - 困ったこと - まとめ
もくじ - GoogleCloudFunctionsって? - Go1.11ランタイムが最近出た! - Slack slach command をつくった!
- 嬉しかったこと - 困ったこと - まとめ
GoogleCloudFunctionsって? - Runtimeもnodeとかpythonとかgoとか似たようなも ん - Lambdaみたいにプロバイダ側のマネージドサービ スとかの Event hook で動かせる
- Log はstackdriver(cloudwatchみたいなやつ)に飛ば します
GoogleCloudFunctionsって? - Runtimeもnodeとかpythonとかgoとか似たようなも ん - Lambdaみたいにプロバイダ側のマネージドサービ スとかの Event hook で動かせる
- Log はstackdriver(cloudwatchみたいなやつ)に飛ば します lambdaのGCP版
GoogleCloudFunctionsって? - Runtimeもnodeとかpythonとかgoとか似たようなも ん - Lambdaみたいにプロバイダ側のマネージドサービ スとかの Event hook で動かせる
- Log はstackdriver(cloudwatchみたいなやつ)に飛ば します lambdaのGCP版 https://cloud.google.com/functions/feature s/
コンソールはこんな感じ
コンソールはこんな感じ Goがコンソールで書ける!
めっちゃうれしい(lambdaはできない)
もくじ - GoogleCloudFunctionsって? - Go1.11ランタイムが最近出た! - Slack slach command をつくった!
- 嬉しかったこと - 困ったこと - まとめ
None
None
2019/1/17
2019/1/17 めっちゃ最近!!!
lambdaとの違い - デプロイするのがソースコードzip(lambdaはバイナ リzip) - 作った関数がGoogleCloudFunctions側のmain関数 から呼ばれる(lambdaはユーザーがmainを書く) - 依存の解決とかもGCF側でやる
lambdaとの違い - デプロイするのがソースコードzip(lambdaはバイナ リzip) - 作った関数がGoogleCloudFunctions側のmain関数 から呼ばれる(lambdaはユーザーがmainを書く) - 依存の解決とかもGCF側でやる GCFの方は、自分で書くスクリプトは
あくまでパッケージとして提供する
lambdaとの違い - デプロイするのがソースコードzip(lambdaはバイナ リzip) - 作った関数がGoogleCloudFunctions側のmain関数 から呼ばれる(lambdaはユーザーがmainを書く) - 依存の解決とかもGCF側でやる GCFの方は、自分で書くスクリプトは
あくまでパッケージとして提供する package名はmainだとダメ 起動する関数は大文字スタートじゃなきゃダ メ(exportしないとエラー)
さわってみたい!(触ってみました)
もくじ - GoogleCloudFunctionsって? - Go1.11ランタイムが最近出た! - Slack slach command をつくった!
- 嬉しかったこと - 困ったこと - まとめ
作ったやつ(DEMO)
つくったやつ - custom emoji manager - help機能(hidden message) - list機能(hidden
message) - stamp機能
Slack slash command にした理由 - ざっくりAPI立ててすぐに使える - とはいえこいつのためにサーバー借りるとかはだ るい -
粒度がちょうどFaaSに向いてそう!!
ざっくりやってるこ - 入力を見てhelp, list, stampのいずれかを実行 - listは emoji.list とかでとってる -
stampは chat.postMessage とか chat.postEphemeral とかを使ってる
ざっくりやってるこ - 入力を見てhelp, list, stampのいずれかを実行 - listは emoji.list とかでとってる -
stampは chat.postMessage とか chat.postEphemeral とかを使ってる SlackAPI: https://api.slack.com/web
もくじ - GoogleCloudFunctionsって? - Go1.11ランタイムが最近出た! - Slack slach command をつくった!
- 嬉しかったこと - 困ったこと - まとめ
HTTPホックの関数を作りやすい - Lambdaだとapi-gatewayとかALBをつくって紐づける 必要がある - CloudFunction は関数作成時にすごく雑に選択し て作れる
None
もしかしたら内部的には LB的なのを自動生成してるのかも... (まだ追ってないです)
net/http.Handlerで処理かける - 普通のハンドラ関数書くのと同じ書き方でかけ る! - requestからの情報の取り方、responseの返し方ま で同じ! - Middleware, ライブラリなど、net/httpにまつわるエ
コシステムに乗れる!
None
ハンドラ書くのと全く同じ
ちなみにlambdaだと
ちなみにlambdaだと net/http系の資産をうまく使うために こういうプロジェクトもあるらしいです https://github.com/awslabs/aws-lambda-g o-api-proxy
もくじ - GoogleCloudFunctionsって? - Go1.11ランタイムが最近出た! - Slack slach command をつくった!
- 嬉しかったこと - 困ったこと - まとめ
ひとつめ
どうしても複数ファイル構成でデプロイできない - ドキュメントをしっかり見てサンプル構成に合わせ てもできない - HTTP + Go の構成だと相性が悪いのかもしれない (まだbetaだし仕方ないかも)
どうしても複数ファイル構成でデプロイできない - ドキュメントをしっかり見てサンプル構成に合わせ てもできない - HTTP + Go の構成だと相性が悪いのかもしれない (まだbetaだし仕方ないかも)
ドキュメント https://cloud.google.com/functions/docs/c oncepts/go-runtime
どうしても複数ファイル構成でデプロイできない - ドキュメントをしっかり見てサンプル構成に合わせ てもできない - HTTP + Go の構成だと相性が悪いのかもしれない (まだbetaだし仕方ないかも)
ドキュメント https://cloud.google.com/functions/docs/c oncepts/go-runtime 仕方ないので今回は処理をまとめた パッケージを作りreleaseを切って functionからimportして対応しました
次
Go1.12系で発行したgo.modがあるとインポートできない - Go1.12で発行したgo.modはGo1.11.3以前のランタ イムでは解決できない - GoogleCloudFunctionsは多分ランタイムが1.11.3以 下 - そのためgo.modをGo1.12で発行した一部パッケー ジが使えない
Go1.12系で発行したgo.modがあるとインポートできない - Go1.12で発行したgo.modはGo1.11.3以前のランタ イムでは解決できない - GoogleCloudFunctionsは多分ランタイムが1.11.3以 下 - そのためgo.modをGo1.12で発行した一部パッケー ジが使えない
さっきの対応として作ったパッケージで 綺麗に踏み抜いた
Go1.12系で発行したgo.modがあるとインポートできない - Go1.12で発行したgo.modはGo1.11.3以前のランタ イムでは解決できない - GoogleCloudFunctionsは多分ランタイムが1.11.3以 下 - そのためgo.modをGo1.12で発行した一部パッケー ジが使えない
さっきの対応として作ったパッケージで 綺麗に踏み抜いた go本体のIssue https://github.com/golang/go/issues/30446
次
slackのemoji.listのパースが面倒
slackのemoji.listのパースが面倒 keyが動的に変わるので面倒
こんな感じでやりました
こんな感じでやりました mapで取れるっぽい
こんな感じでやりました mapで取れるっぽい 階層が多段になってもnestしたmapで 受け取れます
次
Slash comandで送られるリクエストの形式が不思議 - Postでbodyにquery形式の値が入ってる - bodyをstringで受け取った後にnet/url.ParseQuery() とかしてます - 変な感じします
こういうのがきました
もくじ - GoogleCloudFunctionsって? - Go1.11ランタイムが最近出た! - Slack slach command をつくった!
- 嬉しかったこと - 困ったこと - まとめ
まとめ - net/http.Handler で処理かけるのがかなりいい - HTTPで公開する手間がかなり少ない - デプロイは依存解決周りがまだ辛い印象 - slackのAPI、ちょっとレガシー感ある
まとめ - net/http.Handler で処理かけるのがかなりいい - HTTPで公開する手間がかなり少ない - デプロイは依存解決周りがまだ辛い印象 - slackのAPI、ちょっとレガシー感ある
単一ファイルのスクリプトで完結する 小さい処理ならめっちゃ幸せになれる
まとめ - net/http.Handler で処理かけるのがかなりいい - HTTPで公開する手間がかなり少ない - デプロイは依存解決周りがまだ辛い印象 - slackのAPI、ちょっとレガシー感ある
単一ファイルのスクリプトで完結する 小さい処理ならめっちゃ幸せになれる Goでちょっとしたスクリプト書いて APIにしたいケースならこれで決定 だと思います
今回書いたコードここに置いてあります〜 - https://github.com/srttk/cmoji - function.goをそのままGoogleCloudFunctionsに貼り 付けると動く - 雑なのでそのうち整理します(ほんまか?)
今回書いたコードここに置いてあります〜 - https://github.com/srttk/cmoji - function.goをそのままGoogleCloudFunctionsに貼り 付けると動く - 雑なのでそのうち整理します(ほんまか?) modulesで参照してるので 書き換えるたびにタグリリースしてます
今回書いたコードここに置いてあります〜 - https://github.com/srttk/cmoji - function.goをそのままGoogleCloudFunctionsに貼り 付けると動く - 雑なのでそのうち整理します(ほんまか?) modulesで参照してるので 書き換えるたびにタグリリースしてます
はやくzipでデプロイでしたい
- プレゼンテーションテーマは SlidesCarnival の ヨークプレゼンテーションテンプレー ト を利用しています クレジット表記
ご静聴ありがとう ございました