Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
サクッと作る静的解析ツール -importの依存制御ツールを作る-
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
株式会社ビットキー / Bitkey Inc.
PRO
June 29, 2022
Technology
580
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
サクッと作る静的解析ツール -importの依存制御ツールを作る-
株式会社ビットキー / Bitkey Inc.
PRO
June 29, 2022
More Decks by 株式会社ビットキー / Bitkey Inc.
See All by 株式会社ビットキー / Bitkey Inc.
10年後、Engineering 行為を剥奪されるとして、わたしたちは、どう、何を創ればいいだろうか。 / If Engineering Is Taken Away in 10 Years, How and What Should We Create?
bitkey
PRO
1
190
Flutter × BLE Centralを自前Pluginで実装する設計パターン - MethodChannel / EventChannelで作る双方向ブリッジの実践 / Building Custom Flutter BLE Central Plugins: Bidirectional Bridging with Method & Event Channels
bitkey
PRO
0
470
Swift&Xcodeのバージョンアップにまつわる怖かった思い出 / Scary Memories of Swift and Xcode Updates
bitkey
PRO
0
240
iOS/Androidの二刀流エンジニアがFlutter & TypeScriptへ越境後の現在地 - Flutterがメインになって見えた景色と現在の醍醐味 / Dual-Platform Mobile Engineer Shifts to Flutter & TypeScript - The View and Real Thrill of Going Flutter-First
bitkey
PRO
0
660
個人開発で育てる「大規模設計の苗床」 - AI時代の1人開発から始める業務への知識接続 / The Seedbed for Large-Scale Design - From AI-Era Solo Projects to Professional Knowledge
bitkey
PRO
1
590
失敗を経て、Harness Engineering で 大切にしたいことを考える / Learning from Failure: What Matters in Harness Engineering
bitkey
PRO
1
650
AI Adaptable なテストを整える工夫 / Ways to Make Your Tests AI-Adaptable
bitkey
PRO
3
400
人が担う「価値」とは?これからの「QA」とは / Human Value and the Future of Quality Assurance
bitkey
PRO
0
370
キャリア25年目にしてTypeScript に出会うまで - 「型」を通じて振り返るプログラミング言語遍歴 / Meeting TypeScript After 25 Years in Tech - Looking Back at My Programming Language Journey Through "Types"
bitkey
PRO
2
580
Other Decks in Technology
See All in Technology
go-sqletch
moznion
0
140
WasmをRustにする
sansantech
PRO
0
250
Getting Started with Google Antigravity
glaforge
0
300
エンタメ企業のM&Aを支えるデータ基盤 ― 統合から店舗のリアルタイム分析まで / Data Engineering Summit 2026
genda
0
170
Claude Code本は、どのように執筆チームで書かれたか
oikon48
1
380
分析の民主化を支えるメタデータ整備の実践
kakehashi
PRO
4
1.4k
パッチ更新でterraform initが落ちた日
grimoh
1
140
Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
1
580
二歩目のフロントエンド・ウェブアクセシビリティ
camiha
2
570
ストレスなくAIと付き合いたい!こんなときどうしてる?
namiki64
3
490
Post AI時代のリファクタリング実践記 / Refactoring in the post AI era
kaminashi
1
230
会社説明資料
persolserverworks
0
9.8k
Featured
See All Featured
A Soul's Torment
seathinner
8
3.8k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
430
Optimizing for Happiness
mojombo
378
71k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
520
HDC tutorial
michielstock
2
960
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Fireside Chat
paigeccino
43
4.1k
The Curious Case for Waylosing
cassininazir
1
570
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
2
360
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
410
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. ·ͱΊ