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
5
790
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
12k
Product Utilization of Large Language Models Starting Today
ymatsuwitter
3
3.3k
経営・意思・エンジニアリング
ymatsuwitter
23
21k
LLM in 2023 and 2024
ymatsuwitter
8
6.1k
Turbulent Technological Changes and Career Strategies
ymatsuwitter
2
3.1k
LLM in toB Service and Its UX
ymatsuwitter
7
11k
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
360
Other Decks in Programming
See All in Programming
ベクトル検索のフィルタを用いた機械学習モデルとの統合 / python-meetup-fukuoka-06-vector-attr
monochromegane
2
470
[SF Ruby Feb'26] The Silicon Heel
palkan
0
110
守る「だけ」の優しいEMを抜けて、 事業とチームを両方見る視点を身につけた話
maroon8021
3
1k
20260228_JAWS_Beginner_Kansai
takuyay0ne
5
580
Takumiから考えるSecurity_Maturity_Model.pdf
gessy0129
1
150
Symfony + NelmioApiDocBundle を使った スキーマ駆動開発 / Schema Driven Development with NelmioApiDocBundle
okashoi
0
160
ポーリング処理廃止によるイベント駆動アーキテクチャへの移行
seitarof
3
1.1k
AI時代のソフトウェア開発でも「人が仕様を書く」から始めよう-医療IT現場での実践とこれから
koukimiura
0
150
どんと来い、データベース信頼性エンジニアリング / Introduction to DBRE
nnaka2992
1
300
技術検証結果の整理と解析をAIに任せよう!
keisukeikeda
0
130
へんな働き方
yusukebe
2
1.9k
ふつうの Rubyist、ちいさなデバイス、大きな一年
bash0c7
0
1k
Featured
See All Featured
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
480
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
400
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
1.9k
The SEO identity crisis: Don't let AI make you average
varn
0
420
Thoughts on Productivity
jonyablonski
75
5.1k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.2k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
180
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
680
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
86
Measuring & Analyzing Core Web Vitals
bluesmoon
9
790
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.1k
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. ありがとうございました