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
ユーザーストーリーマッピングから始めるアジャイルチームと並走するQA / Starting QA with User Story Mapping
katawara
0
200
Platform Engineeringは自由のめまい
nwiizo
4
2.1k
Building Products in the LLM Era
ymatsuwitter
10
5.4k
開発スピードは上がっている…品質はどうする? スピードと品質を両立させるためのプロダクト開発の進め方とは #DevSumi #DevSumiB / Agile And Quality
nihonbuson
2
2.9k
PHPカンファレンス名古屋-テックリードの経験から学んだ設計の教訓
hayatokudou
0
230
モノレポ開発のエラー、誰が見る?Datadog で実現する適切なトリアージとエスカレーション
biwashi
6
800
飲食店予約台帳を支えるインタラクティブ UI 設計と実装
siropaca
7
1.7k
2.5Dモデルのすべて
yu4u
2
840
表現を育てる
kiyou77
1
210
現場で役立つAPIデザイン
nagix
33
12k
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
6
57k
Oracle Cloud Infrastructure:2025年2月度サービス・アップデート
oracle4engineer
PRO
1
200
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
693
190k
4 Signs Your Business is Dying
shpigford
182
22k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
1k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.3k
The World Runs on Bad Software
bkeepers
PRO
67
11k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Bash Introduction
62gerente
611
210k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.1k
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 ◦ ノウハウの共有・フィードバック