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
GoConference_人生いろいろモノレポもいろいろ
Search
株式会社ビットキー / Bitkey Inc.
PRO
November 13, 2021
Technology
0
1.2k
GoConference_人生いろいろモノレポもいろいろ
株式会社ビットキー / Bitkey Inc.
PRO
November 13, 2021
Tweet
Share
More Decks by 株式会社ビットキー / Bitkey Inc.
See All by 株式会社ビットキー / Bitkey Inc.
【開発を止めるな】機能追加と並行して進めるアーキテクチャ改善/Keep Shipping: Architecture Improvements Without Pausing Dev
bitkey
PRO
1
270
“決まらない”NSM設計への処方箋 〜ビットキーにおける現実的な指標デザイン事例〜 / A Prescription for "Stuck" NSM Design: Bitkey’s Practical Case Study
bitkey
PRO
1
890
AI時代の戦略的アーキテクチャ 〜Adaptable AI をアーキテクチャで実現する〜 / Enabling Adaptable AI Through Strategic Architecture
bitkey
PRO
17
17k
Dev Containers と Skaffold で実現する クラウドネイティブ開発環境 ローカルのみという制約に挑む / Cloud-Native Development with Dev Containers and Skaffold: Tackling the Local-Only Constraint
bitkey
PRO
0
320
待つ、歩く、そして祈る -モバイルアプリの厄介なテスト奮闘記-/Wait, Walk, and Pray -The Troublesome Struggle of Mobile App Testing-
bitkey
PRO
1
120
見栄えと使いやすさの先にある 特別感 をデザインする / Designing a Sense of Specialness Beyond Aesthetics and Usability
bitkey
PRO
0
250
フレームワーク探しはもう終わり! チームに「ジャストフィット」するワークショップの作り方 / No More Framework Searching: How to Build a 'Just-Fit' Workshop for Your Team
bitkey
PRO
0
140
一次体験を起点にしたUX改善の取り組み / Direct Experience Driven UX Improvements
bitkey
PRO
0
360
ユーザー体験は細部に宿る -ウィジェットQAの挑戦と気づき- / UX is in the details: Challenges and Learnings from Widget QA
bitkey
PRO
0
140
Other Decks in Technology
See All in Technology
Amazon S3 Vectorsを使って資格勉強用AIエージェントを構築してみた
usanchuu
3
420
システムのアラート調査をサポートするAI Agentの紹介/Introduction to an AI Agent for System Alert Investigation
taddy_919
2
1.6k
We Built for Predictability; The Workloads Didn’t Care
stahnma
0
130
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
3.8k
Embedded SREの終わりを設計する 「なんとなく」から計画的な自立支援へ
sansantech
PRO
2
1.9k
usermode linux without MMU - fosdem2026 kernel devroom
thehajime
0
210
今日から始めるAmazon Bedrock AgentCore
har1101
4
380
日本語テキストと音楽の対照学習の技術とその応用
lycorptech_jp
PRO
1
410
MCPでつなぐElasticsearchとLLM - 深夜の障害対応を楽にしたい / Bridging Elasticsearch and LLMs with MCP
sashimimochi
0
130
AI推進者の視点で見る、Bill OneのAI活用の今
sansantech
PRO
2
330
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.3k
Data Hubグループ 紹介資料
sansan33
PRO
0
2.7k
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
110
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
320
AI: The stuff that nobody shows you
jnunemaker
PRO
2
240
How to Talk to Developers About Accessibility
jct
2
120
A better future with KSS
kneath
240
18k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.1k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.8k
WCS-LA-2024
lcolladotor
0
440
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
190
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.7k
What's in a price? How to price your products and services
michaelherold
247
13k
Transcript
Bitkey Inc. Connect Product Noriki Takahashi ਓੜ͍Ζ͍ΖϞϊϨϙ͍Ζ͍Ζ♪
Outline 1. ࣗݾհ 2. എܠͱͯ͠ͷ͘͠͡Γ 3. Go ϞϊϨϙͷྨ 4. ϞϊϨϙҠߦͱࠓޙ
5. ·ͱΊ 2 2
1. ࣗݾհ 3 • ∁ڮయੜ(Noriki Takahashi) ◦ Twitter: @norinoriki0 ◦
GitHub: nrnrk • גࣜձࣾBitkey ◦ bitkey platform ͱ͍͏”ΧΪ”ͷϓϥοτϑΥʔϜͷ։ൃ • 2 Go Ͱ։ൃ͍ͯ͠·͢ • झຯ: ֶɾཧֶ ◦ zk-SNARKs ͷֶతͳଆ໘ΛטΈࡅ͘هࣄΛॻ͍ͨΓͯ͠·͢
• Bitkey ͷ3ͭͷࣄۀυϝΠϯ ◦ HomeʢΒ͠ʣ ◦ Workspaceʢಇ͘ʣ ◦ Experienceʢඇৗͷମݧʣ •
bitkey platform ◦ 3ͭͷ hub ΞϓϦέʔγϣϯͷج൫ 1. ࣗݾհ 4
എܠͱͯ͠ͷ͘͠͡Γ 5 5
ϞϊϨϙԽ͕ඞཁʹͳͬͨഎܠ 6 6 2. എܠͱͯ͠ͷ͘͠͡Γ
গ͠લʹࢥ͍ͬͯͨ͜ͱ͕͋Δ 7 7 2. എܠͱͯ͠ͷ͘͠͡Γ
ͳΜ͔։ൃͰ໘ͳ͜ͱ͕ଟ͍ͧ... 8 8 2. എܠͱͯ͠ͷ͘͠͡Γ
ͳΜ͔ϦϙδτϦଟ͍͠ Ϛʔδͷॱ൪ͱ͔ؾʹ͠ͳ͖Ό ͍͚ͳ͍෦͕͋Δ... 9 9 2. എܠͱͯ͠ͷ͘͠͡Γ
ࢥ͍ग़͢ͱ... 10 10 2. എܠͱͯ͠ͷ͘͠͡Γ
<2લͷαʔϏεϩʔϯνͷ͜Ζ> 11 11 2. എܠͱͯ͠ͷ͘͠͡Γ
“Αͬ͠ΌɺϚΠΫϩαʔϏεͰΔͥ” 12 12 2. എܠͱͯ͠ͷ͘͠͡Γ
“Αͬ͠ΌɺϚΠΫϩαʔϏεͰΔͥ” ͷ͍Ͱ... ϦϙδτϦͨ͘͞Μ࡞ͬͪΌͬͨ ※ ܦҢҰ෦؆ུԽ͍ͯ͠·͢ 13 13 2. എܠͱͯ͠ͷ͘͠͡Γ
ϦϙδτϦΒΒൃੜ 14 14 2. എܠͱͯ͠ͷ͘͠͡Γ
15 15 2. എܠͱͯ͠ͷ͘͠͡Γ
ͦͷ݁Ռ... 16 16 2. എܠͱͯ͠ͷ͘͠͡Γ
։ൃ્ཁҼ͕ͨ͘͞Μੜ·Εͨ... 17 17 2. എܠͱͯ͠ͷ͘͠͡Γ
ϦϙδτϦΒΒ ᶃ ڞ௨ϥΠϒϥϦͷѻ͍͕͏·͍͔͘ͳ͍ 18 18 2. എܠͱͯ͠ͷ͘͠͡Γ
2. എܠͱͯ͠ͷ͘͠͡Γ 19 ᶃ ڞ௨ϥΠϒϥϦͷѻ͍͕͏·͍͔͘ͳ͍ ◦ ֤ϦϙδτϦͰಉ͡Α͏ͳϩδοΫ͕ग़ͯ͘Δ ▪ → ϘΠϥʔϓϨʔτԽ
2. എܠͱͯ͠ͷ͘͠͡Γ 20 ᶃ ڞ௨ϥΠϒϥϦͷѻ͍͕͏·͍͔͘ͳ͍ ◦ ֤ϦϙδτϦͰಉ͡Α͏ͳϩδοΫ͕ग़ͯ͘Δ ▪ → ϘΠϥʔϓϨʔτԽ
◦ ղܾ͠Α͏ͱɺڞ௨ϥΠϒϥϦԽ͢Δ
2. എܠͱͯ͠ͷ͘͠͡Γ 21 ᶃ ڞ௨ϥΠϒϥϦͷѻ͍͕͏·͍͔͘ͳ͍ ◦ ֤ϦϙδτϦͰಉ͡Α͏ͳϩδοΫ͕ग़ͯ͘Δ ▪ → ϘΠϥʔϓϨʔτԽ
◦ ղܾ͠Α͏ͱɺڞ௨ϥΠϒϥϦԽ͢Δ ▪ → ڞ௨ϥΠϒϥϦΛઌʹमਖ਼ͯ͠Ϛʔδ͠ͳ͍ͱ͑ͳ͍... ▪ → ʮ͜Εमਖ਼ͨ͠ΒଞʹӨڹ͋ΔΜ͡Ό...ʯ ◦ → ڞ௨ϥΠϒϥϦ͕ൃల͠ͳ͍ & ϘΠϥʔϓϨʔτੜ·Ε͍͢
ϦϙδτϦΒΒ ᶄ Go ͷόʔδϣϯϥΠϒϥϦͷߋ৽͕େม 22 22 2. എܠͱͯ͠ͷ͘͠͡Γ
ᶄ Go ͷόʔδϣϯϥΠϒϥϦͷߋ৽͕େม ◦ ʮ͋ɺ͜ͷϥΠϒϥϦ service A Ͱ v2 ͚ͩͲɺ
service B v1 ͳΜͩʯ ▪ service A Λ্͛ͨλΠϛϯάͰ্͓͚͛ͯΕ... ◦ ʮ͊͞ɺGo 1.17 ͕ϦϦʔε͞Εͨͧʯ ▪ → ֤ϦϙδτϦͰͪΐͪ͜ΐ͜PRΛग़͢͜ͱʹ... ◦ Dependabot PR ϙνϙν... 2. എܠͱͯ͠ͷ͘͠͡Γ 23
ϦϙδτϦΒΒ ᶅ ϚʔδͷλΠϛϯάΛ͋Θͤͳ͍ͱ͍͚ͳ͍ 24 24 2. എܠͱͯ͠ͷ͘͠͡Γ
ᶅ ϚʔδͷλΠϛϯάΛ͋Θͤͳ͍ͱ͍͚ͳ͍ ◦ ͜ͷ։ൃ service A ͱ service B ͷमਖ਼͕ඞཁͩ
▪ → ͋ɺͰ service A service B ʹґଘ͍ͯ͠Δ͔Βɺservice B Λઌ ʹϚʔδ͠ͳ͍ͱ service A ͷ CI ͕ࣦഊ͢Δͧ... ◦ ͞ΒʹɺgRPC ͷͨΊͷ proto ϑΝΠϧΛαʔόʔଆ ஔ͍ͨ͜ͱͰෳࡶԽ ▪ ΫϥΠΞϯτଆͰίʔυੜ͢Δࡍʹ proto ϑΝΠϧΛμϯϩʔυ͢ Δߏʹͳͬͯ͠·ͬͨ... 2. എܠͱͯ͠ͷ͘͠͡Γ 25
ᶃ ڞ௨ϥΠϒϥϦͷѻ͍͕͏·͍͔͘ͳ͍ ᶄ Go ͷόʔδϣϯϥΠϒϥϦͷߋ৽͕େม ᶅ ϚʔδͷλΠϛϯάΛ͋Θͤͳ͍ͱ͍͚ͳ͍ 26 26 2.
എܠͱͯ͠ͷ͘͠͡Γ ͜ΕΒΛͳΜͱ͔ղফ͍ͨ͠...!
ΒΒͷϦϙδτϦΛ·ͱΊΑ͏ʂ 27 27 2. എܠͱͯ͠ͷ͘͠͡Γ
ϞϊϨϙԽΔͧʂ 28 28 2. എܠͱͯ͠ͷ͘͠͡Γ
ϞϊϨϙԽΔͧʂ 29 29 2. എܠͱͯ͠ͷ͘͠͡Γ
Go ϞϊϨϙͷྨ 30 30
ϞϊϨϙͱ 31 31 3. Go ϞϊϨϙͷྨ
• ϞϊϨϙ(Mono Repository) ◦ ෳͷύοέʔδ(Ϟδϡʔϧ)ΛҰͭͷϦϙδτϦͰཧ͢Δ͜ͱ ◦ ϝϦοτ ▪ Ұׅཧ͕͍͢͠ ◦
σϝϦοτ ▪ ಛఆͷύοέʔδ͔Β͢Δͱແؔͳͷ͕ଟ͍(ιʔεɺίϛοτ) ◦ ࠓճͷࣄྫ ▪ 1νʔϜ͕ཧ͍ͯͨ͠10ఔͷϦϙδτϦͷ౷߹(খن) 3. Go ϞϊϨϙͷྨ 32
ϞϊϨϙԽͰͷղফΠϝʔδ 33 33 2. platform ͱͯ͠ٻΊΒΕͨͷ
3. Go ϞϊϨϙͷྨ 34 • ϞϊϨϙͰͷղফΠϝʔδ ◦ ෳͷύοέʔδͷίϛοτɾϚʔδΛΞτϛοΫʹͰ͖Δ
3. Go ϞϊϨϙͷྨ 35 • ϞϊϨϙͰͷղফΠϝʔδ ◦ ෳͷύοέʔδͷίϛοτɾϚʔδΛΞτϛοΫʹͰ͖Δ ▪ Ϛʔδॱ൪ͳͲؾʹ͠ͳͯ͘ྑ͍
▪ ؾܰʹڞ௨ϥΠϒϥϦΛΓग़ͤͯɺϝϯςφϯε͍͢͠ ▪ CI Ͱύοέʔδؒͷςετ͕Ͱ͖Δ
• ϞϊϨϙͰͷղফΠϝʔδ ◦ ෳͷύοέʔδͷίϛοτɾϚʔδΛΞτϛοΫʹͰ͖Δ ▪ Ϛʔδॱ൪ͳͲؾʹ͠ͳͯ͘ྑ͍ ▪ ؾܰʹڞ௨ϥΠϒϥϦΛΓग़ͤͯɺϝϯςφϯε͍͢͠ ▪ CI
Ͱύοέʔδؒͷςετ͕Ͱ͖Δ ◦ ґଘͷڞ௨Խͤ͞Δ͜ͱ͕Ͱ͖Δ 3. Go ϞϊϨϙͷྨ 36
3. Go ϞϊϨϙͷྨ 37 • ϞϊϨϙͰͷղফΠϝʔδ ◦ ෳͷύοέʔδͷίϛοτɾϚʔδΛΞτϛοΫʹͰ͖Δ ▪ Ϛʔδॱ൪ͳͲؾʹ͠ͳͯ͘ྑ͍
▪ ؾܰʹڞ௨ϥΠϒϥϦΛΓग़ͤͯɺϝϯςφϯε͍͢͠ ▪ CI Ͱύοέʔδؒͷςετ͕Ͱ͖Δ ◦ ґଘͷڞ௨Խͤ͞Δ͜ͱ͕Ͱ͖Δ ▪ Ұׅͯ͠ɺGoϥΠϒϥϦͷߋ৽ɾཧ͕Ͱ͖Δ
Α͠ɺϞϊϨϙΛࢼͯ͠ΈΑ͏ 38 38 3. Go ϞϊϨϙͷྨ
Ͳ͏ͬͨΒྑ͍Μ͚ͩͬʁ 1ͭʹ·ͱΊΔʹ৭ʑ͋Γͦ͏... 39 39 3. Go ϞϊϨϙͷྨ
গ͠ཧͯ͠ྨͯ͠Έͨ 40 40 3. Go ϞϊϨϙͷྨ
3. Go ϞϊϨϙͷྨ 41 • Go module ʹͨ͠ྨ ◦ go.mod
Ұ͚ͭͩ: Mono Module ▪ root ʹ go.mod Λ͓͍ͯɺશମΛҰͭͷ Go Module ͱͯ͠ѻ͏ํ๏ ▪ → ಠཱੑ͕͍(go.mod ʹॻ͔ͣʹґଘͰ͖Δ) ◦ go.mod ͨ͘͞Μ: Multi Module ▪ ֤σΟϨΫτϦʹ go.mod Λஔ͖ɺͦΕͧΕΛ Go Module ͱͯ͠ѻ͏ ▪ → ಠཱੑ͕ߴ͍(go.mod ʹॻ͔ͳ͍ͱґଘͰ͖ͳ͍)
• Mono Module ◦ ಠཱੑ͍ 3. Go ϞϊϨϙͷྨ 42 •
Multi Module ◦ ಠཱੑߴ͍
Monorepo / Multirepo ߹Θͤͯཧ͢Δͱ... 43 43 3. Go ϞϊϨϙͷྨ
3. Go ϞϊϨϙͷྨ 44
3. Go ϞϊϨϙͷྨ 45 ɾύοέʔδΛލ͍ͰґଘΛ࣋ͯΔ ɾґଘΛ੍ޚ͍ͨ͠ͳΒ੩తղੳඞཁ ɾґଘͷڞ௨Խ͕͍͢͠
3. Go ϞϊϨϙͷྨ 46 ɾϞδϡʔϧؒͷґଘΛ੍ޚ͍͢͠ ɾϞϊϨϙҠߦ͕ൺֱత͍͢͠ ɾґଘͷڞ௨Λ͠ͳͯ͘ྑ͍
3. Go ϞϊϨϙͷྨ 47 ɾBazel ͳͲͷϏϧυπʔϧɺ͜ͷߏ ͷҧ্͍͕͋ͬͨʹՃͰಋೖ͢ΔΠ ϝʔδΛ࣋ͭͱྑ͍
ࠓճɺͲͷܗΛࢦ͖͔͢ 48 48 3. Go ϞϊϨϙͷྨ
3. Go ϞϊϨϙͷྨ 49
3. Go ϞϊϨϙͷྨ 50
3. Go ϞϊϨϙͷྨ 51
• Mono Module બΜͩཧ༝: ֤՝ͷղফ ◦ ᶃ ڞ௨ϥΠϒϥϦͷѻ͍͕͏·͍͔͘ͳ͍ ▪ ͜Ε͔Β
Go package ͱͯ͠ڞ௨ϥΠϒϥϦΛ࡞ΕOK ▪ ୯ମςετΛॻ͘͜ͱͰڞ௨ϥΠϒϥϦͷमਖ਼͘͢͠ 3. Go ϞϊϨϙͷྨ 52
• Mono Module બΜͩཧ༝: ֤՝ͷղফ ◦ ᶃ ڞ௨ϥΠϒϥϦͷѻ͍͕͏·͍͔͘ͳ͍ ▪ ͜Ε͔Β
Go package ͱͯ͠ڞ௨ϥΠϒϥϦΛ࡞ΕOK ▪ ୯ମςετΛॻ͘͜ͱͰڞ௨ϥΠϒϥϦͷमਖ਼͘͢͠ ◦ ᶄ Go ͷόʔδϣϯϥΠϒϥϦͷߋ৽͕େม ▪ ϧʔτͷ go.mod ͱ .go-version ͷॻ͖͑ͰOK 3. Go ϞϊϨϙͷྨ 53
• Mono Module બΜͩཧ༝: ֤՝ͷղফ ◦ ᶃ ڞ௨ϥΠϒϥϦͷѻ͍͕͏·͍͔͘ͳ͍ ▪ ͜Ε͔Β
Go package ͱͯ͠ڞ௨ϥΠϒϥϦΛ࡞ΕOK ▪ ୯ମςετΛॻ͘͜ͱͰڞ௨ϥΠϒϥϦͷमਖ਼͘͢͠ ◦ ᶄ Go ͷόʔδϣϯϥΠϒϥϦͷߋ৽͕େม ▪ ϧʔτͷ go.mod ͱ .go-version ͷॻ͖͑ͰOK ◦ ᶅ ϚʔδͷλΠϛϯάΛ͋Θͤͳ͍ͱ͍͚ͳ͍ ▪ શ෦ҰॹʹͳΔͷͰOK 3. Go ϞϊϨϙͷྨ 54
• Ҡߦͷํ ◦ Mono Module Monorepo ͰҠߦ͢Δ ◦ εϞʔϧελʔτͱͯ͠ɺGoͷϦϙδτϦͷΈͰ࣮ࢪ ◦
Mono Module + গ͠ Bazel ▪ ڞ௨ͯ͠͏ϥΠϒϥϦ͕ଟ͘ɺύοέʔδͷಠཱੑ͕ඞཁͳ͍ ▪ ϏϧυͷύϑΥʔϚϯεͷ্ࠓޙϞϊϨϙͷൣғΛ͛Δͱ͖ʹ ར༻Ͱ͖ΔΑ͏ʹɺඞཁʹԠͯ͡গͣͭ͠ Bazel ΛೖΕ͍ͯ͘ 3. Go ϞϊϨϙͷྨ 55
ϞϊϨϙҠߦͱࠓޙ 56 56
• ϞϊϨϙҠߦͷεςοϓ ◦ ίʔυͷमਖ਼ ◦ ࣗಈੜπʔϧͷରԠ ◦ CI ରԠ 4.
ϞϊϨϙҠߦͱࠓޙ 57
• ίʔυͷमਖ਼ ◦ git clone ͰϦϙδτϦͷऩू 4. ϞϊϨϙҠߦͱࠓޙ 58
• ίʔυͷमਖ਼ ◦ git clone ͰϦϙδτϦͷऩू ◦ import จͷमਖ਼ ▪
`github.com/organization/serviceA` → `github.com/organization/ XXXservice/serviceA` 4. ϞϊϨϙҠߦͱࠓޙ 59
• ίʔυͷमਖ਼ ◦ git clone ͰϦϙδτϦͷऩू ◦ import จͷमਖ਼ ▪
`github.com/organization/serviceA` → `github.com/organization/ XXXservice/serviceA` ◦ go.mod ͷ౷߹ ▪ ؆୯ʹίϐϖͰҰͭʹ·ͱΊΕOK ▪ ϥΠϒϥϦͷόʔδϣϯͱ͔ἧ͍͑ͨͳΒదٓमਖ਼ 4. ϞϊϨϙҠߦͱࠓޙ 60
• ࣗಈੜπʔϧͷରԠ ◦ πʔϧࣗମͦͷ··ಈ͘ͷ͕ଟ͍ ▪ ࠓճͷզʑͷέʔεͰ proto पΓվम͕ඞཁ ◦ ύοέʔδΛԣஅ࣮ͯ͠ߦͰ͖Δ
Makefile εΫϦϓτΛՃ 4. ϞϊϨϙҠߦͱࠓޙ 61
• ࣗಈੜπʔϧͷରԠ ◦ πʔϧࣗମͦͷ··ಈ͘ͷ͕ଟ͍ ▪ ࠓճͷզʑͷέʔεͰ proto पΓվम͕ඞཁ ◦ ύοέʔδΛԣஅ࣮ͯ͠ߦͰ͖Δ
Makefile εΫϦϓτΛՃ 4. ϞϊϨϙҠߦͱࠓޙ 62
• ࣗಈੜπʔϧͷରԠ ◦ πʔϧࣗମͦͷ··ಈ͘ͷ͕ଟ͍ ▪ ࠓճͷզʑͷέʔεͰ proto पΓվम͕ඞཁ ◦ ύοέʔδΛԣஅ࣮ͯ͠ߦͰ͖Δ
Makefile εΫϦϓτΛՃ 4. ϞϊϨϙҠߦͱࠓޙ 63
• CI ରԠ ◦ ҎԼΛຬͨ͢Α͏ʹमਖ਼ 4. ϞϊϨϙҠߦͱࠓޙ 64
• CI ରԠ ◦ ҎԼΛຬͨ͢Α͏ʹमਖ਼ ▪ ෆཁͳϏϧυΛճ͞ͳ͍Α͏ʹ͍ͨ͠ ▪ मਖ਼ͨ͠ൣғʹґଘ͍ͯ͠Δͱ͜ΖͷϏϧυճ͍ͨ͠ ◦
CI ʹΑͬͯɺpath filtering ͱ͍͏ػೳΛ࣮ͬͯݱͰ͖Δ͜ͱ͕ଟ͍ 4. ϞϊϨϙҠߦͱࠓޙ 65
• CI ରԠ ◦ Circle CI ͷྫ (GitHub Actions ʹྨࣅͷplugin͕͋Δ༷)
4. ϞϊϨϙҠߦͱࠓޙ 66
4. ϞϊϨϙҠߦͱࠓޙ • Ҡߦʹؔͯ͠ؾ͍ͮͨ͜ͱ ◦ νʔϜ͔ͭಉҰݴޠͰ·ͱΊΔͷͦ͜·Ͱେม͡Όͳ͔ͬͨ ▪ νʔϜϝϯόʔͰগͣͭ͠ΩϟονΞοϓ͍ͯ͘͜͠ͱ͕Ͱ͖Δ 67
4. ϞϊϨϙҠߦͱࠓޙ • Ҡߦʹؔͯ͠ؾ͍ͮͨ͜ͱ ◦ νʔϜ͔ͭಉҰݴޠͰ·ͱΊΔͷͦ͜·Ͱେม͡Όͳ͔ͬͨ ▪ νʔϜϝϯόʔͰগͣͭ͠ΩϟονΞοϓ͍ͯ͘͜͠ͱ͕Ͱ͖Δ ◦ ίʔυੜܥΛ
Bazel Ͱ͍ͬͯ͘ͷେม ▪ mockgen ࣗલͷ rule Λ࡞͕ͨ͠ɺͳΕΔ·Ͱ͔ͳΓݫ͍͠ 68
4. ϞϊϨϙҠߦͱࠓޙ • Ҡߦʹؔͯ͠ؾ͍ͮͨ͜ͱ ◦ νʔϜ͔ͭಉҰݴޠͰ·ͱΊΔͷͦ͜·Ͱେม͡Όͳ͔ͬͨ ▪ νʔϜϝϯόʔͰগͣͭ͠ΩϟονΞοϓ͍ͯ͘͜͠ͱ͕Ͱ͖Δ ◦ ίʔυੜܥΛ
Bazel Ͱ͍ͬͯ͘ͷେม ▪ mockgen ࣗલͷ rule Λ࡞͕ͨ͠ɺͳΕΔ·Ͱ͔ͳΓݫ͍͠ ◦ ࣄલʹϥΠϒϥϦͷߋ৽Λ࣮ࢪ͓͔ͯ͠ͳ͍ͱେม ▪ 3ͭҎ্ͷόʔδϣϯ͕͔ͪ߹͏͜ͱ... 69
• ࠓޙͷల ◦ ࠓճεϞʔϧελʔτͱͯ͠ɺνʔϜͷGo ϨϙδτϦ͚ͩͰ։࢝ ◦ ࠓޙɺଞͷϨϙδτϦΛগͣͭ͠Ճ༧ఆ ▪ ϝϦοτ͕͋Γͦ͏ͳΒଞνʔϜͷαʔϏεՃ༧ఆ 4.
ϞϊϨϙҠߦͱࠓޙ 70
·ͱΊ 71 71
• ·ͱΊ ◦ Mono Module Monorepo ͱ Multi Module Monorepo
▪ ಠཱੑ͕ͲΕ͚ͩඞཁ͔Ͱબ͢Δ ◦ Go ϞϊϨϙϏϧυπʔϧΛؤுΓ͗ͣ࢝͢ΊΔͷ͕͓͢͢Ί ▪ Bazel ͰશʹΖ͏ͱ͢Δͱେม ▪ → ඞཁʹԠͯ͡গͣͭ͠ೖΕ͍ͯ͘ ◦ ϞϊϨϙԽʹΑͬͯDX(։ൃମݧ)͕վળͰ͖ͨ ▪ 1νʔϜͷϚΠΫϩαʔϏεͳΒσϝϦοτগͳ͓͘͢͢Ί 5. ·ͱΊ 72