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
y_matsuwitter
August 18, 2015
Programming
5
780
HowToIntroduceGo
dots.主催Go言語勉強会にて「如何に組織にGoを導入するか」
y_matsuwitter
August 18, 2015
Tweet
Share
More Decks by y_matsuwitter
See All by y_matsuwitter
Building Products in the LLM Era
ymatsuwitter
11
11k
Product Utilization of Large Language Models Starting Today
ymatsuwitter
3
3k
経営・意思・エンジニアリング
ymatsuwitter
23
20k
LLM in 2023 and 2024
ymatsuwitter
8
5.9k
Turbulent Technological Changes and Career Strategies
ymatsuwitter
2
2.9k
LLM in toB Service and Its UX
ymatsuwitter
7
11k
Agent and small LLM validation
ymatsuwitter
7
3k
Information management for a culture of speed: The story of Notion and LayerX
ymatsuwitter
4
11k
Monorepo on AWS
ymatsuwitter
0
330
Other Decks in Programming
See All in Programming
プロダクト開発をAI 1stに変革する〜SaaS is dead時代で生き残るために〜 / AI 1st Product Development
kobakei
0
480
NetworkXとGNNで学ぶグラフデータ分析入門〜複雑な関係性を解き明かすPythonの力〜
mhrtech
3
980
Web Components で実現する Hotwire とフロントエンドフレームワークの橋渡し / Bridging with Web Components
da1chi
3
1.6k
XP, Testing and ninja testing ZOZ5
m_seki
2
270
Back to the Future: Let me tell you about the ACP protocol
terhechte
0
130
ABEMAモバイルアプリが Kotlin Multiplatformと歩んだ5年 ─ 導入と運用、成功と課題 / iOSDC 2025
akkyie
0
320
Pythonスレッドとは結局何なのか? CPython実装から見るNoGIL時代の変化
curekoshimizu
4
1.2k
高度なUI/UXこそHotwireで作ろう Kaigi on Rails 2025
naofumi
4
3.3k
株式会社 Sun terras カンパニーデック
sunterras
0
200
どの様にAIエージェントと 協業すべきだったのか?
takefumiyoshii
1
580
Local Peer-to-Peer APIはどのように使われていくのか?
hal_spidernight
2
440
ИИ-Агенты в каждый дом – Алексей Порядин, PythoNN
sobolevn
0
150
Featured
See All Featured
Writing Fast Ruby
sferik
629
62k
Typedesign – Prime Four
hannesfritz
42
2.8k
How to Ace a Technical Interview
jacobian
280
23k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
30
2.9k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Why Our Code Smells
bkeepers
PRO
339
57k
Code Review Best Practice
trishagee
72
19k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
850
Faster Mobile Websites
deanohume
310
31k
KATA
mclloyd
32
15k
Gamification - CAS2011
davidbonilla
81
5.5k
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. ありがとうございました