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
サクッと作る静的解析ツール -importの依存制御ツールを作る-
Search
株式会社ビットキー / Bitkey Inc.
PRO
June 29, 2022
Technology
0
520
サクッと作る静的解析ツール -importの依存制御ツールを作る-
株式会社ビットキー / Bitkey Inc.
PRO
June 29, 2022
Tweet
Share
More Decks by 株式会社ビットキー / Bitkey Inc.
See All by 株式会社ビットキー / Bitkey Inc.
一次体験を起点にしたUX改善の取り組み / Direct Experience Driven UX Improvements
bitkey
PRO
0
19
ユーザー体験は細部に宿る -ウィジェットQAの挑戦と気づき- / UX is in the details: Challenges and Learnings from Widget QA
bitkey
PRO
0
5
ハードウェアとソフトウェアをつなぐ全てを内製している企業の E2E テストの作り方 / How to create E2E tests for a company that builds everything connecting hardware and software in-house
bitkey
PRO
1
170
チームビルドのためのワークショップ設計/Workshop design for team building
bitkey
PRO
0
55
「職種に名前が付く、ということ」 / When a Role Gets a Name
bitkey
PRO
0
25
ゼロから始めるEnabling SRE〜Datadogへの戸惑いや敬遠を無くすためにやったこと〜
bitkey
PRO
0
18
「書く」より「任せる」! 生成AIでローコード自動テストの属人化を防ぐ! / Delegate, Don't Write! Preventing Silos in Low-Code Auto-Testing with Gen AI
bitkey
PRO
0
65
オフィスビルを監視しよう:フィジカル×デジタルにまたがるSLI/SLO設計と運用の難しさ / Monitoring Office Buildings: The Challenge of Physical-Digital SLI/SLO Design & Operation
bitkey
PRO
3
570
事例で学ぶ!B2B SaaSにおけるSREの実践例/SRE for B2B SaaS: A Real-World Case Study
bitkey
PRO
1
580
Other Decks in Technology
See All in Technology
IoT x エッジAI - リアルタイ ムAI活用のPoCを今すぐ始め る方法 -
niizawat
0
120
メルカリIBISの紹介
0gm
0
430
新規プロダクトでプロトタイプから正式リリースまでNext.jsで開発したリアル
kawanoriku0
1
220
AIエージェントで90秒の広告動画を制作!台本・音声・映像・編集をつなぐAWS最新アーキテクチャの実践
nasuvitz
3
360
エンジニアが主導できる組織づくり ー 製品と事業を進化させる体制へのシフト
ueokande
1
110
「全員プロダクトマネージャー」を実現する、Cursorによる仕様検討の自動運転
applism118
22
12k
バイブスに「型」を!Kent Beckに学ぶ、AI時代のテスト駆動開発
amixedcolor
3
590
react-callを使ってダイヤログをいろんなとこで再利用しよう!
shinaps
2
270
DroidKaigi 2025 Androidエンジニアとしてのキャリア
mhidaka
2
390
EncryptedSharedPreferences が deprecated になっちゃった!どうしよう! / Oh no! EncryptedSharedPreferences has been deprecated! What should I do?
yanzm
0
490
いま注目のAIエージェントを作ってみよう
supermarimobros
0
360
機械学習を扱うプラットフォーム開発と運用事例
lycorptech_jp
PRO
0
670
Featured
See All Featured
Optimizing for Happiness
mojombo
379
70k
jQuery: Nuts, Bolts and Bling
dougneiner
64
7.9k
Code Review Best Practice
trishagee
71
19k
Facilitating Awesome Meetings
lara
55
6.5k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
850
The Cult of Friendly URLs
andyhume
79
6.6k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.6k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.9k
The World Runs on Bad Software
bkeepers
PRO
70
11k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
Done Done
chrislema
185
16k
Transcript
Bitkey Inc. Connect Product Noriki Takahashi αΫοͱ࡞Δ੩తղੳπʔϧ -import ͷґଘ੍ޚπʔϧΛ࡞Δ-
Outline 2 2 1. ࣗݾհ 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ 3. ܗੜπʔϧ: skeleton
4. ੩తղੳ༻ύοέʔδ: analysis 5. ύοέʔδґଘ੍ޚπʔϧ࣮ 6. ·ͱΊ
1. ࣗݾհ 3 • ∁ڮయੜ(Noriki Takahashi) ◦ Twitter: @norinoriki0 ◦
GitHub: nrnrk • גࣜձࣾBitkey ◦ bitkey platform ͱ͍͏"ΧΪ"ͷϓϥοτϑΥʔϜͷ։ൃ • Go Ͱ GKE ্Ͱಈ͘APIαʔόʔͷ։ൃͳͲΛ͍ͯ͠·͢ • झຯ: ֶɾཧֶ ◦ zk-SNARKs ͷֶతͳଆ໘ΛטΈࡅ͘هࣄΛॻ͍ͨΓͯ͠·͢
1. ࣗݾհ 4 • ∁ڮయੜ(Noriki Takahashi) ◦ Twitter: @norinoriki0 ◦
GitHub: nrnrk • גࣜձࣾBitkey ◦ bitkey platform ͱ͍͏"ΧΪ"ͷϓϥοτϑΥʔϜͷ։ൃ • Go Ͱ GKE ্Ͱಈ͘APIαʔόʔͷ։ൃͳͲΛ͍ͯ͠·͢ • झຯ: ֶɾཧֶ ◦ zk-SNARKs ͷֶతͳଆ໘ΛטΈࡅ͘هࣄΛॻ͍ͨΓͯ͠·͢
1. ࣗݾհ 5
ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ 6 6
7 7 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ • Go ͷϞϊϨϙͷҰྫ
8 8 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ • Go ͷϞϊϨϙͷҰྫ go.mod ϑΝΠϧϨϙδτϦʹҰͭ →
Go Module ͕1ͭͷϞϊϨϙ
9 9 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ • Go ͷϞϊϨϙͷҰྫ ͍ΘΏΔϥΠϒϥϦ ؔߏମͳͲ͕ೖ͍ͬͯΔ ϞϊϨϙͷଞͷύοέʔδ͔Βར༻͞ΕΔ͜
ͱΛఆ
10 10 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ • Go ͷϞϊϨϙͷҰྫ ֤छαʔϏε HTTPαʔόʔgRPCαʔόʔͳͲ ଞ͔Β
import ͞Εͯ΄͘͠ͳ͍
11 11 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ • Go ͷϞϊϨϙͷҰྫ ࠔΔ͜ͱ ҙਤ͠ͳ͍ґଘ͕͋ͬͯϏϧυ͕௨Δ ྫ:
serviceB → serviceA
12 12 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ • Go ͷϞϊϨϙͷҰྫ ղܾํ๏͍͔ͭ͋͘Δ
13 13 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ • Go ͷϞϊϨϙͷҰྫ ղܾํ๏ᶃ internal ύοέʔδΛར༻
serviceA,B,C ͦΕͧΕͷύοέʔδͰެ։͠ ͨ͘ͳ͍ύοέʔδ internal ͷதʹೖΕΔ
14 14 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ • Go ͷϞϊϨϙͷҰྫ ղܾํ๏ᶃ internal ύοέʔδΛར༻
serviceA,B,C ͦΕͧΕͷύοέʔδͰެ։͠ ͨ͘ͳ͍ύοέʔδ internal ͷதʹೖΕΔ → ڞ௨ར༻͢ΔͷϥΠϒϥϦͱͯ͠Γ ग़͢ͷͰɺશ෦ internal ͷதʹೖΕΔ͜ͱʹ...
15 15 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ • Go ͷϞϊϨϙͷҰྫ ղܾํ๏ᶄ Go Module
ͷׂ serviceA,B,C ҎԼʹ go.mod Λ͓͍ͯผͷϞ δϡʔϧͱΈͳ͢
16 16 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ • Go ͷϞϊϨϙͷҰྫ ղܾํ๏ᶄ Go Module
ͷׂ serviceA,B,C ҎԼʹ go.mod Λ͓͍ͯผͷϞ δϡʔϧͱΈͳ͢ → ཧ͕ࡶʹͳΔͷͰආ͚͍ͨ
17 17 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ • Go ͷϞϊϨϙͷҰྫ ղܾํ๏ᶃɺᶄඪ४తͳํ๏͕ͩɺզʑʹ ϑΟοτ͠ͳ͍...
18 18 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ • Go ͷϞϊϨϙͷҰྫ ղܾํ๏ᶅ linter Ͱ੍ޚ
ύοέʔδؒͷґଘΛνΣοΫͯ͠CIͳͲͰ੍ ޚͰ͖ΔΑ͏ʹ͢Δ
19 19 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ • Go ͷϞϊϨϙͷҰྫ ղܾํ๏ᶅ linter Ͱ੍ޚ
ύοέʔδؒͷґଘΛνΣοΫͯ͠CIͳͲͰ੍ ޚͰ͖ΔΑ͏ʹ͢Δ → ͪΐͬͱअಓͬΆ͍͕ɺࠓճ͜ΕΛࢼ͢
ґଘੑΛνΣοΫ͢ΔΑ͏ͳ linter Λ୳ͦ͏ 20 20 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ
͏ʔΜɺɺɺͳ͍ 21 21 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ
ࣗ࡞ linter Ͱ͍͔͘... 22 22 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ
Ͱ੩తղੳ͔ɺ ͳΜ͔େมͦ͏ͩͳ 23 23 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ
ͱࢥͬͪΌ͍·ͨ͠ 24 24 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ
͕ɺ͔͠͠ 25 25 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ
࣮ࡍʹͬͯΈΔͱ݁ߏ؆୯ʂ 26 26 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ
skeleton (ܗੜπʔϧ) ४ެࣜͷ analysis ύοέʔδͷ ͓͔͛Ͱ؆୯ʹαΫοͱ࡞Εͨ 27 27 2. ϞϊϨϙ։ൃͰؾʹͳΔ͜ͱ
ܗੜπʔϧ: skeleton 28 28
• skeleton Goͷ੩తղੳπʔϧͷͨΊͷܗΛੜͯ͘͠ΕΔπʔϧ ԼهίϚϯυͰΠϯετʔϧͰ͖·͢ go install github.com/gostaticanalysis/skeleton/v2@latest 3. ܗੜπʔϧ: skeleton
29
• skeleton 30 3. ܗੜπʔϧ: skeleton
• skeleton 31 module ໊Λࢦఆͯ͠ܗ(εέϧτϯ) Λੜ 3. ܗੜπʔϧ: skeleton
• skeleton 32 ίϚϯυ࣮ߦ༻ͷϩδοΫ ͓ܾ·ΓͷϩδοΫ͕͋Δ 3. ܗੜπʔϧ: skeleton
• skeleton 33 ղੳ༻ͷϩδοΫΛఆٛ ࠷ݶ͜͜ʹϩδοΫΛॻ͚ͩ͘Ͱ OK 3. ܗੜπʔϧ: skeleton
• skeleton 34 ୯ମςετ 3. ܗੜπʔϧ: skeleton
• skeleton 35 ୯ମςετ༻ͷσʔλ ੩తղੳͳͷͰ ςετ༻σʔλ = ιʔείʔυ 3. ܗੜπʔϧ:
skeleton
੩తղੳ༻ύοέʔδ: analysis 36 36
• analysis ύοέʔδ ◦ ੩తղੳ༻ͷ"४ެࣜ"ύοέʔδ (golang.org/x/tools/go/analysis) ▪ → ੩తղੳʹ͓͚ΔϝΠϯͷϩδοΫ͚ͩʹूதͰ͖Δ 4.
੩తղੳ༻ύοέʔδ: analysis 37
• analysis ύοέʔδ ◦ ੩తղੳ༻ͷ"४ެࣜ"ύοέʔδ (golang.org/x/tools/go/analysis) ▪ → ੩తղੳʹ͓͚ΔϝΠϯͷϩδοΫ͚ͩʹूதͰ͖Δ ◦
ಛ ▪ Analyzer ߏମͰ੩తղੳͷ݁Ռͷ࠶ར༻͕؆୯ʹ 4. ੩తղੳ༻ύοέʔδ: analysis 38
• analysis ύοέʔδ ◦ ੩తղੳ༻ͷ"४ެࣜ"ύοέʔδ (golang.org/x/tools/go/analysis) ▪ → ੩తղੳʹ͓͚ΔϝΠϯͷϩδοΫ͚ͩʹूதͰ͖Δ ◦
ಛ ▪ Analyzer ߏମͰ੩తղੳͷ݁Ռͷ࠶ར༻͕؆୯ʹ ◦ ઌఔͷ skeleton Ͱੜ͞ΕͨίʔυͰΘΕ͍ͯΔ 4. ੩తղੳ༻ύοέʔδ: analysis 39
• Analyzer ߏମ(࠶ར༻ͳ͠ͷ࠷γϯϓϧͳྫ) 4. ੩తղੳ༻ύοέʔδ: analysis 40 mylinter.go
• Analyzer ߏମ(࠶ར༻ͳ͠ͷ࠷γϯϓϧͳྫ) 4. ੩తղੳ༻ύοέʔδ: analysis 41 analyzer ͷ໊শ (≒
linter ͷ໊শ) mylinter.go
• Analyzer ߏମ(࠶ར༻ͳ͠ͷ࠷γϯϓϧͳྫ) 4. ੩తղੳ༻ύοέʔδ: analysis 42 υΩϡϝϯτ analyzer ʹ͍ͭͯͷ
આ໌ mylinter.go
• Analyzer ߏମ(࠶ར༻ͳ͠ͷ࠷γϯϓϧͳྫ) 4. ੩తղੳ༻ύοέʔδ: analysis 43 ղੳ༻ϩδοΫ → ࠷ݶɺ͜͜ʹϩ
δοΫॻ͚ͩ͘Ͱ OK mylinter.go
• Analyzer ߏମ ͷ࠶ར༻ • Analyzer ߏମΛఆٛ͢Δࡍʹɺଞͷ Analyzer Λར༻͢Δ͜ͱ͕Ͱ͖Δ 4.
੩తղੳ༻ύοέʔδ: analysis 44
• Analyzer ߏମ ͷ࠶ར༻ • Analyzer ߏମΛఆٛ͢Δࡍʹɺଞͷ Analyzer Λར༻͢Δ͜ͱ͕Ͱ͖Δ •
ྫ: golang.org/x/tools/go/analysis/passes/inspect.Analyzer Λ༻͍ͯϊʔ υͷϑΟϧλϦϯά 4. ੩తղੳ༻ύοέʔδ: analysis 45
• Analyzer ߏମ ͷ࠶ར༻ • Analyzer ߏମΛఆٛ͢Δࡍʹɺଞͷ Analyzer Λར༻͢Δ͜ͱ͕Ͱ͖Δ •
ྫ: golang.org/x/tools/go/analysis/passes/inspect.Analyzer Λ༻͍ͯϊʔυ ͷϑΟϧλϦϯά 4. ੩తղੳ༻ύοέʔδ: analysis 46 Analyzer ͷ࠶ར༻ͷ؆୯ͳྫͱͯ͠ɺ ࣝผࢠ͕ "gopher" ͱͳ͍ͬͯΔͷΛݟ͚ͭΔ࣮ྫΛݟͯΈΔ → ࣍ͷεϥΠυ ※ skeleton ͔Βੜ͞ΕΔαϯϓϧ
4. ੩తղੳ༻ύοέʔδ: analysis 47
4. ੩తղੳ༻ύοέʔδ: analysis 48 mylinter.go
4. ੩తղੳ༻ύοέʔδ: analysis 49 ࠶ར༻͢Δ Analyzer Λఆٛ ͜͜ͰɺAST ݕࠪ༻ ͷ
Analyzer Λར༻ golang.org/x/tools/go/ analysis/passes/ inspect mylinter.go
4. ੩తղੳ༻ύοέʔδ: analysis 50 run ͷதͰ inspect.Analyzer ͷग़ ྗ͢Δ݁ՌΛར༻ mylinter.go
4. ੩తղੳ༻ύοέʔδ: analysis 51 ast.Ident (Identifier = ࣝผࢠ) ͷΈʹߜΔͨ ΊͷϑΟϧλ
mylinter.go
4. ੩తղੳ༻ύοέʔδ: analysis 52 inspect Λར༻ͯ͠ ast.Ident ͷΈʹߜͬͯ ॲཧ͢Δ ଞͷ
AST ͷϊʔυ͕ དྷͨͱ͖ͷॲཧΛॻ͔ ͳͯ͘ྑ͍ʂ mylinter.go
4. ੩తղੳ༻ύοέʔδ: analysis 53 ಠࣗͷϩδοΫ͜͜ ͚ͩ analysis ύοέʔδΛ ͏͜ͱͰ͜͜ʹ͚ͩ ूத͢Δ͜ͱ͕Ͱ͖Δ
mylinter.go
• [༨ஊ] inspect Analyzer ͷఆٛ 4. ੩తղੳ༻ύοέʔδ: analysis 54
• [༨ஊ] inspect Analyzer ͷఆٛ 4. ੩తղੳ༻ύοέʔδ: analysis 55 ͜͜Ͱ࠶ར༻͢Δ݁Ռͷ
ܕΛఆٛ
ύοέʔδґଘ੍ޚπʔϧ࣮ 56 56
• ύοέʔδґଘ੍ޚπʔϧ(banimport)࣮ ◦ ࣮ݱ͍ͨ͜͠ͱ ▪ ύοέʔδؒͷґଘΛ੍ޚ͍ͨ͠ 5. ύοέʔδґଘ੍ޚπʔϧ࣮ 57
• ύοέʔδґଘ੍ޚπʔϧ(banimport)࣮ ◦ ࣮ݱ͍ͨ͜͠ͱ ▪ ύοέʔδؒͷґଘΛ੍ޚ͍ͨ͠ ◦ ༷ ▪ ېࢭ͢Δґଘ͕͋ͬͨΒՕॴΛಛఆͯ͠ΤϥʔΛฦ͢
▪ ઃఆϑΝΠϧ (.banimport.json) • ېࢭ͢Δґଘͷjsonఆٛ 5. ύοέʔδґଘ੍ޚπʔϧ࣮ 58
• ᶃ skeleton Ͱܗ࡞ 5. ύοέʔδґଘ੍ޚπʔϧ࣮ 59
• ᶄ ςετ࡞ 5. ύοέʔδґଘ੍ޚπʔϧ࣮ 60
• ᶄ ςετ࡞ 5. ύοέʔδґଘ੍ޚπʔϧ࣮ 61 ςετσʔλ࡞ → ࠓճෳͷύοέʔδͷґଘؔ ͷςετ͕͍ͨ͠ͷͰߏΛগ͠มߋ
• ᶄ ςετ࡞ 5. ύοέʔδґଘ੍ޚπʔϧ࣮ 62 ෦ʹෳͷύοέʔδ͕͋Δ͜ͷ ·ͱ·ΓΛҰͭͷσʔληοτͱ͢ Δ
• ᶄ ςετ࡞ 5. ύοέʔδґଘ੍ޚπʔϧ࣮ 63 ͜Ε svca, svcb, svcc
͔Βར༻͞ ΕͯOK
• ᶄ ςετ࡞ 5. ύοέʔδґଘ੍ޚπʔϧ࣮ 64 ͜͜ͷؒͰґଘΛ࣋ͨͳ͍Α͏ͳ ϧʔϧʹ͢Δ
• ᶄ ςετ࡞ 5. ύοέʔδґଘ੍ޚπʔϧ࣮ 65 testdata/src/a/srcb/ main.go testdata/src/a/srcc/main.go
• ᶄ ςετ࡞ 5. ύοέʔδґଘ੍ޚπʔϧ࣮ 66 svcb → svcc ʹґଘΛ͓ͨͤͯ͘
→ ͜ΕΤϥʔͱͯ͠ݕग़͢Δ testdata/src/a/srcb/ main.go testdata/src/a/srcc/main.go
• ᶄ ςετ࡞ 5. ύοέʔδґଘ੍ޚπʔϧ࣮ 67 ίϝϯτͰϝοηʔδͷظΛهࡌ // want <͜͜ʹهࡌ>
← analysistest ύοέʔδ͕ղऍ testdata/src/a/srcb/ main.go testdata/src/a/srcc/main.go
• ᶄ ςετ࡞: ઃఆϑΝΠϧ࡞ 5. ύοέʔδґଘ੍ޚπʔϧ࣮ 68 ઃఆϑΝΠϧΛ࡞ Ͳͷύοέʔδ͔ΒͲͷ ύοέʔδʹґଘΛ࣋ͨͳ
͍Α͏ʹ͢Δ͔Λઃఆ .banimport.json
• ᶄ ςετ࡞: ઃఆϑΝΠϧ࡞ 5. ύοέʔδґଘ੍ޚπʔϧ࣮ 69 svca ͔Β svcb,
sbcc ʹґଘ Λ࣋ͨͳ͍Α͏ʹ͢Δ .banimport.json
• ᶄ ςετ࡞: ઃఆϑΝΠϧ࡞ 5. ύοέʔδґଘ੍ޚπʔϧ࣮ 70 svca, svcb, svcc
૬ޓʹґ ଘΛ͍͚࣋ͬͯͳ͍ .banimport.json
• ᶄ ςετ࡞: ςετͷ࣮ߦ 5. ύοέʔδґଘ੍ޚπʔϧ࣮ 71 ςετͷ࣮ߦ
5. ύοέʔδґଘ੍ޚπʔϧ࣮ 72 banimport_test.g o
5. ύοέʔδґଘ੍ޚπʔϧ࣮ 73 ςετͷσʔληοτΛϧʔϓ (b, c ͷςετσʔλՃ) banimport_test.g o
5. ύοέʔδґଘ੍ޚπʔϧ࣮ 74 analysistest ͷσϑΥϧτͷ testadata ύε banimport_test.g o
5. ύοέʔδґଘ੍ޚπʔϧ࣮ 75 import ͷґଘېࢭͷઃఆϑΝΠϧͷಡΈࠐΈ banimport_test.g o
5. ύοέʔδґଘ੍ޚπʔϧ࣮ 76 import ͷґଘېࢭͷઃఆΛϑϥάͱͯ͢͠(࣍ͷᶅ࣮ Ͱհ) banimport_test.g o
5. ύοέʔδґଘ੍ޚπʔϧ࣮ 77 ςετσʔλΛࢦఆ࣮ͯ͠ߦ banimport_test.g o
5. ύοέʔδґଘ੍ޚπʔϧ࣮ 78 ςετΛߦ͏ Analyzer Λࢦఆ banimport_test.g o
5. ύοέʔδґଘ੍ޚπʔϧ࣮ 79 ղੳ͢ΔରͷύοέʔδΛࢦఆ banimport_test.g o
5. ύοέʔδґଘ੍ޚπʔϧ࣮ 80 testdata ͷதͰظ(want)Λॻ͘ͷͰ͜͜ͷϩδοΫεοΩϦʂ banimport_test.g o
• ᶅ ࣮ 5. ύοέʔδґଘ੍ޚπʔϧ࣮ 81 ϝΠϯͱͳΔϩδοΫΛॻ͘
5. ύοέʔδґଘ੍ޚπʔϧ࣮ 82 banimport.go
5. ύοέʔδґଘ੍ޚπʔϧ࣮ 83 Analyzer ͷఆٛ import ͔͠ݟͳ͍ͷͰ ґଘͳ͠ banimport.go
5. ύοέʔδґଘ੍ޚπʔϧ࣮ 84 ϑϥάҾͷఆٛ flags ύοέʔδͱಉͷ ܗͰఆٛՄೳ banimport.go
5. ύοέʔδґଘ੍ޚπʔϧ࣮ 85 run ؔ ϝΠϯͷॲཧΛߦ͏ؔ → ࣍ͷεϥΠυ banimport.go
5. ύοέʔδґଘ੍ޚπʔϧ࣮ 86 banimport.go
5. ύοέʔδґଘ੍ޚπʔϧ࣮ 87 ઃఆ jsonͷύʔε banimport.go
5. ύοέʔδґଘ੍ޚπʔϧ࣮ 88 ֤ϑΝΠϧͷ import ఆٛͷΈॲ ཧ͢Δ banimport.go
5. ύοέʔδґଘ੍ޚπʔϧ࣮ 89 import ͷύεΛऔಘ ※ จࣈྻϦςϥϧ͕ Value ʹೖ͍ͬͯΔͷͰ Unquote
͕ඞཁ banimport.go
5. ύοέʔδґଘ੍ޚπʔϧ࣮ 90 ېࢭ͢Δґଘ͕ݟ ͔ͭͬͨ߹ɺ ϝοηʔδΛग़͢ banimport.go
• ᶆ ಈ࡞֬ೝ 5. ύοέʔδґଘ੍ޚπʔϧ࣮ 91
• ᶆ ಈ࡞֬ೝ 5. ύοέʔδґଘ੍ޚπʔϧ࣮ 92
• ᶆ ಈ࡞֬ೝ 5. ύοέʔδґଘ੍ޚπʔϧ࣮ 93
• ᶆ ಈ࡞֬ೝ 5. ύοέʔδґଘ੍ޚπʔϧ࣮ 94
• ᶆ ಈ࡞֬ೝ 5. ύοέʔδґଘ੍ޚπʔϧ࣮ 95
• ᶆ ಈ࡞֬ೝ 5. ύοέʔδґଘ੍ޚπʔϧ࣮ 96
• ᶆ ಈ࡞֬ೝ 5. ύοέʔδґଘ੍ޚπʔϧ࣮ 97
• ᶆ ಈ࡞֬ೝ 5. ύοέʔδґଘ੍ޚπʔϧ࣮ 98 ग़ྗ݁Ռ
• ᶆ ಈ࡞֬ೝ 5. ύοέʔδґଘ੍ޚπʔϧ࣮ 99 ग़ྗ݁Ռ
• ᶆ ಈ࡞֬ೝ 5. ύοέʔδґଘ੍ޚπʔϧ࣮ 100 ग़ྗ݁Ռ testdata/src/a/srcb/ main.go
5. ύοέʔδґଘ੍ޚπʔϧ࣮ ϞϊϨϙͰύοέʔδґଘͷ੍ޚ͕ Ͱ͖ΔΑ͏ʹͳͬͨʂʂ
5. ύοέʔδґଘ੍ޚπʔϧ࣮ skeleton Λ͑αΫοͱ࡞ΕΔʂ
5. ύοέʔδґଘ੍ޚπʔϧ࣮ ͪ͜Β https://github.com/nrnrk/banimport
·ͱΊ 104 104
• ·ͱΊ ◦ skeleton ΛͬͯαΫοͱ੩తղੳπʔϧ͕࡞ΕΔʂ ◦ ϞϊϨϙͳͲͰύοέʔδؒͷґଘΛ੍ޚ͍ͨ͠߹ ▪ ͞Βʹɺinternal ύοέʔδͷར༻Ϟδϡʔϧͷׂ͕ϑΟοτ͠ͳ͍߹
▪ → banimport Λͬͯύοέʔδؒͷґଘ੍ޚΛࢼ͢Ձ͋Γʂ ▪ CI ͳͲʹΈࠐΉͱޡͬͨ import ͕͛Δ ◦ ͦͷଞ ▪ skeleton ͷຊޠ README ▪ Go ͷ AST ͷೖతͳ༰ʹ͍ͭͯͷաڈͷൃද (એ) 105 6. ·ͱΊ