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
Goを使いこなせる組織作りの取り組み / DeNA.go #1
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Daisuke Suzuki
May 24, 2019
Technology
10
12k
Goを使いこなせる組織作りの取り組み / DeNA.go #1
https://dena.connpass.com/event/128034/
Daisuke Suzuki
May 24, 2019
Tweet
Share
More Decks by Daisuke Suzuki
See All by Daisuke Suzuki
Mastering Quickfix
daisuzu
2
2k
Usage and manipulation of the tag stack
daisuzu
1
20k
Migrating plugins to standard features
daisuzu
1
20k
How ordinary Vim user contributed to Vim
daisuzu
3
6.6k
Goの実装パターン ~ Webサーバ編 ~
daisuzu
14
6.5k
Other Decks in Technology
See All in Technology
Webアクセシビリティ技術と実装の実際
tomokusaba
0
190
脱・コピペ!自分で調べて書くK8sマニフェスト
devops_vtj
0
100
研究開発部メンバーの働き⽅ / Sansan R&D Profile
sansan33
PRO
4
22k
opsmethod第1回_アラート調査の自動化にむけて
yamatook
0
330
AIエージェントで変わる開発プロセス ― レビューボトルネックからの脱却
lycorptech_jp
PRO
2
840
どこで打鍵するのが良い? IaCの実行基盤選定について
nrinetcom
PRO
2
110
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
6
71k
Lookerの最新バージョンv26.2がやばい話
waiwai2111
1
150
Serverless Agent Architecture on Azure / serverless-agent-on-azure
miyake
1
120
Databricks (と気合い)で頑張るAI Agent 運用
kameitomohiro
0
350
メタデータ同期に潜んでいた問題 〜 Cache Stampede 時の Cycle Wait を⾒つけた話
lycorptech_jp
PRO
0
130
Oracle Cloud Infrastructure:2026年2月度サービス・アップデート
oracle4engineer
PRO
0
170
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.9k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
95
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
470
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.7k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
450
Scaling GitHub
holman
464
140k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.1k
Mind Mapping
helmedeiros
PRO
1
110
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
310
Designing Powerful Visuals for Engaging Learning
tmiket
0
250
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Transcript
Goを使いこなせる組織作りの取り組み 鈴木 大介 ゲーム・エンターテインメント事業本部 オープンプラットフォーム事業部 ゲームプラットフォーム部 技術第二グループ 株式会社ディー・エヌ・エー #1
自己紹介 2 鈴木 大介 ❖ AndAppのサーバサイドエンジニア ▪ Go + GCP(App
Engine) ❖ Goで作ってきたシステム多数 ▪ APIサーバ ◦ REST ◦ gRPC ▪ Webサーバ ▪ コマンドラインツール ▪ デーモン ❖ Vimmer ▪ VimConf ▪ ゴリラ.vim
Goを使いこなせる組織 3 Goを使いこなせる ➢ Goの良いところを引き出して生産性を最大化する ◦ シンプルな言語仕様で学習コストが低い ◦ 幅広いプラットフォームに対応している ◦
品質向上に役立つツールが充実している ➢ 適材適所で選択する ◦ 各種サーバソフトウェアやコマンドラインツールに向いている ◦ デスクトップアプリやモバイルアプリなどを無理にGoで作らない 組織 ➢ チーム、部署、企業 ◦ NOT 個人
つくりたい! 4 ガイドライン ツール・システム コミュニティ
ガイドライン 5
なぜガイドラインが必要なのか • スタートラインを揃えたい • 環境構築などにハマって時間を無駄にしたくないはず • うっかり古い資料を参考にしてハマるみたいなのを避けられるように • 細かいノウハウを共有したい •
一定コミュニティが成熟すると当たり前のノウハウは外にでなくなる • 当たり前のベストプラクティスを参照しやすい場所に置き共有したい 6
環境構築 Go本体のセットアップ 1. 各OS向けのアーカイブをダウンロードして展開する ◦ バージョンを固定するため ◦ 異なるバージョンを使いたい時はシンボリックリンク or golang.org/dl/...
2. ワークスペースは$HOME/goにする 3. GitHub Enterpriseからgo getするためのGit設定を追加する 4. パッケージ管理ツールの使い方 Cloud SDKのセットアップ 1. 各OS向けのアーカイブをダウンロードして展開する ◦ 以降はgcloud componentsコマンドを使う 2. App Engine用コマンドにパスを通し、実行権限を付与する ◦ goappコマンドを使う際には$GOPATHを設定しておく 7
学習コンテンツ 公式ドキュメント • A Tour of Go • Package Documentation
• Command Documentation • Language Specification • Frequently Asked Questions (FAQ) コードラボ • 公式ドキュメントの次のステップとして 社内ドキュメント • スタイルガイド • エラーハンドリング • テスト • など 8
9
スタイルガイド あまり細かい規定はない • Goの標準に従うこと ◦ 特殊な書き方は新規メンバーのキャッチアップを阻害してしまう ◦ 他の言語のような書き方をしようとすると歪になってしまう • Effective
Go、Go Code Review Comments、Go Proverbsの内容を押さえること • ツールによるチェックを行うこと ◦ 必須 ▪ gofmt or goimports ▪ go vet ◦ 推奨 ▪ golint ▪ staticcheck • イディオムの紹介 • テストはgotestsコマンドで雛形を生成してTable Driven Tests 10
チェックツール • 3rd-party製linterの機能紹介 ◦ staticcheck ◦ golangci-lint ◦ gsc •
reviewdogの使い方 • CircleCIの設定方法 詳細はDeNA Testing Blogの reviewdogによるGoのコードレビュー 参照 11
イディオム • 宣言のグルーピング ◦ constやvarごとではなく、GoDoc単位でまとめる ◦ ネストが深くなるのでstructやinterfaceはまとめない • スライスの作成方法いろいろ ◦
make() ◦ nilスライス ◦ 空スライス • 引数の構造体は値で受け取る?それともポインタ? ◦ 迷ったらポインタにしておく ▪ フィールドが増えてもパフォーマンスが落ちない ▪ 後からポインタに変更するのは改修が面倒 • 構造体のポインタを初期化する時に使うのはnew()?それとも&? ◦ 基本的には& ◦ new()を使うのは初期化時にパラメータが不要なことを明示したい時など 12
エラーハンドリング • パターンを紹介 ◦ Don’t just check errors, handle them
gracefullyで紹介されているもの ▪ Sentinel errors ▪ Error type ▪ Opaque errors ◦ Upspinの例 ◦ など • 注意点 ◦ err.Error()を分岐に使わない ◦ 呼び出し元と呼び出し先の両方で同じエラーログを出力しない ※ 必ずこうしなければならないというものを規定するわけではない 13
テスト • パターンを紹介 1. 外部と接続するための設定を切り替える 2. 外部と接続するクライアントを切り替える 3. 外部と接続する処理自体を切り替える ※
必ずこうしなければならないというものを規定するわけではない 14 1 2 3
ツール・システム 15
16
コミュニティ 17
Go言語委員会 18 • Go言語で開発をする際のガイドラインを整備 • Go言語の実践的なノウハウを共有
メンバー 19 ★ 委員長 ◦ 田中 洋一郎(Yoichiro Tanaka) ★ 委員
◦ 鈴木 大介(Daisuke Suzuki) ◦ 佐藤 健太(Kenta Sato) ◦ 金子 淳貴(@Junki Kaneko) ▪ a.k.a yoichiro ▪ a.k.a daisuzu ▪ a.k.a karupanerura ▪ a.k.a theoden9014
Go Friday • 社内向けのGoの勉強会 • 資料を準備して発表するというより、参加者同士で雑談する会 ※ 某社にインスパイアされました 20
過去の風景 21
TODO 1) テストのカイゼン ◦ 品質の可視化 ◦ 面倒、ツラい、といったイメージの払拭 2) アウトプットを増やす ◦
Blog ◦ 登壇 ◦ OSS 22
株式会社ディー・エヌ・エー まとめ 23 部署の垣根を超えた社内コミュニティを中心に、Go力を高めている。 • Go言語委員会 ◦ ガイドラインの整備 ◦ ツール・システムの作成
• Go Friday ◦ ノウハウの共有・フィードバック