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
HowToIntroduceGo
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
y_matsuwitter
August 18, 2015
Programming
800
5
Share
HowToIntroduceGo
dots.主催Go言語勉強会にて「如何に組織にGoを導入するか」
y_matsuwitter
August 18, 2015
More Decks by y_matsuwitter
See All by y_matsuwitter
Building Products in the LLM Era
ymatsuwitter
11
13k
Product Utilization of Large Language Models Starting Today
ymatsuwitter
3
3.3k
経営・意思・エンジニアリング
ymatsuwitter
23
22k
LLM in 2023 and 2024
ymatsuwitter
8
6.2k
Turbulent Technological Changes and Career Strategies
ymatsuwitter
2
3.1k
LLM in toB Service and Its UX
ymatsuwitter
7
12k
Agent and small LLM validation
ymatsuwitter
7
3.1k
Information management for a culture of speed: The story of Notion and LayerX
ymatsuwitter
4
11k
Monorepo on AWS
ymatsuwitter
0
370
Other Decks in Programming
See All in Programming
決定論 vs 確率論:Gemini 3 FlashとTF-IDFを組み合わせた「法規判定エンジン」の構築
shukob
0
150
AgentCore Optimizationを始めよう!
licux
3
100
PHPer、Cloudflare に引っ越す
suguruooki
1
130
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
340
【26新卒研修資料】TDD実装演習
dip_tech
PRO
0
160
エラー処理の温故知新 / history of error handling technic
ryotanakaya
7
1.8k
SREに優しいTerraform構成 modulesとstateの組み方
hiyanger
2
160
Agentic Elixir
whatyouhide
0
440
Back to the roots of date
jinroq
0
660
CDK Deployのための ”反響定位”
watany
5
930
Claude Code × Gemini × Ebitengine ゲーム制作素人WebエンジニアがGoでゲームを作った話
webzawa
0
210
Running Swift without an OS
kishikawakatsumi
0
880
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.4k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
370
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
130
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
130
Crafting Experiences
bethany
1
140
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
350
Raft: Consensus for Rubyists
vanstee
141
7.4k
A better future with KSS
kneath
240
18k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
The Language of Interfaces
destraynor
162
26k
Why Our Code Smells
bkeepers
PRO
340
58k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9k
Transcript
如何に組織にGoを導⼊入するか @y_̲matsuwitter, Gunosy Inc. 2015.8
2 ©Gunosy Inc. 本⽇日のアジェンダ n ⾃自⼰己紹介 n 導⼊入: 新技術の導⼊入に失敗した話 n
GunosyのGo導⼊入の歴史(2014年年3~∼現在) n Go導⼊入にあたって n 最後に
3 ©Gunosy Inc. ⾃自⼰己紹介 n Gunosy Inc. – 開発本部執⾏行行役員 n
業務 – 開発全般のマネジメント – Go⾔言語布教係 n 担当(過去) – iOS/Android – Web – Infrastructure(AWSのみ) n 最近の興味 – Microsoft Azure製品郡 松本 勇気 @y_̲matsuwitter
4 ©Gunosy Inc. Dockerエキスパート養成読本 好評発売中
5 ©Gunosy Inc. Gunosyについて n 情報キュレーションサービス – iOS/Androidアプリ – Web
n 現在1000万DL突破 n Go⾔言語を1年年半前に導⼊入
6 ©Gunosy Inc. 導⼊入: 新技術導⼊入失敗の話
7 ©Gunosy Inc. Docker導⼊入の話 Chefの代わりとしてのDocker l 1サーバ1コンテナ l Supervisorによる複数プロセスの実⾏行行 DeploymentもDockerで実施
l WebAppをdocker build l 各サーバにfabコマンドにてdocker pull & docker run 全てのサーバをDockerでホスティング l Including Redis, mongodb … etc 2014年年4⽉月、Gunosy海外版の開発でDockerを導⼊入
8 ©Gunosy Inc. Docker導⼊入の話② 学習コストの課題 l コンテナという独特な概念念 l docker関連の動作を理理解することのコスト 解決しようとしている課題が不不明瞭だった
l ChefやAMIでも⼗十分解決可能 l Dockerらしい解決策は特にとれていない状況で、メンテナンス コストだけは⾼高い状態 結論論として⼤大失敗 ⽬目的が不不明瞭なままでの導⼊入に成功はない
9 ©Gunosy Inc. GunosyのGo導⼊入の歴史(2014年年3~∼現在)
10 ©Gunosy Inc. テレビCMの開始 1 Ruby on RailsとSinatraベースのAPI 3 ⼤大幅なUI変更更
2 2014年年3⽉月に控えていた問題 n これまでとは⽐比にならないユーザー獲得の可能性 – サーバ全体の性能を上げる必要 n 配信するデータ量量の⼤大幅増加 – ユーザーが⾒見見れる記事数が数倍以上 n 通知の配信頻度度も増加 n 1台あたり200req/sec – 将来に備え1000req/sec程度度まで性能を上げておきたい n 費⽤用をかけることでスケールする可能性 – ただし、費⽤用分の運⽤用を回すリソースは不不⾜足気味(インフラエンジニア0名) 短期間・少リソースで性能を向上させる必要性 当時の社内サーバでは性能が⼤大きく不不⾜足していた。
11 ©Gunosy Inc. Go導⼊入の決定と理理由 n ⽐比較的安定して多くの リクエストを捌いた n Goroutineとchannelに よる⾮非同期処理理の楽さ
n CPUの使い切切りやすさ n ⽐比較的省省メモリ ⾼高パフォーマンス n 依存関係は全てバイナ リに含まれる n クロスコンパイルによ り、⼤大抵のマシン上で 動作する 独⽴立立性の⾼高さ n Einhornなどと組み合わ せ安全な再起動 n GoogleやSoundcloud による運⽤用実績 n Githubでのライブラリ 増加数が急増 => 利利⽤用 も増えてるといえる 安定運⽤用の実績 少リソースでの性能改善を期待、導⼊入 Nginx-‐‑‒luaやHaskell、node.jsなどと⽐比較しつつ簡易易なロジックを実装・評価
12 ©Gunosy Inc. 初期、どのように導⼊入したか サーバ台数を増やすこと無くユーザー増加に対応 n NginxにてGoとRailsを振り分け – アクセスの多いパスのみGoへ移植 n
デプロイはfabricベース – コンパイル済みバイナリを配置 – Einhornを再起動 n プロセスキャッシュ – ⾼高頻度度に必要なデータをプロセス上に配 置、⾼高速に返す 既存のRailsサーバを残しつつの運⽤用へ。 Nginx Rails Golang MySQL Redis ELB
13 ©Gunosy Inc. 社内勉強会の開催 1 開発フローの整備 3 開発ツールの布教 2 社内での利利⽤用を増やすための取り組み
n Go標準パッケージについての勉強会 – 毎週持ち回りで発表 – 社外の⽅方も巻き込みつつ13回実施 n go-‐‑‒importsやgo-‐‑‒lintなどの紹介 – 各エディタに必ず保存時実⾏行行 n CircleCIのセットアップ n OpsworksによるGoプロジェクトのテンプレづくり – 現状ではデプロイ含め全てOpsworks管理理へ – デプロイフローの簡素化 現在は殆どの新規システムがGo製になっている チーム開発に向けて様々な施策を実施
14 ©Gunosy Inc. サーバー Gunosyの現在 APIや広告配信、マンガなど多くのシステムでGoが活躍 n guregu/kamiベースのAPI – Contextベースでの実装
– 既存APIへはGoがProxy n React.jsによるフロント – GoはAPIに徹する – デザイナがReact.jsコンポーネント作成 n Opsworksによるスタック⽣生成 – GUIによるサーバ構築 – デプロイを含めた全ての管理理 機能群ごとにサービスを分割するマイクロサービスっぽいもの ReactJS guregu/kami View API
15 ©Gunosy Inc. Go導⼊入にあたって
16 ©Gunosy Inc. なぜそれをGoでやるのか Goが向いている課題・向かない課題が存在している。 向いている課題 向いていない課題 効率率率・デプロイしやすさのフル活⽤用 管理理画⾯面等の領領域は不不向き (できないわけではない)
n 軽量量なAPIの構築 – パフォーマンスが最も活かせる – Gunosyもこの⽅方針で利利⽤用 n インフラ系ツールの作成 – どこでも配置・実⾏行行しやすい – Mackerel-‐‑‒agentなどgo製増加 n Scaffoldなどを期待した開発 – 管理理画⾯面など向け – Rails等のFWと⽐比べ柔軟性は低い n ⾼高度度なtemplateの描画 – フルスタックFWの得意な描画は Goでは⾯面倒が多い できないことはないが、向いてない⽤用途で使うのはコストがかかる
17 ©Gunosy Inc. とりあえずGoを導⼊入したいのであれば net/http/httputil l Go標準パッケージにReverseProxyが付属 l 既存APIへのトラフィックをここで中継 l
http://golang.org/pkg/net/http/httputil/#ReverseProxy Proxyと組み合わせ、段階的に移⾏行行がおすすめ Nginx. Golang Existing Apps DB proxy
18 ©Gunosy Inc. 社内のGoエンジニアをふやす コーディング進める上で、だれでもすぐGoへコミットできるように n 各標準パッケージの GoDocとソースコード を読む n
Gunosyではa-‐‑‒zまで全 て通して勉強会 n http://golang.org/pk g/ 標準ライブラリを読む n Goの基本の使い⽅方を学 ぶ良良い教材 n 特にchannel周り n https://go-‐‑‒tour-‐‑‒ jp.appspot.com/#1 A tour of Go n Webサーバとかインフ ラ向けのツールなど n テストの仕⽅方含め学ぶ n https://speakerdeck.c om/ymatsuwitter/gof alsetesutofalseji-‐‑‒ben-‐‑‒ tokai-‐‑‒fa-‐‑‒huro 簡単なものを作る Goは標準ライブラリを使うだけでも⼗十分プロダクトを作れる
19 ©Gunosy Inc. コーディング規約をツールでカバー golang/lint l https://github.com/golang/lint l 標準的構⽂文チェックツール go-‐‑‒vet
l http://godoc.org/golang.org/x/tools/cmd/vet l ソースコードの中でバグを含みそうなものをチェック goimports l https://godoc.org/golang.org/x/tools/cmd/goimports l パッケージのimport⽂文を⾃自動で追加する その他、oracleなど様々な便便利利ツールがあります。 コーディング進める上で、だれでもGoへコミットできるように環境を作る
20 ©Gunosy Inc. まとめ
21 ©Gunosy Inc. まとめ メリット 導⼊入 社内教育 n 低コストで⾼高パフォー マンス
n 独⽴立立性が⾼高く、構築が 容易易 n チーム開発に向けたツ ールが豊富 n APIサーバ向き – 軽量量かつ⾼高負荷な ものが特に。 n 開発環境の統⼀一 – gotoolsを活⽤用 l go-‐‑‒lint l go-‐‑‒vet …etc n A tour of Goの活⽤用 – Goの⼤大抵のことは 学べる n 社内勉強会 – 標準パッケージを 題材にコードリー ディング ⽬目的に合致する場合Goは⾮非常に良良い⾔言語 Goは導⼊入・学習コストも低く、パフォーマンスを重視するサービスに最適
22 ©Gunosy Inc. GunosyではNo.1を取りに⾏行行きたい エンジニアを募集しています
23 ©Gunosy Inc. ありがとうございました