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
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Daisuke Suzuki
May 24, 2019
Technology
12k
10
Share
Goを使いこなせる組織作りの取り組み / DeNA.go #1
https://dena.connpass.com/event/128034/
Daisuke Suzuki
May 24, 2019
More Decks by Daisuke Suzuki
See All by Daisuke Suzuki
Mastering Quickfix
daisuzu
2
2.1k
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
『生成AI時代のクレデンシャルとパーミッション設計 — Claude Code を起点に』の執筆企画
takuros
2
2.1k
インターネットのガバナンスと応用 / Internet Governance and Applications
ks91
PRO
0
100
巨大プラットフォームを進化させる「第3のROI」
recruitengineers
PRO
2
2.4k
毎日の作業を Claude Code 経由にしたら、 ノウハウがコードになった
kossykinto
0
220
Google Cloud Next '26 の裏でこっそりリリースされたCloud Number Registry & Cloud Hub コスト分析 を試してみた
hikaru1001
0
160
ボトムアップの改善の火を灯し続けろ!〜支援現場で学んだ、消えないための3つの打ち手〜 / 20260509 Kazuki Mori
shift_evolve
PRO
2
540
AI時代の品質はテストプロセスの作り直し #scrumniigata
kyonmm
PRO
4
1.3k
国内外の生成AIセキュリティの最新動向 & AIガードレール製品「chakoshi」のご紹介 / Latest Trends in Generative AI Security (Domestic & International) & Introduction to AI Guardrail Product "chakoshi"
nttcom
4
1.7k
(きっとたぶん)人材育成や教育のような何かの話
sejima
0
590
サービスの信頼性を高めるため、形骸化した「プロダクションミーティング」を立て直すまでの取り組み
stefafafan
1
230
VespaのParent Childを用いたフィードパフォーマンスの改善
taking
0
260
自動テストだけで リリース判断できるチームへ - 鍵はテストの量ではなくリリース判断基準の再設計にあった / Redesigning Release Criteria for Lightweight Releases
ewa
7
3.4k
Featured
See All Featured
4 Signs Your Business is Dying
shpigford
187
22k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
430
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
62
54k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.8k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
170
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
190
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.2k
Abbi's Birthday
coloredviolet
2
7.4k
Tell your own story through comics
letsgokoyo
1
910
Automating Front-end Workflow
addyosmani
1370
200k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.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 ◦ ノウハウの共有・フィードバック