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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
株式会社ビットキー / Bitkey Inc.
PRO
June 29, 2022
Technology
560
0
Share
サクッと作る静的解析ツール -importの依存制御ツールを作る-
株式会社ビットキー / Bitkey Inc.
PRO
June 29, 2022
More Decks by 株式会社ビットキー / Bitkey Inc.
See All by 株式会社ビットキー / Bitkey Inc.
人が担う「価値」とは?これからの「QA」とは / Human Value and the Future of Quality Assurance
bitkey
PRO
0
97
キャリア25年目にしてTypeScript に出会うまで - 「型」を通じて振り返るプログラミング言語遍歴 / Meeting TypeScript After 25 Years in Tech - Looking Back at My Programming Language Journey Through "Types"
bitkey
PRO
2
280
AIのために、AIを使った、Effect-TSからの脱却 〜テストを活用した安全なリファクタリングの進め方〜
bitkey
PRO
1
570
Flutter初心者が生成AIで大規模アプリ開発をキャッチアップした工夫 〜元ネイティブエンジニアが実践した、技術転換の高速道路〜 / Flutter with LLM: A Former Native Engineer's Fast Track to Large-Scale Apps
bitkey
PRO
0
150
〜備えあれば憂いなし〜とりあえず障害訓練やろ? デジタル/フィジカル横断プロダクトを24365で維持するための戦略 / Better Safe Than Sorry: Incident Drills for 24/365 Digital-Physical Products
bitkey
PRO
0
110
雑談は、センサーだった
bitkey
PRO
2
430
AIが書いたコードを信じられない問題 〜レビュー負荷を下げるために変えたこと〜 / The AI Code Trust Gap: Reducing the Review Burden
bitkey
PRO
8
1.5k
生成AI時代のドキュメントに対する期待の整理と実践から得た学び / Rethinking Documentation for LLM: Lessons from Practice
bitkey
PRO
1
140
AI活用するためのドメイン知識を泥くさく整理する / Putting in the Work to Organize Domain Knowledge for AI
bitkey
PRO
3
130
Other Decks in Technology
See All in Technology
テストコードのないプロジェクトにテストを根付かせる
tttol
0
160
TSKaigi 2026 - Auth.jsからBetter Authへの 移行に見る「型とランタイム」の 設計思想の変化
teamlab
PRO
1
260
long-running-tasks
cipepser
2
350
データ基盤構築・運用の現場から 〜 Snowflake Intelligence 導入で変わった、データ活用の未来 〜
wonohe
0
180
AI とサービス・デザイン / AI and Service Design
ks91
PRO
0
170
AIコーディングエージェントの活用で、コードは静かに肥大化した
yosukeshinoda
1
360
TSKaigi 2026 - 型プラグインシステムの実装に使われるテクニック
teamlab
PRO
2
430
CloudFront VPCオリジンとVPC Latticeサービスの内部ALBをマルチアカウントで一元利用しよう
duelist2020jp
5
230
LLM時代のリファクタリング戦略_AIエージェントによる段階的・安全なTS移行方法
play_inc
0
180
The Making of AI Chips
pfn
PRO
0
770
TypeScript の型で副作用の実行順序を制御する
yanaemon
2
210
oracle-to-databricks-migration-with-llm-and-dbt
casek
0
140
Featured
See All Featured
Building a Scalable Design System with Sketch
lauravandoore
463
34k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
420
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
310
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
320
Chasing Engaging Ingredients in Design
codingconduct
0
200
Building AI with AI
inesmontani
PRO
1
1k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
830
Balancing Empowerment & Direction
lara
6
1.1k
Automating Front-end Workflow
addyosmani
1370
210k
Heart Work Chapter 1 - Part 1
lfama
PRO
7
36k
Speed Design
sergeychernyshev
33
1.7k
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. ·ͱΊ