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
事業をグロースさせるためにエンジニアができること / What engineers c...
Search
yyh_gl
November 30, 2020
Programming
2
1.4k
事業をグロースさせるためにエンジニアができること / What engineers can do to grow a business
yyh_gl
November 30, 2020
Tweet
Share
More Decks by yyh_gl
See All by yyh_gl
入門Go言語仕様輪読会 Assignability / Go Language Specification Assignability
yyh_gl
0
220
Goaを使ってAPIサーバ開発してみた / Develop API server by Goa
yyh_gl
3
2.5k
VCR in Go:モック自動生成で楽しちゃう話
yyh_gl
4
3.6k
Other Decks in Programming
See All in Programming
Kotlin エンジニアへ送る:Swift 案件に参加させられる日に備えて~似てるけど色々違う Swift の仕様 / from Kotlin to Swift
lovee
1
260
git worktree × Claude Code × MCP ~生成AI時代の並列開発フロー~
hisuzuya
1
540
PHP 8.4の新機能「プロパティフック」から学ぶオブジェクト指向設計とリスコフの置換原則
kentaroutakeda
2
740
Webの外へ飛び出せ NativePHPが切り拓くPHPの未来
takuyakatsusa
2
510
0626 Findy Product Manager LT Night_高田スライド_speaker deck用
mana_takada
0
150
「Cursor/Devin全社導入の理想と現実」のその後
saitoryc
0
740
AIエージェントはこう育てる - GitHub Copilot Agentとチームの共進化サイクル
koboriakira
0
500
ソフトウェア品質を数字で捉える技術。事業成長を支えるシステム品質の マネジメント
takuya542
1
8.6k
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
400
#kanrk08 / 公開版 PicoRubyとマイコンでの自作トレーニング計測装置を用いたワークアウトの理想と現実
bash0c7
1
680
なんとなくわかった気になるブロックテーマ入門/contents.nagoya 2025 6.28
chiilog
1
260
Code as Context 〜 1にコードで 2にリンタ 34がなくて 5にルール? 〜
yodakeisuke
0
120
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
Testing 201, or: Great Expectations
jmmastey
42
7.6k
Gamification - CAS2011
davidbonilla
81
5.3k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
5
240
Build your cross-platform service in a week with App Engine
jlugia
231
18k
The Straight Up "How To Draw Better" Workshop
denniskardys
234
140k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
A better future with KSS
kneath
239
17k
Code Reviewing Like a Champion
maltzj
524
40k
Transcript
事業をグロースさせるためにエンジニ 事業をグロースさせるためにエンジニ アができること アができること プラットフォーム事業本部 プラットフォーム事業本部 本⽥ 雄亮 本⽥ 雄亮
2020 年11 ⽉30 ⽇ 2020 年11 ⽉30 ⽇ PF-Meetup PF-Meetup
⾃⼰紹介 ⾃⼰紹介 2 2
本⽥ 雄亮(Honda Yusuke ) 本⽥ 雄亮(Honda Yusuke ) 所属:プラットフォーム事業本部 総合トップ開発部
PointClub チーム 所属:プラットフォーム事業本部 総合トップ開発部 PointClub チーム ⼊社年:2019 年(新卒⼊社) ⼊社年:2019 年(新卒⼊社) Twitter: @yyh-gl Twitter: @yyh-gl 運営:DMM.go 運営:DMM.go 3 3
DMM.go DMM.go DMM 社内のGo 活⽤事例を紹介 DMM 社内のGo 活⽤事例を紹介 第1 回⽬
第1 回⽬ (https://inside.dmm.com/entry/2020/02/03/dmmgo-1) (https://inside.dmm.com/entry/2020/02/03/dmmgo-1) 第2 回⽬ 第2 回⽬ (https://inside.dmm.com/entry/2020/02/03/dmmgo-2) (https://inside.dmm.com/entry/2020/02/03/dmmgo-2) 4 4
今⽇話すこと 今⽇話すこと 私が所属するPointClub チームにて、 私が所属するPointClub チームにて、 事業をグロースさせていくために⼤事にしている考え 事業をグロースさせていくために⼤事にしている考えを主題に置き、 を主題に置き、 エンジニアとしてなにができるのか、実際なにをしているのか
エンジニアとしてなにができるのか、実際なにをしているのかを話します を話します やってみて得られた結果も共有できればと思います やってみて得られた結果も共有できればと思います 5 5
開発体制 開発体制 6 6
PointClub チーム PointClub チーム 開発スタイル:アジャイル 開発スタイル:アジャイル チームメンバー:13 名ほど チームメンバー:13 名ほど
バックエンド:6 名 バックエンド:6 名 ネイティブ,プロダクトデザイナー,グロース/ マーケティング など ネイティブ,プロダクトデザイナー,グロース/ マーケティング など 7 7
チームとして⼤事にしている考え チームとして⼤事にしている考え 8 8
" 最短距離でリリース" " 最短距離でリリース" 最短距離でのリリースを続けることで事業をグロースさせていく 最短距離でのリリースを続けることで事業をグロースさせていく 弊チームPO の⽯垣がiOSDC で発表 弊チームPO
の⽯垣がiOSDC で発表 組織構造の⼒学を操作して、アプリ開発プロセスを最⼤化させる 組織構造の⼒学を操作して、アプリ開発プロセスを最⼤化させる (https://speakerdeck.com/i35_267/organizational- (https://speakerdeck.com/i35_267/organizational- structure-to-maximize-the-development-process) structure-to-maximize-the-development-process) 9 9
エンジニアとしてできること エンジニアとしてできること スピード感ある開発 スピード感ある開発 ⼿戻りをなくす ⼿戻りをなくす ⾃動化 ⾃動化 100% は無理でも最⼤限頑張る
100% は無理でも最⼤限頑張る 10 10
⼿戻りをなくす ⼿戻りをなくす 11 11
⼿戻りはだいたい認識差異から⽣まれる ⼿戻りはだいたい認識差異から⽣まれる 例えば 例えば 仕様の認識差異 仕様の認識差異 → 表⽰したい情報が違う → 表⽰したい情報が違う
技術的な認識差異 技術的な認識差異 → 必要な情報がAPI レスポンスに含まれていない → 必要な情報がAPI レスポンスに含まれていない と思ったら、使っている単語が違うだけでちゃんと渡してたり… と思ったら、使っている単語が違うだけでちゃんと渡してたり… このような状況では、話し合いや修正が必要になり、⼿戻りが発⽣ このような状況では、話し合いや修正が必要になり、⼿戻りが発⽣ ⼀発でばしっと決められると嬉しい ⼀発でばしっと決められると嬉しい では、なにをすればいいのか ▶▶▶ では、なにをすればいいのか ▶▶▶ 12 12
仕様の認識差異をなくす 仕様の認識差異をなくす 13 13
なぜ仕様の認識差異が⽣まれる? なぜ仕様の認識差異が⽣まれる? 仕様の認識差異は、チームメンバー間(特にPO↔ エンジニア間)で、 仕様の認識差異は、チームメンバー間(特にPO↔ エンジニア間)で、 なにを作るかが⼀致していない場合に発⽣ なにを作るかが⼀致していない場合に発⽣ エンジニアが エンジニアがなに
なにを作っているのか明確に意識できていれば発⽣しづらい を作っているのか明確に意識できていれば発⽣しづらい そして、「なにを作るか」は そして、「なにを作るか」はなぜ なぜ作るかが分かっていると理解しやすい 作るかが分かっていると理解しやすい 14 14
まずは「なぜ」を統⼀ まずは「なぜ」を統⼀ なぜ なぜ作るかの認識を統⼀するために 作るかの認識を統⼀するために みんなでユーザーストーリーマッピングを作成 みんなでユーザーストーリーマッピングを作成 することが有効 することが有効 ユーザーストーリーマッピング:
ユーザーストーリーマッピング: どういう機能が必要か、どのタイミングで提供すべきかといった情報を どういう機能が必要か、どのタイミングで提供すべきかといった情報を ユーザーストーリー(≒ユーザーにとっての価値)に対応させて表現可能 ユーザーストーリー(≒ユーザーにとっての価値)に対応させて表現可能 15 15
ユーザーストーリーマッピング ユーザーストーリーマッピング 16 16
ユーザーストーリーマッピング ユーザーストーリーマッピング 17 17
ユーザーストーリーマッピング ユーザーストーリーマッピング 18 18
ユーザーストーリーマッピング ユーザーストーリーマッピング 19 19
ユーザーストーリーマッピング ユーザーストーリーマッピング 20 20
ユーザーストーリーマッピング ユーザーストーリーマッピング 21 21
ユーザーストーリーマッピングの恩恵 ユーザーストーリーマッピングの恩恵 今作っている機能が、ユーザーのどういったストーリーに紐づくのかが明確になる 今作っている機能が、ユーザーのどういったストーリーに紐づくのかが明確になる → → なぜ なぜその機能が必要なのかが明確になるので、迷⼦になりにくい その機能が必要なのかが明確になるので、迷⼦になりにくい 22
22
「なに」を統⼀ 「なに」を統⼀ なに なにを作るかの認識を統⼀するために、みんなでデザインをレビュー を作るかの認識を統⼀するために、みんなでデザインをレビュー Figma 上でデザインを確認可能 Figma 上でデザインを確認可能 23
23
実際にこうした取り組みをやってみての感想 実際にこうした取り組みをやってみての感想 メンバー間の認識差異は少ない(… はず!) メンバー間の認識差異は少ない(… はず!) 加えて、なにをなぜ作るか理解していれば、各エンジニアから仕様部分での改善策が出てき 加えて、なにをなぜ作るか理解していれば、各エンジニアから仕様部分での改善策が出てき やすくなる やすくなる
開発が始まってから、認識差異が⾒つかったとしても、 開発が始まってから、認識差異が⾒つかったとしても、 ユーザーストーリーマッピングやデザインという共通⾔語があるため、 ユーザーストーリーマッピングやデザインという共通⾔語があるため、 解決のための会話がスムーズに進む 解決のための会話がスムーズに進む 24 24
より詳しい話はPO ⽯垣の発表をどうぞ より詳しい話はPO ⽯垣の発表をどうぞ 組織構造の⼒学を操作して、アプリ開発プロセスを最⼤化させる 組織構造の⼒学を操作して、アプリ開発プロセスを最⼤化させる (https://speakerdeck.com/i35_267/organizational- (https://speakerdeck.com/i35_267/organizational- structure-to-maximize-the-development-process) structure-to-maximize-the-development-process)
25 25
技術的な認識差異をなくす 技術的な認識差異をなくす 26 26
技術的な認識差異をなくすために 技術的な認識差異をなくすために ⽇常的な認識合わせ ⽇常的な認識合わせ 廃らないドキュメント作り 廃らないドキュメント作り 27 27
⽇常的な認識合わせ ⽇常的な認識合わせ 28 28
API 定義レビュー API 定義レビュー API 定義に変更があったときはクライアントとバックエンドの両メンバーでレビュー API 定義に変更があったときはクライアントとバックエンドの両メンバーでレビュー API 定義にはOpenAPI
(Swagger )を使⽤ API 定義にはOpenAPI (Swagger )を使⽤ クライアントとバックエンド間でAPI 定義に関する認識が常に⼀致 クライアントとバックエンド間でAPI 定義に関する認識が常に⼀致 29 29
API 定義を確認する⽅法 API 定義を確認する⽅法 API 定義はSwagger UI を通して確認可能 API 定義はSwagger
UI を通して確認可能 Swagger UI ⾃体はS3 でホスティングされており、いつでもだれでもアクセス可能 Swagger UI ⾃体はS3 でホスティングされており、いつでもだれでもアクセス可能 30 30
みんなでレビューすることで… みんなでレビューすることで… みんなで認識合わせをする機会(仕組み)を作ることにより みんなで認識合わせをする機会(仕組み)を作ることにより メンバー間の認識が⼤きくずれることをなくし、⼿戻りを防⽌ メンバー間の認識が⼤きくずれることをなくし、⼿戻りを防⽌ 加えて、異なる領域のメンバーがレビューすることで、 加えて、異なる領域のメンバーがレビューすることで、 様々な視点からの意⾒がもらえる(品質向上) 様々な視点からの意⾒がもらえる(品質向上)
もしかして毎回openapi.yaml (ドキュメント)を⼿で更新してる… ? もしかして毎回openapi.yaml (ドキュメント)を⼿で更新してる… ? → API 定義ドキュメントをどうやって⽣成し、共有しているかは後述 → API 定義ドキュメントをどうやって⽣成し、共有しているかは後述 31 31
技術的な認識差異をなくすために 技術的な認識差異をなくすために ⽇常的な認識合わせ ⽇常的な認識合わせ 廃らないドキュメント作り 廃らないドキュメント作り 32 32
廃らないドキュメント作り 廃らないドキュメント作り 33 33
ドキュメントを廃れさせないためにできること ドキュメントを廃れさせないためにできること 廃れたドキュメント=内容が現実と乖離しているドキュメント 廃れたドキュメント=内容が現実と乖離しているドキュメント したがって、常に" 現実" を基にドキュメントを作り続ければ廃れることはない したがって、常に" 現実" を基にドキュメントを作り続ければ廃れることはない
弊チームでは以下のドキュメントについて、 弊チームでは以下のドキュメントについて、 コードを基に⽣成することで現実に則したドキュメントを⽣成 コードを基に⽣成することで現実に則したドキュメントを⽣成 API 定義 API 定義 DB スキーマ定義 DB スキーマ定義 加えて、継続的にドキュメント⽣成する仕組み(⽣成⾃動化)により、 加えて、継続的にドキュメント⽣成する仕組み(⽣成⾃動化)により、 ドキュメントを常に更新し、⾵化を防⽌ ドキュメントを常に更新し、⾵化を防⽌ ▶ ⾃動化周りの詳細は後述 ▶ ⾃動化周りの詳細は後述 34 34
ここまでのまとめ ここまでのまとめ ⼿戻り防⽌を⽬的として、いろいろやってきた ⼿戻り防⽌を⽬的として、いろいろやってきた ユーザーストーリーマッピングやデザインレビューで仕様の認識を合わせ、 ユーザーストーリーマッピングやデザインレビューで仕様の認識を合わせ、 ⽇常的なレビューと廃れたドキュメントを作らない仕組み作りにより、 ⽇常的なレビューと廃れたドキュメントを作らない仕組み作りにより、 技術的な認識を合わせた 技術的な認識を合わせた
ただし、これらの取り組みや仕組みを⼈の⼿作業だけで継続するのは難しいので、 ただし、これらの取り組みや仕組みを⼈の⼿作業だけで継続するのは難しいので、 簡素化してあげることが⼤事 簡素化してあげることが⼤事 つまり、⼈がやらなくて良い部分は機械に任せる つまり、⼈がやらなくて良い部分は機械に任せる 35 35
⾃動化 ⾃動化 36 36
API 定義のドキュメント作成を⾃動化 API 定義のドキュメント作成を⾃動化 下記タイミングで、CI にて、 下記タイミングで、CI にて、 その時点の最新コードからopenapi.yaml を⽣成し、S3
にアップロード その時点の最新コードからopenapi.yaml を⽣成し、S3 にアップロード 作業ブランチをPUSH 作業ブランチをPUSH API 定義に変更がある場合限定 API 定義に変更がある場合限定 master にPUSH (= STG リリース) master にPUSH (= STG リリース) STG のAPI 定義は常時、作業ブランチのAPI 定義は⼀定期間閲覧可能 STG のAPI 定義は常時、作業ブランチのAPI 定義は⼀定期間閲覧可能 37 37
より詳細は… より詳細は… API 定義の⽣成や共有については、 API 定義の⽣成や共有については、 以前、DMM.go で発表したので、よければ以下のスライドもご覧ください 以前、DMM.go で発表したので、よければ以下のスライドもご覧ください
Goa を使ってAPI サーバ開発してみた Goa を使ってAPI サーバ開発してみた (https://speakerdeck.com/yyh_gl/develop-api-server-by-goa) (https://speakerdeck.com/yyh_gl/develop-api-server-by-goa) 38 38
DB スキーマ定義のドキュメント作成を⾃動化 DB スキーマ定義のドキュメント作成を⾃動化 k1low/tbls k1low/tbls (https://github.com/k1LoW/tbls) (https://github.com/k1LoW/tbls) というGo 製ツールを使⽤
というGo 製ツールを使⽤ 下記のようなシンプルな設定ファイル 下記のようなシンプルな設定ファイル .tbls.yml .tbls.yml を作成し、 を作成し、 dsn: mysql://root:mysql@localhost:3306/pointclub dsn: mysql://root:mysql@localhost:3306/pointclub docPath: /tmp/dbdoc docPath: /tmp/dbdoc コマンドを実⾏すると コマンドを実⾏すると $ tbls doc $ tbls doc DB スキーマ定義がsvg およびマークダウン形式で出⼒される ▶▶▶ DB スキーマ定義がsvg およびマークダウン形式で出⼒される ▶▶▶ 39 39
⽣成物:テーブル⼀覧 ⽣成物:テーブル⼀覧 40 40
⽣成物:テーブル詳細 ⽣成物:テーブル詳細 41 41
⽣成物:全テーブルの関連 ⽣成物:全テーブルの関連 42 42
⽣成物:概要(README.md ) ⽣成物:概要(README.md ) README.md README.md にDB 全体のスキーマ定義を出⼒ にDB 全体のスキーマ定義を出⼒
43 43
DB スキーマ定義のドキュメントを共有 DB スキーマ定義のドキュメントを共有 ⽣成されたドキュメントは、 ⽣成されたドキュメントは、 アプリケーションコードとは別のGitHub リポジトリにPUSH アプリケーションコードとは別のGitHub リポジトリにPUSH
ドキュメントはsvg およびマークダウン形式なので、GitHub と相性が良い ドキュメントはsvg およびマークダウン形式なので、GitHub と相性が良い 44 44
おまけ:リリースノート作成を⾃動化 おまけ:リリースノート作成を⾃動化 リリース管理のために、PRD リリース時にリリースノートを作成している リリース管理のために、PRD リリース時にリリースノートを作成している 作成⾃体は 作成⾃体はgoreleaser/goreleaser goreleaser/goreleaser (https://github.com/goreleaser/goreleaser)
(https://github.com/goreleaser/goreleaser) というGo 製ツールを使⽤ というGo 製ツールを使⽤ CI に組み込んでおり、タグPUSH をトリガーにリリースノートを⽣成 CI に組み込んでおり、タグPUSH をトリガーにリリースノートを⽣成 45 45
⾃動化により… ⾃動化により… ⽇常的な認識合わせにかかる⼿間を削減 ⽇常的な認識合わせにかかる⼿間を削減 廃れないドキュメントを実現 廃れないドキュメントを実現 ⼈にしかできない作業に集中 ⼈にしかできない作業に集中 ⼈的ミスの排除 ⼈的ミスの排除
46 46
まとめ まとめ 事業グロースのために最短距離でリリース 事業グロースのために最短距離でリリース 最短距離でリリースするための取り組みを紹介し、 それぞれ効果を実感 最短距離でリリースするための取り組みを紹介し、 それぞれ効果を実感 ⼿戻りをなくすための努⼒ ⼿戻りをなくすための努⼒
みんなでユーザーストーリーマッピング作成 みんなでユーザーストーリーマッピング作成 みんなでデザインレビュー みんなでデザインレビュー みんなでAPI 定義レビュー みんなでAPI 定義レビュー ⾃動化によって上記の取り組みをサポート ⾃動化によって上記の取り組みをサポート API 定義のドキュメント化 API 定義のドキュメント化 DB スキーマ定義のドキュメント化 DB スキーマ定義のドキュメント化 (リリース作業) (リリース作業) 47 47
Thank you Thank you プラットフォーム事業本部 プラットフォーム事業本部 本⽥ 雄亮 本⽥ 雄亮
2020 年11 ⽉30 ⽇ 2020 年11 ⽉30 ⽇ PF-Meetup PF-Meetup