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
Android CI: 2016 edition
Search
Yusuke Yagyu
February 19, 2016
Technology
3
2.4k
Android CI: 2016 edition
DroidKaigi 2016 の発表資料です。
Yusuke Yagyu
February 19, 2016
Tweet
Share
More Decks by Yusuke Yagyu
See All by Yusuke Yagyu
ペパボのデザインシステムと、モバイル領域における取り組み
gyugyu
0
1.2k
Dart Sass であれを作った
gyugyu
0
80
少し変わった論理削除
gyugyu
3
18k
Other Decks in Technology
See All in Technology
IIWレポートからみるID業界で話題のMCP
fujie
0
510
doda開発 生成AI元年宣言!自家製AIエージェントから始める生産性改革 / doda Development Declaration of the First Year of Generated AI! Productivity Reforms Starting with Home-grown AI Agents
techtekt
0
170
Amplifyとゼロからはじめた AIコーディング 成果と展望
mkdev10
1
290
Whats_new_in_Podman_and_CRI-O_2025-06
orimanabu
3
180
Model Mondays S2E01: Advanced Reasoning
nitya
0
370
Grafana MCP serverでなんかし隊 / Try Grafana MCP server
kohbis
0
360
キャディでのApache Iceberg, Trino採用事例 -Apache Iceberg and Trino Usecase in CADDi--
caddi_eng
0
150
Workflows から Agents へ ~ 生成 AI アプリの成長過程とアプローチ~
belongadmin
3
160
「実体」で築く共通認識: 開発現場のコミュニケーション最適化 / Let's Get on the Same Page with Concrete Artifacts: Optimization of Communication in dev teams
kazizi55
0
150
Snowflake Intelligenceで実現できるノーコードAI活用
takumimukaiyama
1
250
AWS アーキテクチャ作図入門/aws-architecture-diagram-101
ma2shita
24
8.8k
「どこにある?」の解決。生成AI(RAG)で効率化するガバメントクラウド運用
toru_kubota
2
450
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
43
2.4k
Why Our Code Smells
bkeepers
PRO
337
57k
GitHub's CSS Performance
jonrohan
1031
460k
Embracing the Ebb and Flow
colly
86
4.7k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.8k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.5k
Making the Leap to Tech Lead
cromwellryan
134
9.3k
Docker and Python
trallard
44
3.4k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
We Have a Design System, Now What?
morganepeng
52
7.6k
Writing Fast Ruby
sferik
628
61k
Side Projects
sachag
455
42k
Transcript
ANDROID CI: 2016 EDITION YUSUKE YAGYU AT DROIDKAIGI 2016 DAY
02
ANDROID CI; 2016 EDITION ࣗݾհ ▸ GMO ϖύϘגࣜձࣾ ٕज़෦ ٕज़ج൫νʔϜ
▸ ͍Ζ͍Ζ࡞͍ͬͯΖ͍Ζ͢ਓ݉ςετ͓͡͞Μ ▸ Android ΞϓϦ։ൃࣗମϝΠϯͰͳ͍Ͱ͢ ▸ ຖே࠷৽ͷ PHP / Ruby / Python3 ΛϏϧυ͢Δͷ͕ੜ͖͕ ͍
ANDROID CI: 2016 EDITION ରௌߨऀ ▸ ॳ৺ऀʙதڃऀ ▸ ΞϓϦ։ൃͰ͖Δ͕ɺςετͲ͔͜ΒखΛ͚͍͍ͭͯͷ ͔Θ͔Βͳ͍ํ
▸ യવͱςετॻ͚Δ͕ɺAndroidStudio Ͱ͔͠ςετͨ͠ ͜ͱ͕ͳ͍ਓ
ANDROID CI: 2016 EDITION ຊͷςʔϚ ▸ ։ൃϑϩʔʹ͓͚Δ Android ςετͷྨ ▸
Android ςετࣗಈԽͷϓϥϯχϯά ▸ Android ʹ͓͚Δ CI ͷϓϥϯχϯά ▸ Android CI ͷύλʔϯ
ANDROID CI: 2016 EDITION DISCLAIMER ▸ ͜ͷεϐʔν20162݄࣌ͷใͰ͋Γɺ͝ཡͷ࣌Ͱ ࠷৽ͷใͰ͋Δ͜ͱΛอূ͠·ͤΜ
ANDROID CI; 2016 EDITION ࠷ॳʹେࣄͳ݁Λ ▸ Android ։ൃʹݶΒͣɺࣗಈςετ / CI
Ͳ͜ΛऔΔ͔ɺͲ ͜ΛΓࣺͯΔ͔ɺҰछͷՁஅͰ͋Δ ▸ அج४ͱͯ͠ɺٕज़త੍ɺਓతϦιʔεɺ࣌ؒత੍ɺ ༧ࢉͷ੍͕ڍ͛ΒΕΔ
։ൃϑϩʔʹ͓͚Δ ANDROID ςετͷྨ
ANDROID CI: 2016 EDITION ͓͞Β͍ɿҰൠతͳ։ൃϑϩʔ ▸ ʮҰൠతͳʯV ࣈ։ൃϞσϧ ▸ ཁ݅ੳˠجຊઃܭˠৄࡉઃܭˠ։ൃˠ
▸ ୯ମςετˠ݁߹ςετˠγεςϜςετˠडೖςετ
ANDROID CI: 2016 EDITION ςετͷछྨͱࣗಈςετͷରԠ ▸ ୯ମςετɿUnit Test, Ұ෦ͷ Instrumentation
Test ▸ ݁߹ςετɿ΄ͱΜͲͷ Instrumentation Test ▸ γεςϜɾडೖςετɿEnd-to-end Test ▸ ʢิʣ୳ࡧతςετɿओʹखಈʹΑΔ
ANDROID CI: 2016 EDITION UNIT TEST ▸ app/src/test σΟϨΫτϦ ▸
JVM / JUnit4 ϕʔεͷςετ ▸ ߴͳςετ ▸ Android SDK ґଘͷ෦ςετෆՄೳ
ANDROID CI: 2016 EDITION INSTRUMENTATION TEST (ANDROID TEST) ▸ app/src/androidTest
σΟϨΫτϦ ▸ ࣮ػɾΤϛϡϨʔλΛ༻ͯ͠ͷςετ ▸ Android SDK ґଘͷίʔυςετՄೳ ▸ Activity ͷදࣔςετՄೳ
ANDROID CI: 2016 EDITION INSTRUMENTATION TEST ͷϝϦοτ ▸ ֎෦ґଘʢe.g. Web
API ίʔϧʣͷ͋ΔίʔυΛϞοΫԽ Մೳ ▸ ϞοΫԽ͢Δ͜ͱͰྫ֎ঢ়ଶͷςετ͕Մೳ
ANDROID CI; 2016 EDITION INSTRUMENTATION TEST ͷ͠͞ ▸ e.g. Web
API ίʔϧ͕ଘࡏ͢Δ߹ɺϞοΫ͞ΕͨϨεϙ ϯε͕࠷৽ͷͷͰ͋Δ͜ͱΛͲ͏୲อ͢Δʁ ▸ Fixture ϕʔεʹͯ͠ JSON Schema Ͱݕূ͢Δʁ ▸ μϛʔ API αʔόΛཱͯΔʁ
ANDROID CI: 2016 EDITION END-TO-END TEST ▸ ϏϧυࡁΈͷ APK ʹର͢Δૢ࡞ςετ
▸ Πϯετʔϧࡁͷଞͷ APK ͱͷڠௐΛࢼݧ ▸ εΫϦʔϯγϣοτͷࡱӨՄೳ
ANDROID CI; 2016 EDITION END-TO-END TEST ͷ͠͞ ▸ e.g. Ͳ͜·ͰΛͯ͠
End-to-end Test ͱఆٛ͢Δ͔ʁ ▸ Production αʔόଓ͢Δʁ ▸ Build Flavor Λ༻ͯ͠σόοά༻ API Λ࣋ͭݕূ༻αʔό ʹଓ͢Δʁ
ANDROID ςετࣗಈ Խͷϓϥϯχϯά
ANDROID CI: 2016 EDITION ANDROID ࣗಈςετͰසग़͢Δ୯ޠ ▸ JUnit ▸ Mockito
▸ Robolectric ▸ Espresso ▸ UI Automator ▸ Appium
ANDROID CI: 2016 EDITION ROBOLECTRIC ▸ Unit Test ༻ͷ Android
SDK shim ▸ JVM ্Ͱ RuntimeException ʹͳΔ Android SDK ෦Λ shadow ʹࠩ͠ସ͑͢Δ ▸ Android SDK ґଘίʔυΛ Unit Test Մೳʹ͢Δ
ANDROID CI: 2016 EDITION ROBOLECTRIC༗༻͔ʁ ▸ ʮ෦తʹʯ༗༻ ▸ Bundle, Intent
୯७ͳ Map ͱͯ͠ར༻Մೳ ▸ AsyncTaskLoader ͷಉظԽ ▸ ͦΕҎ֎ͷʢಛʹ݁߹ߴ͍ʣ API ੬͍
ANDROID CI: 2016 EDITION MOCKITO ▸ Unit Test, Instrumentation Test
Ͱ͑ΔϞοΫϥΠϒϥϦ ▸ ଞʹީิ͋Δ ▸ Spy, Stub ͷҧ͍ʹҙ
ANDROID CI: 2016 EDITION ESPRESSO ▸ Instrumentation Test ͷߴϨϕϧϥούʔ ▸
ඇಉظͳ Activity ͷςετΛಉظతʹॻ͚Δ ▸ Testing Support Library ͷҰ෦
ANDROID CI: 2016 EDITION UI AUTOMATOR ▸ End-to-end Test πʔϧ
▸ Testing Support Library ͷҰ෦ ▸ Android OS >= 4.1
ANDROID CI: 2016 EDITION APPIUM ▸ Selenium ޓͷ End-to-end ςετπʔϧ
▸ Java, JavaScript (Node), .NET, PHP, Python, Ruby, Perl ͳͲ ݴޠΛΘͣςετίʔυ͕ॻ͚Δ
ANDROID CI: 2016 EDITION ςετϑΣʔζͱπʔϧબఆ ▸ ςετΛαϙʔτ͢ΔπʔϧΛબఆ͢Δ ▸ End-to-end Test
πʔϧબఆཁߟྀ ▸ Testing Support Library మ൘
ANDROID CI: 2016 EDITION ςετࣗಈԽͷηΦϦʔ ▸ ࣮ߦ୯ମʼ݁߹ʼडೖͷॱʹ͘ͳΔ ▸ ͭ·Γέʔε୯ମʼ݁߹ʼडೖͷॱʹ͢Δͷ͕ϕετ ▸
͜Ε Android ։ൃʹ͍ͭͯಉ༷ͷ͜ͱݴ͑Δ
ANDROID CI: 2016 EDITION ςετΛͲ͏ࣗಈԽ͢Δ͔ʁ ▸ ՔಇதͷΞϓϦ͕͋Δ߹ͱ৽ن։ൃͷ߹ͰมԽ ▸ Քಇதͷ߹ɿ Instrumentation
Test / End-to-end Test ͰՔ ಇΛ୲อ͠ͳ͕ΒϦϑΝΫλϦϯά ▸ ৽ن։ൃͷ߹ɿ MVP Architecture ͳͲͰ SDK ͔Βϩδο ΫΛΓ͠ Unit Test Λް͘͢Δ
ANDROID CI: 2016 EDITION Ͳ͜·ͰςετΛॻ͖͔͘ʁ ▸ ԾʹΧόϨοδ 100% ͩͬͨͱͯ͠ఆ࿙Ε͕ൃੜ͢Δ ▸
End-to-end Test ͰϋοϐʔύεʢޭύλʔϯʣҎ֎Λॻ ͘͜ͱ͍͠ ▸ ʮ҆৺͢Δ·ͰςετΛॻ͘ʯ(@ahomu)
ANDROID CI: 2016 EDITION ٯʹݴ͑ ▸ End-to-end Test ͚ͩΛॻ͍ͯʮಈ͘͜ͱ͚ͩʯ୲อ͢Δ ͷҰͭͷख
▸ ςετͷϓϥϯχϯάਓతϦιʔεͷଟՉɺϝϯόʔͷٕ ज़ྗɺϦϦʔε·ͰͷΓ࣌ؒʹج͍ͮͯಋग़͢Δ
ANDROID CI: 2016 EDITION ॏཁͳͷ ▸ νʔϜͷϝϯόʔશһ͕ࣗಈςετͷॏཁ͞Λ࣮ײ͢Δ͜ͱ ▸ νʔϜͷ։ൃऀશһ͕࣮ࡍʹखΛಈ͔ͯ͠ςετίʔυΛॻ ͚ΔΑ͏ʹͳΔ͜ͱ
▸ ςετίʔυΛॻ͘ͷ͕͍͠෦ΛΓ͚ΒΕΔʮςε τʹڧ͍ΤϯδχΞʯ͕͍Δͱͳ͓Α͍
ANDROID ʹ͓͚Δ CI ͷϓϥϯχϯά
ANDROID CI: 2016 EDITION Ωʔϫʔυ ▸ Jenkins ▸ ίϯςφϕʔε CI
αʔϏε ▸ Device Farm ▸ Smartphone Test Farm
ANDROID CI: 2016 EDITION JENKINS ▸ Jenkins + Git Plugin
/ GitHub Plugin ▸ αʔόߏΛίϯτϩʔϧՄೳʹ࣮ػଓՄೳ ▸ Unit Test, Instrumentation Test, End-to-end Test શͯΧόʔ ▸ ʮJenkins ৬ਓʯ
ANDROID CI: 2016 EDITION ίϯςφϕʔε CI ▸ e.g. Travis CI,
Circle CI, Drone, Wercker… ▸ ൺֱత҆Ձʢ̌ԁʙʣͰςετՄೳ ▸ JVM ϕʔεͷߴςετΛಘҙͱ͢Δ ▸ Activity Test / End-to-End Test Λߦ͏ͳΒผͷΈ͕ඞཁ
ANDROID CI: 2016 EDITION DEVICE FARM ▸ ෳͷ࣮ػʢɺOSόʔδϣϯʣΛςετ࣮ߦڥͱ͠ ͯ͑Δ ▸
ಠࣗςετ DSL, Web ϕʔεͷը໘ૢ࡞ͳͲ ▸ DFaaS (Device Farm as a Service) ͷ Amazon / Google ࢀೖʢGoogle Cloud Test Lab Closed Test தʣ
ANDROID CI: 2016 EDITION CI ͚ DFAAS ͷબఆج४ ▸ طଘͷςετࢿ࢈
(Instrumentation Test, End-to-end Test) ͕͑Δ͔ʁ ▸ Jenkins Plugin ͕༻ҙ͞Ε͍ͯΔ͔ʁ ▸ Gradle Plugin ͕༻ҙ͞Ε͍ͯΔ͔ʁ ▸ Web API ͕༻ҙ͞Ε͍ͯΔ͔ʁ
ANDROID CI: 2016 EDITION SMARTPHONE TEST FARM (STF) ▸ Device
Farm Λ in-house Ͱ࣋ͭπʔϧ ▸ Device Farm ͷඪ४తͳػೳΛҰ௨Γ࣋ͭ ▸ adb connect ʹΑΔϦϞʔτσόοά
ANDROID CI: 2016 EDITION STF 2.0 ▸ REST APIʢঢ়ଶɺϩοΫऔಘʣͷՃ ▸
ΑΓࣗಈςετͱੑͷߴ͍ػೳΛऔಘ
ANDROID CI: 2016 EDITION CI Λલఏͱͨ͠ςετΛॻ͘ ▸ ςετલޙͰͷঢ়ଶ͕มΘΒͳ͍͜ͱΛ୲อ͢Δ ▸ ΤϛϡϨʔλΛഁغ͢ΔɺΛϫΠϓ͢ΔͳͲ
▸ ୯ମʼ݁߹ʼडೖͷέʔεηΦϦʔΛकΒͳ͍ͱɺ͙͢ʹ ࣮ߦ͕࣌ؒരൃతʹ͘ͳΔ
ANDROID CI: 2016 EDITION ϓϥϯχϯάઓज़ ▸ Jenkins Λϝϯςφϯε͢ΔਓతϦιʔε͕֬อͰ͖ΔͷͰ ͋ΕɺJenkins ▸
Jenkins Λϝϯςφϯε͢ΔਓతίετΛ DFaaS ར༻ྉʹ సԽͰ͖ΔͳΒɺίϯςφϕʔε CI + DFaaS
ANDROID CI: 2016 EDITION େࣄͳͷ ▸ CI Λߦ͏͜ͱͰࣗಈςετΛश׳Խ͠ɺ࣭ΛԼ͛ͳ͍͜ ͱΛνʔϜͷϝϯόʔશһͰ߹ҙ͢Δ͜ͱ ▸
ݱ࣌Ͱ Device Farm աظʹ͋Γɺಛఆͷϓϥοτ ϑΥʔϜʹաʹґଘ͢ΔͱɺϨΨγʔԽ͢ΔϦεΫΛ๊͑ Δ
ANDROID CIͷύ λʔϯ
ANDROID CI: 2016 EDITION ύλʔϯ̍ ▸ Jenkins + ࣮ػଓʢ͘͠ΤϛϡϨʔλʣ ▸
࠷γϯϓϧͳߏ ▸ ༨ΓϦιʔεͰελʔτͰ͖Δͱ͍͏ख͕ܰ͋͞Δ ▸ ͷଟ༷ԽʹखಈͰਵ͠ͳ͚ΕͳΒͳ͍
ANDROID CI: 2016 EDITION ύλʔϯ̎ ▸ Jenkins + (Docker) +
STF + ࣮ػଓ ▸ γϯϓϧͳߏΛ֦ுͯ͠ɺͷଟ༷ੑʹਵՄೳʹͨ͠ ύλʔϯ ▸ Λ༻ҙ͢Δίετͱϝϯςφϯεʹ͔͔ΔਓతϦιʔε ͕՝
ANDROID CI: 2016 EDITION ύλʔϯ̏ ▸ ίϯςφϕʔε CI αʔϏε +
DFaaS ▸ ϝϯςφϯεϑϦʔͳ CI ύλʔϯ ▸ DFaaS ͷอ࣋͢Δʹ੍Λड͚Δ
ANDROID CI: 2016 EDITION ฐࣾʹ͓͚Δ CI ͷ࠾༻ঢ়گ ▸ minne ϞόΠϧΞϓϦʹ
CI ಋೖ ▸ ύλʔϯ̎ͱύλʔϯ̏Λซ༻͠ɺൺֱݕ౼த
ANDROID CI: 2016 EDITION ݁Λ܁Γฦ͠ ▸ Android ։ൃʹݶΒͣɺࣗಈςετ / CI
Ͳ͜ΛऔΔ͔ɺͲ ͜ΛΓࣺͯΔ͔ɺҰछͷՁஅͰ͋Δ ▸ அج४ͱͯ͠ɺٕज़త੍ɺਓతϦιʔεɺ࣌ؒత੍ɺ ༧ࢉͷ੍͕ڍ͛ΒΕΔ
ANDROID CI: 2016 EDITION ൃදҎ্Ͱ͢ ▸ ͋Γ͕ͱ͏͍͟͝·ͨ͠