「DeNA.go #1」に参加してきた!
はじめに
今回は、「DeNA.go #1」に参加してきました♪
Youtube Liveでもライブ中継するらしい。
本日 #DeNAgo を開催します!
— DeNA Tech (@DeNAxTech) 2019年5月24日
参加者の皆さま、会場にてどうぞよろしくお願いします!
また、#DeNAgo に興味を持っていただいている皆さま、Youtube Live でのライブ中継を用意しました。
以下のURLから視聴いただけますので、本日19:25からどうぞよろしくお願いします。https://t.co/arR13dZTjk
ハッシュタグ
#DeNAgo
タイムテーブル
時間 | 内容 |
---|---|
19:00 - | 開場 |
19:25 - 19:30 | 会場説明 @imoty |
19:30 - 19:50 | 20分枠(1) @subc / 次世代タクシー配車サービス「MOV」における RailsからGo移行対応、ポーリングWebAPIのgRPC対応 |
19:50 - 20:10 | 20分枠(2) yu.kawaura / BAYSTARS におけるGoを用いたシステムリプレイス事例の紹介 |
20:10 - 20:30 | 20分枠(3) @dice_zu / Goを使いこなせる組織作りの取り組み |
20:30 - 21:30 | 懇親会 |
21:30 - | 完全撤収 |
始まる前に...
昨日の夜、PCを充電せずに寝てしまってバッテリが30%しかないという危機的状況だったので、
渋谷ヒカリエのB1Fにあるスタバでコーヒーを買って充電しました。
立ちテーブルだけど、まず充電できてよかった(TT)
DeNaさんからお弁当が!!
お弁当がある勉強会は初めてだ!
— FUMI@Python&Go&Rust (@FumiProgrammer) 2019年5月24日
DeNaさんありがとうございます🙇♂️#DeNago pic.twitter.com/7bhNyVguYM
DeNaでのGo活用実績
DeNA結構Go率高いのな #DeNAgo pic.twitter.com/cvulCGYRsV
— Shoko@6/1信州I/O報告会 (@_okohs) 2019年5月24日
セッション
次世代タクシー配車サービス「MOV」における RailsからGo移行対応、ポーリングWebAPIのgRPC対応
登壇者
subcさんのプロフィール(主催イベント一覧) - connpass
スライド
内容
登壇者について
登壇者はスクリプト言語をメインに使っていた人。Go歴は1年。
Goの利用
MOVはもともとRubyで開発していたが、Goに移行した。
Goに移行して良かったところは次の通り。
- 圧倒的なサーバスピンアップ速度
- メモリ効率の良さ
『どうやってRubyからGoに移行したか』は下記のtech blogに記載している
社内向け管理画面
以下の構成
Vue.js + Express(GAE/SE Node.js) + GAE/SE Go
テスト
テーブルテストドリブンで、 GAEのテスト高速化には以下のパッケージを使った。
APIドキュメント作成
APIドキュメントは以下のツールを使った。
結合テスト
Slackから結合テストは行った。
負荷・障害に強いシステム現実に向けてしたこと
- exponential backoff
- 負荷検証の敷居を低く
- fallback実装
Go Con Fukuokaで話すぜ!
BAYSTARS におけるGoを用いたシステムリプレイス事例の紹介
登壇者
imotyさんのプロフィール(発表イベント一覧) - connpass
スライド
内容
ベイスターズシステムリプレイスの話だ。 #DeNAgo
— いっちー (@tdall5c) 2019年5月24日
野球のファンクラブページをDeNAがリプレースするのアツいよなぁ #DeNAgo
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月24日
既存システムの課題。アカウント体系が複雑、セキュリティ基準を満たさない、拡張性が低下。これらを解決し責務を分割、キャッチアップコストが低くなるよう極力シンプルな構成に #DeNAgo
— 渋谷/オプト (@m4buya) 2019年5月24日
プロ野球のオフシーズンに開発www #DeNAgo
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月24日
開発期間。プロ野球オフシーズンに開発しオープン戦前のリリースを想定。段階的に外部連携をリリースしつつ並行開発した #DeNAgo
— 渋谷/オプト (@m4buya) 2019年5月24日
球場端末とかからも接続する先にGoのシステムあるんだね! #DeNAgo
— まっぴぃ (@mappie_kochi) 2019年5月24日
今回作ったのはBAYSTARS IDとBAYSTARS API #DeNAgo
— 178inaba (@178inaba_) 2019年5月24日
責務/ドメインに沿った分割って基本にならってて良いなぁ #DeNAgo
— abemotion (@abemotion) 2019年5月24日
個人情報生で含むクエリパラメータ怖いなw #denago
— Shoko@6/1信州I/O報告会 (@_okohs) 2019年5月24日
一部のシステムでPATCHメソッド使えないのでHTTP-Method-Override使いました #DeNAgo
— まっぴぃ (@mappie_kochi) 2019年5月24日
システム間SSOのためにOpenID Connect / OAuth2を採用。APIインターフェースとしては開発会社が多いので実装がシンプルになるようRESTで。PATCHメソッドが使えなくてHTTP-Method-Overrideを利用 #DeNAgo
— 渋谷/オプト (@m4buya) 2019年5月24日
開発時点で対応してるOpenAPI3がないので手動。。お疲れ様です。。 #DeNAgo
— まっぴぃ (@mappie_kochi) 2019年5月24日
APIインターフェース共有にはOpenAPI3で。Swagger2とJSON Schemaを検討したが、制約の表現やドキュメント生成ツールが物足りなかったりReDocを採用。今回は先にインターフェースが欲しかったのでコードから生成はしなかった #DeNAgo
— 渋谷/オプト (@m4buya) 2019年5月24日
Redochttps://t.co/1ypTadINTb
— 手塚竜太 Ryuta Tezuka (@Tzone99) 2019年5月24日
#DeNAgo
開発言語の検討。実績・メンテナンス性・採用面でバランスのよかったGoを採用。言語仕様がシンプルだし他の人材もあてにできた #DeNAgo
— 渋谷/オプト (@m4buya) 2019年5月24日
社内でGoの知見者が多いってのが良いなあ。そしてその数を把握できるところも。 #DeNAgo
— まっぴぃ (@mappie_kochi) 2019年5月24日
開発環境はDocker Compose, Realize(テストランナーやホットリロード), Glide, 開発用タスクはMakefileで管理。利用ライブラリはそんなに多くないが、独自ライブラリをいくつか作っている #DeNAgo
— 渋谷/オプト (@m4buya) 2019年5月24日
ログは1リクエスト1行がよい #DeNAgo
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月24日
"BAYSTARSにおけるGoを用いたシステムリプレイス事例の紹介"
— tweeeety (@_tweeeety_) 2019年5月24日
独自ライブラリ
・Logger
1リクエスト1行に集約したかった
・SecureString
個人情報や秘匿情報をアプリ内で扱う独自型#DeNAgo
なるほど、ロギングの時に個人情報が極力載らないように独自ライブラリでハンドリングしてるんだ。。 #DeNAgo
— まっぴぃ (@mappie_kochi) 2019年5月24日
"BAYSTARSにおけるGoを用いたシステムリプレイス事例の紹介"
— tweeeety (@_tweeeety_) 2019年5月24日
Fargate
・インフラレイヤの管理が不要
・スケーリングの管理が容易#DeNAgo
アプリケーションはDocker/Fargateで実行。構成管理にはCluster/Service/TaskDefinitionをCloudFormationで定義していて、デプロイ時には固定タグにイメージをアップロードしてECSサービス更新で #DeNAgo
— 渋谷/オプト (@m4buya) 2019年5月24日
課題と今後。リプレイス時問い合わせが多かったので開発会社向けドキュメントを拡充したい、OpenAPI3定義からコード生成したい、CI/CDやE2Eしたい #DeNAgo
— 渋谷/オプト (@m4buya) 2019年5月24日
CI/CD は今後の展望なのか。
— 選ばれし不良物件 ?: 🦆 (@duck8823) 2019年5月24日
開発スピード上げるために初期段階で入れたいよなー。
#DeNAgo
Goプロダクトのリリース後安定感は異常 #DeNAgo
— abemotion (@abemotion) 2019年5月24日
Goを使いこなせる組織作りの取り組み
登壇者
dice_zuさんのプロフィール(発表イベント一覧) - connpass
今日の #DeNAgo で「Goを使いこなせる組織作りの取り組み」について話しますhttps://t.co/cq2FfkAaJt
— daisuzu (@dice_zu) 2019年5月24日
スライド
内容
Go言語委員会! #DeNAgo
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月24日
組織の取り組みとしてガイドラインを作った。スタートラインを揃える目的。Go本体の入れ方やCloud SDKセットアップなど環境構築を標準化 #DeNAgo
— 渋谷/オプト (@m4buya) 2019年5月24日
学習コンテンツの整理いいですね #denago
— yoshd (@yoshd_) 2019年5月24日
Go組織の作り方
— nari@エンタメ系エンジニア (@fukubaka0825) 2019年5月24日
- DeNAさんは公式ドキュメントを読んだ後、社内のCodelabsが整備されている
#DeNAgo
Code Review Commentsもおすすめ https://t.co/gk6WmkDWR8 #DeNAgo
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月24日
学習コンテンツとして公式ドキュメントのほか、Codelabsや社内ドキュメントを用意。社内独自のCodelabsとしてApp Engine+Goでマイクロサービスを作る課題を用意 #DeNAgo
— 渋谷/オプト (@m4buya) 2019年5月24日
構造体のタグを整形しよう やってみよう。| golangtokyoのcodelab https://t.co/kTjvPrBuRl #DeNAgo
— たか (@happylifetaka) 2019年5月24日
Goの標準に従うこと!他の言語とか知らないよ、って感じ。良い方法は取り入れたいけどさ、標準には従おうね、って話。 #DeNAgo
— まっぴぃ (@mappie_kochi) 2019年5月24日
社内のスタイルガイド。あまり細かい規定はなく、Goの標準に従うことを強調したりツールによるチェックを必須/推奨。スタイルガイド公開したりしないのかなー #DeNAgo
— 渋谷/オプト (@m4buya) 2019年5月24日
go vetは最近のバージョンだとテストすれば勝手に実行される=当然テストしてるから通るよねって感じかな? #DeNAgo
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月24日
err.Error()を条件分岐に使わない #DeNAgo
— まっぴぃ (@mappie_kochi) 2019年5月24日
エラーハンドリングについてはパターンを紹介。https://t.co/zkkAkyWuWp あとはエラーを分岐に使わない、同じエラーを出力しない #DeNAgo
— 渋谷/オプト (@m4buya) 2019年5月24日
エラーハンドリングはこのブログも面白かった #DeNAgohttps://t.co/IZKXZGYbVb
— abemotion (@abemotion) 2019年5月24日
「引数の構造体で迷ったらポインタにしておく。フィールドが増えたときに値コピーよりパフォーマンス的に有利なのと、後から改修が楽だから」ちなみに自分は immutability を重視したいので、むしろ「迷ったら値渡し」に倒すようにしてる。#denago
— チェシャ猫 (@y_taka_23) 2019年5月24日
テストもパターンの紹介。外部に接続するにあたって設定・クライアント・処理を切り替える3パターン #DeNAgo
— 渋谷/オプト (@m4buya) 2019年5月24日
業務時間の2割くらいをGo委員会に使ってる#DeNAgo
— tockn (@Tockn_inthebox) 2019年5月24日
Go Fridayだ!! #DeNAgo
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月24日
言語としてただでさえ堅牢なのに「Go言語委員会」のパワーワード感...! #denago
— abemotion (@abemotion) 2019年5月24日
言語としてただでさえ堅牢なのに「Go言語委員会」のパワーワード感...! #denago
— abemotion (@abemotion) 2019年5月24日
どんどんGoへのアウトプットを増やしていくらしい。楽しみ!!#DeNAgo
— tockn (@Tockn_inthebox) 2019年5月24日
DeNAさん絶対にノウハウたくさんあるはず。このスライドとか何回も読んだもん #DeNAgohttps://t.co/nktnFk8hii
— abemotion (@abemotion) 2019年5月24日
「goenv は裏側の仕組みがわかりづらいのと、バージョン切り替えでオペミスが不安なので導入してない」#denago
— チェシャ猫 (@y_taka_23) 2019年5月24日
「Go Conference 2019 Spring」に参加してきた!
はじめに
It's time to GO!#gocon pic.twitter.com/oxBUGrwHmS
— 手塚竜太 Ryuta Tezuka (@Tzone99) 2019年5月17日
入館証
とても重要なお知らせです。お帰りの際は、入館証は、受け取った受付までお返しください。出た場所に箱がありますが *箱には入れないでください* #gocon pic.twitter.com/zuWDaQvp6G
— kuma @ Go Conference Tokyo Spring 2019 (@kumakumakkk) 2019年5月18日
Wantedly Techbook
Wantedly Techbookデプロイされました!!!
— Mizuki Takeuch (@amanda__mt) 2019年5月18日
一箱、机の下に眠っておりました🙇♂️ #gocon #golang pic.twitter.com/uObnnLiD6v
スピーカー特典
スピーカー特典で Gopher くんもらいました嬉しい、デスクに置きます #gocon pic.twitter.com/xRcDrAdpdM
— Kazuki Higashiguchi (@hgsgtk) 2019年5月18日
いいなぁ。欲しい。
Keynote
Thank you Katie for Keynote presentation! #gocon #Google #go pic.twitter.com/eHVWc4stG2
— Wady / Tokyo🏯 (@wady) 2019年5月18日
How a “not the greatest engineer” achieved his first contribution to Go
スライド
発表者
概要
Every engineer dream of contributing to open source projects. But it’s not easy, is it? I had the idea too, but I gave it a try and my first commit was merged to Go! Let me share my experience, it might encourage you to start the challenge. It wasn’t easy, but not as hard as you imagine!
内容
Go公式ドキュメントに「Contribution Guide」というのがあるらしい。
オススメのスライド2つ
顔合わせではなくコメントだけだし、
全て英語でコミュニケーションとらないといけないし、
勉強するのにも時間が取られる...。
ということでけ、継続的に開発していくには...
- マインドを保つのが大切
- 完璧にすることはできないんだ
ということかな?
エラー設計について/Designing Errors
スライド
発表者
概要
これこそGoにおけるエラーハンドリングのベストプラクティス。
内容
今日の「エラー設計について」はFailure is your Domainというブログ記事を参考にしながら、いくつか変更を加えた内容を話します。https://t.co/QroTtlzwgr #gocon
— morikuni (@inukirom) 2019年5月18日
エラーとは、
- エラーは処理が失敗した時に発生する
- エラーは既知のエラー(予測されるエラー)と未知のエラー(予測されないエラー、Goではpanicが起きる)がある
未知エラーを既知エラーにする
- エラーをアプリケーションの一部に組み込む
エラーに求められていること
- どうやってエラー情報を誰に知らせるか
- アプリケーション
- エラーを識別できること
- 型などで知らせる
- クライアント
- エラーを識別できること
- ステータスで返す
- エンドユーザー
- 問題を解決するヒントになるようなメッセージが含まれていること
- 運用者
- 問題の根本的な原因を調査し、解決する手助けになる情報が含まれていること
- アプリケーション
Goのアプリケーションでエラーをどのように扱う
- アプリケーション固有のエラーコードを定義し、エラーを識別する
- クライアントで使うステータスコードを使う
- 既知の外部のエラーは上で定義したエラーコードに変換する
failureというツールを作ったよ!
スポンサーセッション
クラウドサインの弁護士ドットコム
Go Conference 2019 Springにコーヒースポンサーとして協賛します #gocon https://t.co/vVDCas88y5
— Takuji Hashizume (@takujihashizume) 2019年5月18日
クラウドサインの弁護士ドットコムさん、ありがとうございます!! #gocon pic.twitter.com/jtmEmzzIpr
— micchie ʕ•ᴥ•ʔ (@micchiebear) 2019年5月18日
freee
Go Conference 2019 Spring開催!freeeはお水のスポンサーさせていただきました。 13:20からのスポンサーセッションも登壇しますので是非ご覧下さいませー🤓 #gocon pic.twitter.com/yuqLpTgD98
— 【公式】freee Developers (@freeeDevelopers) 2019年5月18日
freeeのマイクロサービス構成について説明した去年のアドベントカレンダーです。https://t.co/lxp1vaQXY5 #gocon #gocon_hall
— Yoichiro Shimizu (@budougumi0617) 2019年5月18日
H3 (S): 標準パッケージのみで大量のPNG画像をいかに高速に処理するか
スライド
発表者
概要
Goの標準パッケージimage/pngを愚直に使って大量のPNG画像を処理すると、非常に遅い。 そこでサンプルのソースコードに対して、プロファイリングツールのpprofを用い、どの関数がボトルネックになっているかを調査します。 そして、「ボトルネックの発見」と「ソースコードの修正」を繰り返しながらインクリメンタルに処理を高速化する例を示します。
内容
アドテクスタジオ、Scala 中心かと思ってたけど広告画像処理周り?には Go を使っているという事なのかな。 #gocon #gocon_hall
— ザネリ (@so_zaneli) 2019年5月18日
去年は学生スカラーシップでGoConに参加して今年は就職して発表者としてGoConに参加されているということ。嬉しい話しだ!q@w@p #gocon #room_hall
— Ryuji Iwata (@qt_luigi) 2019年5月18日
- プロファリングツール
- 今回は、runtime/pprof を使った
プロファリングした結果、
image/png.filterで時間がかかっていることがわかった(全体の実行時間の1/7を使っていた)
- フィルタの種類
- None
- Sub
- Up
- Average
- Paeth
ただ、image/png.filterは標準パッケージなので、 ここのボトルネックは解決できないので次に時間がかかっているところを調べ、 ボトルネックを解消したことで速度が2倍になった。
compress/flateが3番目に重かった。
圧縮レベルを調整できる。
image/png.CompressionLevel
- DefaultCompression
- NoCompression
- BestSpeed
- BestCompression
画像処理の高速化が題材だけどやってることはpprofで計測、時間かかってる処理のうち改善できそうな処理をみつけ直すという愚直な取り組みでよい。どこでも応用できそうな話だし為になった。そして新卒でめちゃ若いしおまけでしれっとGoにコントリビューとしててすごい。(語彙力)
— yusuke misawa (@FpmpAmpm) 2019年5月18日
#gocon_hall
runtime/pprof で堅実にパフォーマンスチューニングと、過程で公式ライブラリにコントリビューション。すごい #gocon #gocon_hall
— ぶーやー (@tyabu12) 2019年5月18日
A4 (S): Design considerations for container-based Go applications
スライド
発表者
概要
Go言語でのアプリケーション開発で、特にコンテナを前提とする場合の設計考慮点について話します。 例えば、Go言語でAPIを開発する場合、コンテナとして動かすことを前提とするケースが多いと感じます。コンテナベースで動かすことを前提とした場合、コンテナイメージ作成・アプリケーション監視において、考慮すべき点が出てくるでしょう。このトークでは、Go言語での実装にまで踏み込んだ上で、コンテナベースアプリケーションにおける設計の考慮点について話します。
内容
https://t.co/LrtC5IUl6Y #gocon #gocon_a
— さかぐち (@ysakaguch1) 2019年5月18日
これかhttps://t.co/FHQFsDWIwl#gocon_a
— jon (@jon_ground) 2019年5月18日
入門 監視 ―モダンなモニタリングのためのデザインパターン Mike Julian https://t.co/NmVtnVt8CC #gocon #gocon_a
— さかぐち (@ysakaguch1) 2019年5月18日
zapを使って、JSON形式のログを吐き出すhttps://t.co/tEk4lWLNdX#gocon #gocon_a
— しょうちゃん (@xioota) 2019年5月18日
checkとdeep check、livenessとreadiness的な話で良いのかな。https://t.co/Me1tmQIQNr#gocon #gocon_a
— はずみ (@hazumirr) 2019年5月18日
H5 (L): Writing Go Analyses with go/analysis (from Go Team)
スライド
発表者
Michael Matloob
概要
The Analysis API is used to write analyses (like those in go vet and go lint) that canhelp surface bugs and show code improvements to users. I’ll show how to use andwrite analyses, and see their results, so you can help improve your code quality.
内容
今日プレゼン内で出てきたソースコード
Great talks from my teammates Julie (about Go package discovery) and Michael (about Go analysis)!! #gocon @matloob @JQiu25 pic.twitter.com/bk5MryTS13
— Katie Hockman (@katie_hockman) 2019年5月18日
今日プレゼン中に起きたこと
プレゼン者のPCがバッテリー切れ&カーネルパニック
バッテリ切れはあるけど、カーネルパニックが起きるのはなかなかないから、
そういう意味でも貴重な公演だった!
Kernel panic, Everyone panic #gocon_hall
— Ruins (@C_Ruins) 2019年5月18日
お祭り感のあるハプニングだな〜w #gocon #gocon_hall
— mafuyuk (@mafuyuk_m) 2019年5月18日
#gocon_hall #gocon 電池が死につつカーネルパニックを起こす登壇者
— ゆいな (@yuina1056) 2019年5月18日
プレゼン解説ツイート群(ほぼ全て上田さんのツイート)
go/analysisの話を聞きに来たぞ! #gocon #gocon_hall
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月18日
レシーバがポインタじゃない #gocon #gocon_hall
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月18日
diagnosticsの正しい発音を聞いた #gocon #gocon_hall
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月18日
ASTですね #gocon #gocon_hall
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月18日
go/analysisでAnalyzerを作るなら https://t.co/ClO4sBC8Hb を使うと簡単にできます! #gocon #gocon_hall
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月18日
inpsectorでASTを簡単に探索できます。フィルターにセットした型のASTのノードだけが渡されます #gocon #gocon_hall
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月18日
自分以外がgo/analysisの発表するのテンションあがるね #gocon #gocon_hall
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月18日
cmp.Equalsに渡された引数が同じ型かどうかをチェックするAnalyzerの話を聞いている。まずはASTから関数呼び出し(CallExpr)を探して、渡されている引数を探し、その型を型情報から取得して同じ型か調べている #gocon #gocon_hall
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月18日
もっと一般化しよう。cmp.Equalsだけではなく、同じ型を取らないといけない場合にアノテーションを仕掛けたらチェックするようにする。 #gocon #gocon_hall
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月18日
アノテーションはannotationパッケージのSameType関数を用いる #gocon #gocon_hall
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月18日
Factを使いましょう。 #gocon #gocon_hall
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月18日
Factの使い方はhttps://t.co/WgLPKFRz15 あたりを見ると分かる #gocon #gocon_hall
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月18日
Factはインタフェースなので、AFactというメソッドを実装すればよい(中身はなくていい) #gocon #gocon_hall
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月18日
Factの型ってexpternalにしないと思うんだけど、してもいいのかな? #gocon #gocon_hall
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月18日
関数にFactを関連付けるために、まずはアノテーション用の関数呼び出し(annotation.SameType)を探して、その関数が呼び出されている関数を発見する(引数が同じ型である必要があるもの)。そして、見つけた関数にFactを関連付ける。 #gocon #gocon_hall
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月18日
Factで内部でannotation.SameTypeを呼び出している関数ということを印を付けておいて、あとでその関数を呼んでるところを調べるという手順ですね #gocon #gocon_hall
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月18日
Analyzer作っただけではだめなので、解析対象のファイルとかをとってくる必要があります。そのためにはsinglecheckerパッケージやunitcheckerパッケージ、multicheckerパッケージを使う必要がある #gocon #gocon_hall
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月18日
今からgo/analysisを始める方はこちらもどうぞ。https://t.co/2Ue6gKkMrv #gocon #gocon_hall
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月18日
備考
今日の話、メルカリの上田さんの記事や「Mercari Engineering Blog」に書かれていた。
B6 (S): GoでAPIサーバをはやくつくる
スライド
発表者
概要
クリーンアーキテクチャで依存関係を整理しつつ、コード生成(wire, grpc, xorm, gotests, implなど)を利用してGoでAPIサーバを作る方法を説明します
内容
今日は #gocon 「B6 (S): GoでAPIサーバをはやくつくる」で発表します。アーキテクチャを考えつつ、gRPC-Webやwireなどなどを活用して自動生成で楽をする話です。サンプルアプリはブログにあります。https://t.co/MRFoR1qW5ohttps://t.co/fqppyot5sA
— Jumpei Takiyasu (@juntaki) 2019年5月18日
参考
サーバサイドだとやはりこうするよね
— そな太 (@sonatard) 2019年5月14日
> Application層からWeb層にDomain層のオブジェクトを返却https://t.co/yCtbpKJ0Dj
H7 (S): We want AWESOME CLI tool & development
スライド
発表者
概要
golang と言えば CLI ツール、CLI ツールと言えば golang、といった純粋想起が醸成されつつあります。初学者から達人まで、あらゆる Gopher が CLI ツールを開発し、CLI ツールの開発は難しくないと思われがちです。しかし、「優れた」設計・テスト・UI・ビルド・リリース・アップデート・CI・ドキュメンテーションなど、「より」CLI ツールを洗練するために考慮すべき点はあります。一方でその知見はあまり集合知として語られず、「達人」であっても疎かになっている点はあります。そこで今回は CLI ツール開発の包括的知見を紹介したいと思います。
内容
CLIのテストは標準のos/execやlogパッケージのテスト手法をまねるとよい #gocon #gocon_hall
— yusuke misawa (@FpmpAmpm) 2019年5月18日
「Hashicorpのミッチェルさん」
— mafuyuk (@mafuyuk_m) 2019年5月18日
創業者w
#gocon #gocon_hall
errorのtypeによってExitCodeを分ける、なるほど #gocon #gocon_hall
— n (@NoahOrberg) 2019年5月18日
goldenファイルの話はこのスライドがよい https://t.co/Lp3iGyEoxd #gocon #gocon_hal
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月18日
https://t.co/kSv5sVVKmS
— FUMI@Python&Go&Rust (@FumiProgrammer) 2019年5月18日
#gocon
Go1.12でホームディレクトリ取る関数が追加されたはず。 https://t.co/jHujvrf2Ei #gocon #gocon_hall
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月18日
メモ
B8 (L): CPU, Memory and Go
スライド
発表者
概要
基本的なCPUやメモリを簡単に触れ、Goの最適化、コンパイラの最適化、Goで実装したときのCPUやメモリの振る舞いを紹介します。 またこれら最適化の様子やパフォーマンスを実際にGoの標準ツールを使いながら確認していきます。
内容
集積回路の数が増えても冷却が限界だからパフォーマンスは横這い #gocon_b
— うじまる🐔 (@uzimaru0000) 2019年5月18日
ハードウェアの性能限界が来ているからそれ以外の高速化が必要な時代#gocon_b #gocon
— はちぼー/エンジニア&カメラマン (@hachiblog) 2019年5月18日
これだね!https://t.co/z40VDcSS3g#gocon #gocon_b
— FUMI@Python&Go&Rust (@FumiProgrammer) 2019年5月18日
Other Session
Hacking Go Compiler Internals
スライド
発表者
概要
Since the previous talk at Go Con 2014 Autumn, lots of things in the internals have changed. In this talk, I will try to give an overview of Go compiler internals and update the information as much as possible, along with my new hacks.
Case studies of designing developer friendly libraries
スライド
発表者
概要
ライブラリやツールなど、自分以外の人間が「ユーザ」となる開発では、その Interface / Experience が重要であり、生産性や開発の楽しさにも直結します。本セッションでは、自身のこれまでの経験・まわりからのフィードバックから集めた、Developer にとってより良い Interface / Experience なライブラリ・ツールを作るための Tips や考え方を紹介します。
Golang JP Google+ Community Survey Results
スライド
発表者
概要
Golang JP Google+ Community was closed on April 2, 2019. There were about 950 posts in 8 years and 4 months. I surveyed these posts as the last work of a coordinator. Let’s look back on trends and events of Go in Japan from this survey results! q@w@p
Security Scan for golang Using Open Source
スライド
Not found.
発表者
メモ
Better asset bundling tool than the best
スライド
発表者
概要
I am creating new asset bundling tool. It will have some new features that the existing tools don’t have
Subee: Pub/Sub Worker Framework Implementation
スライド
発表者
概要
マイクロサービス間で非同期処理を実現するために,メッセージキュー(Google Cloud Pub/Sub,Apache Kafka…etc)を用いた方法などが存在します.メッセージをキューと呼ばれる領域に保持し,メッセージを取得する側の処理が完了するのを待たずに次の処理を実行できるといった特徴があります.メッセージを取得する側では,単一メッセージまたは,複数メッセージを扱うWorkerを実装する必要があります.そこで,これらの要件を満たす,Pub/Sub Worker FrameworkであるSubeeを開発しました.本セッションでは,実装時に意識したこと,実際の利用方法について紹介します.
Goによる外部プロセス起動ベストプラクティス及びtimeoutパッケージ徹底解決
スライド
発表者
概要
Goで外部プロセスを起動する方法をシステムプログラミングにまで踏み込んで解説します。また、外部コマンドのタイムアウトを正しくハンドリングするための、github.com/Songmu/timeoutパッケージの解説もおこないます。これはGNU timeoutのGo portingですが、GNU版との差異についても解説します。
Gopherと行く Langな旅
スライド
発表者
概要
Go書こうかなぁどう書いたらいいんだろう? 新しく言語書きたいけど、Goではああいう書き方できるのかな? の疑問・不安を解決します
煩雑な運用をGoを使って楽にする
スライド
発表者
概要
プロジェクトを運用していると日々様々なタスクが発生します 例えばExcelでやりとりされるデータを適切に処理する必要があったり、Google Driveに保存してあるファイルを処理しつつバージョン管理する必要があったり、特定のファイルを大量に生成する必要があったり などです そんなGoで開発/運用されているのプロジェクトで起きた課題をどのように解決し、またその過程で嵌った点などを紹介できればと思います
Go1.9 で作られた App Engine のサービスを Go1.11 に移行した話
スライド
発表者
概要
GAE/Go1.9 で運用されてきた MicroServices で作られたプラットフォームサービスを GAE/Go1.11 に移行する中で得た知見を紹介します。
Expand observability in Go
スライド
発表者
概要
Go standard toolkit provides benchmark, tracer and profiler out of the box and its ecosystem provides those extensions that fit large-scale systems. In this talk, I’ll introduce how you can start implementing performant applications with standard tools, and how you can expand it to larger scale app.
Design pattern for Image and text composition in Go
スライド
Not found.
発表者
[https://twitter.com/search?q=timakin&src=typd:embed:cite]
概要
Owing to sophisticated standard or semi-standard packages, Go lets you process image and text composition so simply. However, a lot of references show only how to simply process images. In my talk session, I will explain one of a design pattern to combine them flexibly depending on a real business.
Dive into Buildkit LLB with Go
スライド
発表者
概要
Dockerに正式統合されたBuildKitをGoで扱う方法について発表します。
BuildKit は Goで実装されている為、Goのソースコードを読むことでGoを使ったDockerfile解析ツールや、独自のBuildKit LLB frontendを作成できます。
今回の発表ではGoでどのようにBuildkitが記述されているかをコードを追いながら、Goを使ったDoコンテナイメージフロントエンドの解析ツールの作り方や、独自のコンテナイメージフロントエンドの作り方にも触れて行く為、Goでコンテナ技術を理解する大きな1歩になるでしょう。
内容
先ほど「Dive into Buildkit & LLB with Go」という発表をしました。少し最後駆け足でした。。僕のQiitaにこの辺を詳しく追った記事があるのでそれをみていただけると幸いです。#gocon #gocon_hallhttps://t.co/w6hubXT3Sm
— po3rin (@po3rin) 2019年5月18日
Building FIDO2 server in Go
スライド
発表者
概要
FIDO2 (WebAuthn) is an authentication standard which enables passwordless authentication. I’ll introduce the mechanism of FIDO2 and how we can implement its server-side processing, especially the signature algorithm, in Go. I’ll also mention its integration with existing API servers written in Go.
Golang で Dockerベース のCIを作る
スライド
発表者
概要
Continuous Integration (CI) は開発者にとってなくてはならないものですが、 CI定義などの学習/メンテナンスのコストや、ローカル開発環境との差分に悩まされることもあります。 そこで、Dockerfile のみで定義を行うCIサーバーを開発しています。 GolangにはCIサーバーの開発に必要な機能を実現するための仕組みが数多く備わっており、本発表ではそれらについて紹介したいと思います。
database/sql入門
スライド
発表者
概要
これから始める人のためにdatabase/sqlパッケージの使い方をまとめます。 アプリケーションコード内での使い方だけではなく、環境構築方法、マイグレーション方法、単体テストや結合テスト、CI上でのテストの仕方も紹介します。以下のような気持ちの初心者にオススメです。
GoでDB操作したいけどどこかに情報まとまってない?
DB操作するコードってどうやってテストコード書けばいいの?
Fuzzy finder as a Go library
スライド
発表者
概要
fzf や peco のような、インタラクティブにリストから特定の要素を検索・選択できるようなツールの登場は、コマンドラインにおける表現をより一層豊かにさせました。しかし、行指向には限界があり、こういった fuzzy finder はその能力を十分に発揮することができていません。このセッションではコマンドライン fuzzy finder が抱える問題を説明し、その問題を fuzzy finder をライブラリとして提供することで解決することを試みた話をします。
JavaプログラムをGoに移植するためのテクニック――継承と例外
スライド
発表者
概要
Javaプログラムの設計や構造をそのままGoに移植しようとするとき、言語構造の違いに直面します。 Javaではクラスによるオブジェクト指向と例外機構が標準的に使われますが、Goでは構造体とインターフェイスを用いる他、例外機構ではないエラーハンドリングによって、元のJavaプログラムと同等の機能を実現する必要があります。 ここでは、ZXingというJavaのバーコードライブラリをGoに移植しているgozxingプロジェクトの経験から、Javaプログラムの特に継承と例外について、Goでどのように実現したかを紹介します。
Building Modules Discovery (from Go Team)
スライド
Not found.
発表者
Julie Qiu twitter.com
概要
At some point, we all find ourselves wanting to use a third-party Go package in our Go code. This talk discusses strategies for discovering, evaluating and maintaining Go packages and modules. It also shares new tools that the Go team is building to make this process better.
内容
Speaker of the day: Julie Qiu is leading the project to build the Go discovery site for modules at the @golang team at @Google, and she graduated @Yale with a degree in Cognitive Science.@JQiu25 will talk about Building Modules Discovery!#gopherconEU #golang #gophers pic.twitter.com/SWeV0f1pn9
— GopherCon Europe (@gopherconeu) 2019年4月2日
Great talks from my teammates Julie (about Go package discovery) and Michael (about Go analysis)!! #gocon @matloob @JQiu25 pic.twitter.com/bk5MryTS13
— Katie Hockman (@katie_hockman) 2019年5月18日
Implementing Quota as a Service
スライド
発表者
概要
Quota、あるいはRate Limitという単語を聞いたことがありますか?あるサービスのリソース単位の割当量をQuota、その中でも特に、APIのリクエスト数など、ある一定時間に対してかけられた制限をRate Limitなどと呼びます。本セッションでは、Quota as a Serviceを実装するに至った経緯や、実際に実装していくにあたって検討したアルゴリズムやOSSとして公開されているQuotaライブラリについて紹介・解説、実装で考慮する必要があった課題とその解決についてお話します。
Dark side of the reflect
スライド
www.slideshare.net
発表者
概要
Golang has a feature called reflect. Generally, it is said that using reflect is antipattern, but sometimes we face the scene to use it. This talk will describe the golang’s reflect function through the experience of writing ORM from scratch using reflect in our products.
スポンサーセッション
Go Quiz
スライド
発表者
gobpfでPostgreSQLを動的トレーシングする
スライド
発表者
標準パッケージにおけるテストでの利用例から学ぶ testing.quick パッケージ
スライド
発表者
SQLFormatter written in Go
スライド
Not found.
発表者
Event Sourcing with Go
スライド
発表者
[https://twitter.com/garsue:embed:cite]
俺はビッグエンディアンでテストがしたいんだ!!!(How to test on BigEndian arch on Travis CI)
スライド
発表者
システムライブラリに依存しないlessコマンドAPIの簡易版を作った
スライド
発表者
Other memo
ダークサイドを覗きに来た。DeNA ってデナって読むのか #gocon_c #gocon
— Yusuke Hatanaka (@hatajoe) 2019年5月18日
初めて聞いた #gocon #gocon_c
— ぷらす (@plus_kyoto) 2019年5月18日
» attic-labs/noms: The versioned, forkable, syncable database https://t.co/N74qFYvRTR
ライブラリを導入する際って複雑さの増加みたいなものも考慮すべきかなと思ってる #gocon #gocon_hall
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月18日
importパスが同じなら後方互換を保たなければならない #gocon #gocon_hall
— tenntennʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2019年5月18日
「Go Conference 2019」参加スケジュールメモ
はじめに
「Go Conference 2019 Spring」に参加中!
聞きたいセッションがたくさんあるけど、
とりあえず参加すると決めたセッションをメモ書き!
参加テーブル
Time | Session |
---|---|
10:10 - 11:00 | Keynote |
11:10 - 11:30 | B1 (S): How a “not the greatest engineer” achieved his first contribution to Go |
11:35 - 11:55 | B2 (S): エラー設計について/Designing Errors |
13:45 - 14:05 | H3 (S): 標準パッケージのみで大量のPNG画像をいかに高速に処理するか |
14:10 - 14:30 | A4 (S): Design considerations for container-based Go applications |
14:35 - 15:15 | H5 (L): Writing Go Analyses with go/analysis (from Go Team) |
15:50 - 16:10 | B6 (S): GoでAPIサーバをはやくつくる |
16:15 - 16:35 | H7 (S): We want AWESOME CLI tool & development |
16:40 - 17:20 | B8 (L): CPU, Memory and Go |