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.4k
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.3k
Goの実装パターン ~ Webサーバ編 ~
daisuzu
14
6.4k
Other Decks in Technology
See All in Technology
Spring Bootで実装とインフラをこれでもかと分離するための試み
shintanimoto
7
810
ワールドカフェI /チューターを改良する / World Café I and Improving the Tutors
ks91
PRO
0
120
技術者はかっこいいものだ!!~キルラキルから学んだエンジニアの生き方~
masakiokuda
2
260
Mastraに入門してみた ~AWS CDKを添えて~
tsukuboshi
0
210
フロントエンドも盛り上げたい!フロントエンドCBとAmplifyの軌跡
mkdev10
2
270
YOLOv10~v12
tenten0727
4
940
JPOUG Tech Talk #12 UNDO Tablespace Reintroduction
nori_shinoda
2
140
Amazon CloudWatch を使って NW 監視を行うには
o11yfes2023
0
150
新卒エンジニアがCICDをモダナイズしてみた話
akashi_sn
2
220
さくらの夕べ Debianナイト - さくらのVPS編
dictoss
0
320
AWS Control Towerを 数年運用してきての気づきとこれから/aws-controltower-ops-tips
tadayukinakamura
0
140
SnowflakeとDatabricks両方でRAGを構築してみた
kameitomohiro
1
280
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
30
8.5k
How STYLIGHT went responsive
nonsquared
99
5.5k
Unsuck your backbone
ammeep
670
57k
Gamification - CAS2011
davidbonilla
81
5.2k
Optimising Largest Contentful Paint
csswizardry
36
3.2k
Code Reviewing Like a Champion
maltzj
522
40k
Rails Girls Zürich Keynote
gr2m
94
13k
Six Lessons from altMBA
skipperchong
27
3.7k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
23
2.6k
Making the Leap to Tech Lead
cromwellryan
133
9.2k
The World Runs on Bad Software
bkeepers
PRO
67
11k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
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 ◦ ノウハウの共有・フィードバック