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
Startup Spock #javajo
Search
kyonmm
PRO
March 25, 2017
Technology
0
2.5k
Startup Spock #javajo
Java女子部でSpockのハンズオンをしたときのスライドです。
kyonmm
PRO
March 25, 2017
Tweet
Share
More Decks by kyonmm
See All by kyonmm
地方中小企業のエンジニアから大企業の執行役員になるまで #phpcon_niigata / road to executive
kyonmm
PRO
7
14k
ソフトウェアテストのグローバルトレンド 2025 #scrumniigata / software-test global trend 2025
kyonmm
PRO
11
7.2k
Engineering Managementのグローバルトレンド #emoasis / Engineering Management Global Trend
kyonmm
PRO
6
1.3k
フレームワークを生み出すメタフレームワークという考え方 -適応型から生成型へ- #RSGT2025 / From adaptive to generative
kyonmm
PRO
4
4.4k
SRE NEXT 2024 スライドみただけの感想 / Just a quick look at the slides for SRE NEXT 2024
kyonmm
PRO
2
580
Living Process #RSGT2024
kyonmm
PRO
3
2.8k
アジャイルクイズ王 2024 #RSGT2024 / agile quiz king 2024
kyonmm
PRO
0
220
プロダクトマネジメントのグローバルトレンド #pmconf2023 / Global Trends in Product Management
kyonmm
PRO
3
7.8k
スタートアップのためのアジャイルプラクティス -論文100本ノック- #xpjug / Agile Practice for Startup - Papers -
kyonmm
PRO
4
2.2k
Other Decks in Technology
See All in Technology
[SRE NEXT] ARR150億円_エンジニア140名_27チーム_17プロダクトから始めるSLO.pdf
satos
2
580
American airlines ®️ USA Contact Numbers: Complete 2025 Support Guide
airhelpsupport
0
390
インフラ寄りSREの生存戦略
sansantech
PRO
6
2.5k
What’s new in Android development tools
yanzm
0
460
AI専用のリンターを作る #yumemi_patch
bengo4com
6
4.4k
ABEMAの本番環境負荷試験への挑戦
mk2taiga
4
300
Delegating the chores of authenticating users to Keycloak
ahus1
0
160
AWS CDK 開発を成功に導くトラブルシューティングガイド
wandora58
2
130
面倒な作業はAIにおまかせ。Flutter開発をスマートに効率化
ruideengineer
0
390
[ JAWS-UG千葉支部 x 彩の国埼玉支部 ]ムダ遣い卒業!FinOpsで始めるAWSコスト最適化の第一歩
sh_fk2
2
130
VGGT: Visual Geometry Grounded Transformer
peisuke
0
100
60以上のプロダクトを持つ組織における開発者体験向上への取り組み - チームAPIとBackstageで構築する組織の可視化基盤 - / sre next 2025 Efforts to Improve Developer Experience in an Organization with Over 60 Products
vtryo
2
490
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
Designing for Performance
lara
610
69k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
Faster Mobile Websites
deanohume
307
31k
Optimising Largest Contentful Paint
csswizardry
37
3.3k
Producing Creativity
orderedlist
PRO
346
40k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
980
Rails Girls Zürich Keynote
gr2m
95
14k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
Transcript
STARTUP SPOCK #JAVAJO kyon_mm 2017/03/25 1
SELF INTRODUCTION • ͖ΐΜ : @kyon_mm גࣜձࣾΦϯβϩʔυ • ςετΞʔΩςΫτɺδΣωϥϦετ •
Groovy, F#, C#, Scala • جૅษڧձ, TDDBootCamp, ͳ͔͝Scrum 2
THIS SESSION : TARGET • Javaݴޠͷجຊจ๏ͳΜͱͳ͘Θ͔͍ͬͯ ͯɺίʔυΛ͔͍ͨΓͰ͖Δɻ • Can you
code FizzBuzz ? 3
THIS SESSION : GOAL • SpockͰ؆୯ͳίʔυΛॻ͚ΔΑ͏ʹͳΔɻ 4
NO • Groovy LanguageΛ͍͜ͳ͢ • SexyͳCodeΛٻ͢Δ 5
MENU • https://github.com/kyonmm/startup-spock • Groovy Language for Java Language User
• Getting Start Spock • Spock with TDD 6
GROOVY LANGUAGE • Groovyͱ • Java8ඇޓͳͷ • ͓֮͑ͯ͘ͱศརͳͷ 7
GROOVYͱ • ਐతܕ͖(੩తܕݕࠪΦϓγϣϯ) • JVMͰಈ࡞͢Δɻgroovy-all.jarͱҰॹʹ͏ɻ • GradleɺJenkinsfileGroovyͷDSLɻ 8
GROOVYͱ • Java6ͱ΄΅ޓੑΛ͍ͨͬͯΔ͕ɺ Java7,Java8ͷ৽ػೳͱҰ෦ޓੑ͕ͳ͍ɻ (Java6Ҏલ͔ΒಠࣗͰ࣮͍ͯͨ͠Γͱ͔) • IntelliJ IDEA + Gradle
+ Spock͕ఆ൪ • OO͕ϕʔεɻޠኮRubyɺPythonͬΆ͞ɻ 9
GROOVY LANGUAGE • Groovyͱ • Java8ඇޓͳͷ • ͓֮͑ͯ͘ͱศརͳͷ 10
Ҏ߱ͷηογϣϯͷͨΊʹ ڥߏங • ιʔείʔυΛߋ৽ͨ͠ͷͰɺGitHub͔Β࠷৽ͷιʔείʔυΛམ ͱ͖͍ͯͯͩ͘͠͞ɻ(git reset --hard; git pull;) •
IntelliJ IDEAͷ࣍ͷઃఆΛ͠·͠ΐ͏ɻ • Plugins -> Spock -> Install • Build Project Automatically • Edit Configurations -> Defaults -> JUnit -> Before LaunchͷBuildΛબ ͯ͠আ( - ϘλϯΛΫϦοΫ) 11
JAVA8ͱඇޓͳͷ • ϥϜμͷΘΓʹΫϩʔδϟΛ͏ • ϝιουࢀরɺίϯετϥΫλࢀর͕ͳ͍ • try-with-resource͕͑ͳ͍ • ྻϦςϥϧ͕͑ͳ͍ 12
ϥϜμͷΘΓʹΫϩʔδϟ Λ͏ • ϥϜμ • ࣜɻJava7·ͰؔΦϒδΣΫτͰ࣮ݱ͍ͯͨ͠Γɻ • GroovyͰϥϜμͷॻ͖ํΛαϙʔτ͍ͯ͠ͳ͍ɻ • GroovyͰΫϩʔδϟͰ࣮ݱ͢Δɻ
• src/test/groovy/example/startup/incompatible/java8/ Lambda.groovy 13
ϝιουࢀরɺ ίϯετϥΫλࢀর͕ͳ͍ • ϝιουࢀর • Ϋϥε໊::ϝιου໊,ΦϒδΣΫτ໊::ϝιου໊ (ಛʹ)ϥϜμͱͷซ༻Ͱ؆ܿͳهड़Λ࣮ݱͰ͖Δɻ Stream.of("javajo", "jjug", "kyon_mm").forEach(System.out::println)
• GroovyͰϝιουࢀরɺίϯετϥΫλࢀরͷॻ͖ํΛαϙʔτ͍ͯ͠ͳ͍ɻ • GroovyͷΫϩʔδϟͰҾΛ໌ࣔ͠ͳ͍ͱ͖ݩͷΦϒδΣΫτ͕ it ͰΘͨͬ ͯ͘ΔͷͰɺ{ println(it) }ͷΑ͏ʹ͏ɻ • src/test/groovy/example/startup/incompatible/java8/MethodReference.groovy 14
TRY-WITH-RESOURCE • try-with-resource • ྫ֎Λߟྀͨ͠Ϧιʔε(IO)ͷΫϩʔζΛࣗಈతʹͬͯ͘ΕΔ • GroovyͰtry-with-resourceͷॻ͖ํΛαϙʔτ͍ͯ͠ͳ͍ɻ • ͨͩ͠ɺସखஈͱͯ͠ withCloseable
ϝιουΛ͏͜ͱ͕Ͱ͖ Δɻ • src/test/groovy/example/startup/incompatible/java8/ TryWithResource.groovy 15
ྻϦςϥϧ͕ͳ͍ • ྻϦςϥϧ • int[] xs = new int[]{1,2,3}; •
GroovyͰ{}ΫϩʔδϟͳͷͰΤϥʔʹͳΔ • ϦετϦςϥϧͰArrayListΛੜͯ͠ɺޙΖʹas int[] Λه͢ Δɻ • src/test/groovy/example/startup/incompatible/java8/ ArrayLiteral.groovy 16
Α͘ΈΔͰ͋Ζ͏ Τϥʔϝοηʔδ • groovy.lang.MissingMethodException: No signature of method: example.startup.groovy.Keyword.newMethod() •
example.startup.groovy.Keyword.newMethod͍ͬͯ͏ϝ ιουͳ͔ͬͨΑ • groovy.lang.MissingPropertyException: No such property: y for class: example.startup.groovy.Keyword • KeyWordΫϥεʹy͍ͬͯ͏ϓϩύςΟͳ͔ͬͨΑ 17
GROOVY LANGUAGE • Groovyͱ • Java8ඇޓͳͷ • ͓֮͑ͯ͘ͱศརͳͷ 18
͓֮͑ͯ͘ͱศརͳͷ • ϦετϦςϥϧ • ϚοϓϦςϥϧ • จࣈྻϦςϥϧ • ਖ਼نදݱϦςϥϧ •
GroovyͷίϨΫγϣϯૢ࡞ϝιουͱJavaͷstreamͱͷൺֱ 19
GROOVYͰΑ͔ͭ͘͏ॻ͖ํ • defͰએݴ • ςετϝιου໊จࣈྻએݴ 20
ͦͷଞҙ • booleanΛظ͞ΕΔॴ(ex. if(x))ʹɺBoolean Ҏ֎ͷࢀরܕ͕͍ͬͨ߹ͳ͍߹ ࣍ͷنଇͰఆ͞Ε·͢ɻ • "", [], [:],
0, null -> false • ͦΕΒҎ֎ -> true 21
MENU • Groovy Language for Java Language User • Getting
Start Spock • Spock with TDD 22
• Spockͱ • JUnitͱͷൺֱ • Spockͷ͍͔ͨ 23
SPOCKͱ • JUnit4ϕʔεͷGroovyͷςεςΟϯάϑϨʔ ϜϫʔΫ • BDDΛҙ͍ࣝͯ͠Δ • powerassert Spock͕ΦϦδϯ(ͩͱࢥ͏) 24
JUNITͱͷൺֱ 25 JUnit Spock Specification Ϋϥε spock.lang.SpecificationΛܧঝ Feature Method @Test
SpockͷϥϕϧΛ༻͢Δϝιου Helper Method ϝιουએݴ @Share Fixture Method @Before setupϝιου Fixture Method @After cleanupϝιου Fixture Method @BeforeClass setupSpecϝιου Fixture Method @AfterClass cleanupSpecϝιου
SPOCKͷ͍͔ͨ • Specification • given, when, then, and, where •
power assert • setup, teardown, setupSpec, cleanupSpec • @Unroll, @Shared, @Ignore 26 src/test/groovy/example/startup/spock ԼΛΈͳ͕Β
MENU • Groovy Language for Java Language User • Getting
Start Spock • Spock with TDD 27
SPOCK WITH TDD • SpockͰTDDΛϖΞϓϩάϥϛϯάͰͬͯΈ· ͠ΐ͏ɻ • ͓ʮλεΫϦετ(λεΫཧπʔϧ)ʯͷ։ൃ Ͱ͢ɻ •
ࠓճγεςϜͷೖྗ෦লུ͠·͢ɻ(CUI, GUI ͷ։ൃলུ͠·͢ɻ) 28
λεΫϦετ • λεΫ໊ͱظΛొͨ͠ΓɺొࡁΈͷ ͷΛࢀরͨ͠Γɺআͨ͠ΓͰ͖Δɻ • λεΫ໊ظͰݕࡧͰ͖Δɻ 29
TaskList ---------------------- add(Task) : TaskList delete(Task) : TaskList list(Task) :
List<Task> search(String) : List<Task> search(Date, Date) : List<Task> searchFrom(Date) : List<Task> searchTo(Date) : List<Task> Task ---------------------- title : String dueTo : Date * 30
TDD • ςετۦಈ։ൃ(Test Driven Development) • ςετ࣮ -> ϓϩμΫτ࣮ ->
ϦϑΝΫλ Ϧϯά ͷ܁Γฦ͠Ͱ։ൃ͢Δɻ • ઃܭ͓Αͼੳͷख๏ 31
TDD3ݪଇ • ϓϩμΫτίʔυࣦഊ͢ΔςετίʔυΛ ޭͤ͞ΔͨΊ͚ͩʹॻ͘ • ςετίʔυࣦഊͤ͞ΔͨΊ͚ͩʹॻ͘ • ෳͷςετΛޭͤ͞ΔΑ͏ͳϓϩμΫτ ίʔυΛॻ͍͍͚ͯͳ͍ 32
ࠓΔTDDϥΠΫͳ։ൃ ςετ࣮ฤ 1. (͠ɺ͍·͔Β࣮͠Α͏ͱ͍ͯ͠Δͷطʹ୭͔͕࣮͠ ͯ͘Ε͍ͯͨΒ) ͲΜͳखॱͰɺͦΕΛ͏ͷ͔? 2. 1Ͱࢥ͍͍͍ͭͨํΛຊޠͰɺٙࣅίʔυͰ͍͍ͷͰς Ωετʹ͢Δɻ 3.
ͦΕΛSpockͷgiven, when, thenʹ͋ͯΊΔɻ 4. ਖ਼͍͠Groovyίʔυʹ͢Δɻ 33
ࠓΔTDDϥΠΫͳ։ൃ ϓϩμΫτ࣮ฤ 1. ςετΛ࣮ͨ͠Βςετ͕ಈ࡞͢ΔΑ͏ͳϓϩ μΫτΛ࣮͢Δɻ 2. ͠ɺ15ͨͬͯςετ͕ޭ͠ͳ͔ͬͨΒɺ͍ ·࣮ݱ͠Α͏ͱ͍ͯ͠ΔςετίʔυΛ@Ignore͠ ͯɺ͏͢͜͠খ͍͞ৼ͍Λ࣮ݱ͢Δςετίʔ υΛهड़ͯ͠ɺ࠶ϓϩμΫτ࣮ʹઓ͢Δɻ
34
ࠓΔTDDϥΠΫͳ։ൃ ϦϑΝΫλϦϯάฤ 1. ϓϩμΫτίʔυͷॏෳ͕͋Εڞ௨Խ 2. ςετίʔυͷॏෳ͕͋Εڞ௨Խ 3. ໊લʹҧײ͕͋ΕϦωʔϜϝιου ͷҠಈɺநग़ 35
λεΫϦετ • λεΫ໊ͱظΛొͨ͠ΓɺొࡁΈͷ ͷΛࢀরͨ͠Γɺআͨ͠ΓͰ͖Δɻ • λεΫ໊ظͰݕࡧͰ͖Δɻ 36
TaskList ---------------------- add(Task) : TaskList delete(Task) : TaskList list(Task) :
List<Task> search(String) : List<Task> search(Date, Date) : List<Task> searchFrom(Date) : List<Task> searchTo(Date) : List<Task> Task ---------------------- title : String dueTo : Date * 37
λεΫϦετ:Ճ͓ • λεΫ໊ͱظΛొͨ͠ΓɺొࡁΈͷͷΛ ࢀরͨ͠Γɺআͨ͠ΓͰ͖Δɻ • λεΫ໊ظͰݕࡧͰ͖Δɻ • λεΫΛӬଓԽ͓ͯ͘͜͠ͱͰɺΞϓϦ͕ऴྃ͠ ͯλεΫΛ͓͚ͯ͠Δ(JSONͱ͔CSVʹग़ྗ͠ ͯಡΈͩͤΔΑ͏ʹ͢Δ)
38