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
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
1.2k
Usage and manipulation of the tag stack
daisuzu
1
19k
Migrating plugins to standard features
daisuzu
1
20k
How ordinary Vim user contributed to Vim
daisuzu
3
6.2k
Goの実装パターン ~ Webサーバ編 ~
daisuzu
14
6.4k
Other Decks in Technology
See All in Technology
プロダクト開発者目線での Entra ID 活用
sansantech
PRO
0
120
アジリティを高めるテストマネジメント #QiitaQualityForward
makky_tyuyan
1
270
AIエージェント入門
minorun365
PRO
33
20k
Log Analytics を使った実際の運用 - Sansan Data Hub での取り組み
sansantech
PRO
0
110
Oracle Database Technology Night #87-1 : Exadata Database Service on Exascale Infrastructure(ExaDB-XS)サービス詳細
oracle4engineer
PRO
1
220
AWSアカウントのセキュリティ自動化、どこまで進める? 最適な設計と実践ポイント
yuobayashi
7
1.6k
x86-64 Assembly Essentials
latte72
3
400
あなたが人生で成功するための5つの普遍的法則 #jawsug #jawsdays2025 / 20250301 HEROZ
yoshidashingo
2
350
AIエージェント開発のノウハウと課題
pharma_x_tech
9
4.8k
Apache Iceberg Case Study in LY Corporation
lycorptech_jp
PRO
0
380
4th place solution Eedi - Mining Misconceptions in Mathematics
rist
0
150
フォーイット_エンジニア向け会社紹介資料_Forit_Company_Profile.pdf
forit_tech
1
1.7k
Featured
See All Featured
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
1.1k
Navigating Team Friction
lara
183
15k
Large-scale JavaScript Application Architecture
addyosmani
511
110k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
11
1.3k
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.2k
Designing for Performance
lara
605
68k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
46
2.4k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.4k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.5k
How to Ace a Technical Interview
jacobian
276
23k
Gamification - CAS2011
davidbonilla
80
5.2k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.2k
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 ◦ ノウハウの共有・フィードバック