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.1k
GoConference_人生いろいろモノレポもいろいろ
株式会社ビットキー / Bitkey Inc.
PRO
November 13, 2021
Tweet
Share
More Decks by 株式会社ビットキー / Bitkey Inc.
See All by 株式会社ビットキー / Bitkey Inc.
待つ、歩く、そして祈る -モバイルアプリの厄介なテスト奮闘記-/Wait, Walk, and Pray -The Troublesome Struggle of Mobile App Testing-
bitkey
PRO
1
32
見栄えと使いやすさの先にある 特別感 をデザインする / Designing a Sense of Specialness Beyond Aesthetics and Usability
bitkey
PRO
0
90
フレームワーク探しはもう終わり! チームに「ジャストフィット」するワークショップの作り方 / No More Framework Searching: How to Build a 'Just-Fit' Workshop for Your Team
bitkey
PRO
0
61
一次体験を起点にしたUX改善の取り組み / Direct Experience Driven UX Improvements
bitkey
PRO
0
260
ユーザー体験は細部に宿る -ウィジェットQAの挑戦と気づき- / UX is in the details: Challenges and Learnings from Widget QA
bitkey
PRO
0
110
ハードウェアとソフトウェアをつなぐ全てを内製している企業の E2E テストの作り方 / How to create E2E tests for a company that builds everything connecting hardware and software in-house
bitkey
PRO
1
290
チームビルドのためのワークショップ設計/Workshop design for team building
bitkey
PRO
0
72
「職種に名前が付く、ということ」 / When a Role Gets a Name
bitkey
PRO
0
38
ゼロから始めるEnabling SRE〜Datadogへの戸惑いや敬遠を無くすためにやったこと〜
bitkey
PRO
0
36
Other Decks in Technology
See All in Technology
Biz職でもDifyでできる! 「触らないAIワークフロー」を実現する方法
igarashikana
7
3.3k
Building a cloud native business on open source
lizrice
0
180
Zephyr(RTOS)にEdge AIを組み込んでみた話
iotengineer22
1
340
SOTA競争から人間を超える画像認識へ
shinya7y
0
170
もう外には出ない。より快適なフルリモート環境を目指して
mottyzzz
13
10k
Azure Well-Architected Framework入門
tomokusaba
1
120
Databricks AI/BI Genie の「値ディクショナリー」をAmazonの奥地(S3)まで見に行く
kameitomohiro
1
400
入院医療費算定業務をAIで支援する:包括医療費支払い制度とDPCコーディング (公開版)
hagino3000
0
110
AI AgentをLangflowでサクッと作って、1日働かせてみた!
yano13
1
150
オブザーバビリティが育むシステム理解と好奇心
maruloop
2
1k
Copilot Studio ハンズオン - 生成オーケストレーションモード
tomoyasasakimskk
0
220
FinOps について (ちょっと) 本気出して考えてみた
skmkzyk
0
210
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
84
9.2k
Making the Leap to Tech Lead
cromwellryan
135
9.6k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Mobile First: as difficult as doing things right
swwweet
225
10k
Visualization
eitanlees
149
16k
Thoughts on Productivity
jonyablonski
70
4.9k
How to Think Like a Performance Engineer
csswizardry
27
2.1k
Automating Front-end Workflow
addyosmani
1371
200k
RailsConf 2023
tenderlove
30
1.3k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
2.9k
Leading Effective Engineering Teams in the AI Era
addyosmani
7
610
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