Slide 1

Slide 1 text

Aeromock͕ौ୩Javaʹ ΍ͬͯŝŦᴸᴸ ƅ㱼ƅ)ᴸᴸ!! (AeromockΛࢧ͑Δٕज़ʣ Akinori Yamada (@stormcat24) 2014/12/13 Shibuya Java #9

Slide 2

Slide 2 text

who? ‣ @stormcat24 ‣ CyberAgent, Inc. ‣ ࡶ༻ܥ΀Ζ͙Β·ʔ ‣ Scalaͱ͔ͦͷ΁Μ ‣ ࠷ۙ͸JavaΛݟ௚ͭͭ͋͠Δ

Slide 3

Slide 3 text

Agenda ‣ Aeromock is Կ ‣ AeromockΛࢧ͑Δٕज़ ‣ ࠓޙͷల๬ʹ͍ͭͯ ‣ ·ͱΊ

Slide 4

Slide 4 text

Aeromock is Կ

Slide 5

Slide 5 text

https://github.com/CyberAgent/aeromock

Slide 6

Slide 6 text

Aeromock is ‣ Scala੡ϞοΫαʔό ‣ JVMܥςϯϓϨʔτΤϯδϯͷελϒ ‣ Freemarker/Velocity/Groovy Templates etc ‣ JSON API ‣ Protocol Buffers

Slide 7

Slide 7 text

動作イメージ Aeromock Client 3FRVFTU )5.- σʔλϑΝΠϧ (JSON / YAML) ςϯϓϨʔτ ϑΝΠϧ (FTL౳ʣ

Slide 8

Slide 8 text

目指すところ ‣ ϑϩϯτ͕αʔόαΠυʹґଘͤͣʹ։ൃ ‣ ຊ౰ͷҙຯͰͷɺϑϩϯτΤϯυɾαʔόαΠυ෼ ۀͷཱ֬ ‣ ઐ໳ྖҬͷ࡞ۀʹ஫ྗ ‣ লϦιʔε ‣ ࠶ىಈෆཁͰαΫαΫ։ൃ

Slide 9

Slide 9 text

Aeromockを支える技術

Slide 10

Slide 10 text

使ってる技術 ‣ Netty ‣ Javassist ‣ Groovy ‣ Gradle ‣ snakeyaml ‣ javax.el ‣ Scaldi

Slide 11

Slide 11 text

Netty ‣ http://netty.io/ ‣ Netty4ܥΛར༻ ‣ ͱʹ͔͘ബ͚Ε͹ബ͍΄Ͳ͍͍ͱ͍͏ߟ͑ ‣ ௿ϨΠϠʔ૚ͷίϯτϩʔϧ͕͠΍͍͢

Slide 12

Slide 12 text

Javassist ‣ όΠτίʔυΤϯϋϯα ‣ ςϯϓϨ্Ͱϝιουίʔϧ͕͋ΔʢΫιʣ࣮૷ͱ͔ ੈؒʹ͸΍ͬͺΓ͋Δ ‣ σʔλϑΝΠϧͰඞཁͳϝιουఆٛΛͯ͠ɺಈత ʹΠϯελϯεʹ࣮૷ͤ͞Δ

Slide 13

Slide 13 text

${target.execute()}

メソッド呼び出し(遺憾) target: __methods: - name: execute: value: shibuya_java

shibuya_java

Slide 14

Slide 14 text

動的に追加されるメソッド public Object execute(Object[] args) { return “shibuya_java”; }

Slide 15

Slide 15 text

Groovy ‣ ϧʔςΟϯά੍ޚεΫϦϓτʢrouting.groovyʣͷDSLΛGroovy Ͱ࣮૷ ‣ ΧελϜλά΍ϑΝϯΫγϣϯͷϞοΫ࣮૷ʹ΋ར༻ ‣ ࠶ىಈͳ͠ͰɺτϥΠΞϯυΤϥʔ͍ͨ͠εΫϦϓςΟϯάʹ͸ ͔ͳΓ༗༻ ‣ ύϑΥʔϚϯεʹ͸஫ҙʢมߋ͕͋ͬͨͱ͖͚ͩύʔε͢Δ࣮૷ ʹͯ͠Δʣ ‣ groovy.util.GroovyScriptEngineͰ༰қʹ૊ΈࠐΊΔ

Slide 16

Slide 16 text

Gradle ‣ aeromock-brewʢύοέʔδϚωʔδϟʣͰར༻ ‣ https://github.com/CyberAgent/aeromock-brew ‣ gradlewΛ௨ͯ͠ɺMaven Central͔Β೚ҙͷόʔ δϣϯΛΠϯετʔϧͰ͖Δ ‣ GradleͰॻ͚͹ΫϩεϓϥοτϑΥʔϜΛ͋Μ·Γ ҙࣝ͠ͳͯ͘ࡁΉ

Slide 17

Slide 17 text

snakeyaml ‣ https://code.google.com/p/snakeyaml/ ‣ JavaͷYAML࣮૷ ‣ σʔλϑΝΠϧͱͯ͠JSONʹՃ͑ɺYAMLΛ࠾༻ ͍ͯ͠ΔʢίϝϯτΛ࢓༷ͱͯ͠࢒͠΍͍ͨ͢Ίʣ

Slide 18

Slide 18 text

javax.el ‣ σʔλϑΝΠϧͷதͰɺม਺ΛՃ޻͍ͨ͠Α͏ͳͱ ͖ɺELࣜͷൣᙝͰ޷͖ͳΑ͏ʹͰ͖Δ ‣ EL3.0ʢJSR-341ʣ ‣ org.glassfish:javax.el:3.0.0Λར༻ ‣ javax.el.ELProcessorΛ࢖͑͹ɺׂͱ؆୯ʹಋೖͰ ͖Δ

Slide 19

Slide 19 text

form_data: name: ${FORM_DATA[‘name’].trim()} age: ${PARAMETERS[‘age’].trim()} comment: ${PARAMETERS[‘comment’].substring(0, 100)} ELར༻ྫ

Slide 20

Slide 20 text

protobuf-java ‣ protobufͷJava࣮૷ ‣ com.google.protobuf:protobuf-java:2.6.1 ‣ protobufͷόΠφϦΛੜ੒͢ΔͨΊʹར༻

Slide 21

Slide 21 text

protoparser ‣ https://github.com/square/protoparser ‣ protoϑΝΠϧͷύʔαʔ ‣ protobuf-javaʹ͸ύʔαʔ͸ແ͔ͬͨʢผ్ protocͰύʔεˠJavaͷίʔυΛੜ੒͢ΔͨΊʣ ‣ ύʔεͯ͠औಘͨ͠protobufͷߏ଄ͱɺσʔλϑΝ ΠϧΛಥ͖߹ΘͤΔ

Slide 22

Slide 22 text

Scaldi ‣ http://scaldi.org/ ‣ Scala༻ͷܰྔͳDIϥΠϒϥϦ ‣ ࠷ॳDIແ͠Ͱ࣮૷͕ͯͨ͠ɺͩΜͩΜਏ͘ͳ͖ͬͯ ͨͷͰಋೖ

Slide 23

Slide 23 text

今後の展望について

Slide 24

Slide 24 text

φϏήʔγϣϯπʔϧ ‣ ݱঢ়ɺݟ͍ͨը໘ͷURLΛ͍͍ͪͪϒϥ΢βʹೖྗ ͢Δඞཁ͕͋ΔͷͰλϧ͍ ‣ ഑ԼͷςϯϓϨʔτΛϑΝΠϧπϦʔදࣔͯ͠ɺඈ ΂ΔWeb UIΛ༻ҙ ‣ ࣍ͷϝδϟʔϦϦʔεͰͷ౤ೖΛ༧ఆ

Slide 25

Slide 25 text

Live Loading ‣ ςϯϓϨ΍σʔλϑΝΠϧΛมߋͨ͠৔߹ɺ͍͍ͪ ͪϦϩʔυ͢Δͷ͕λϧ͍ ‣ grunt-contrib-watchͷAeromock൛Έ͍ͨͳ

Slide 26

Slide 26 text

テンプレートエンジン ‣ धཁͷߴͦ͏ͳςϯϓϨʔτΤϯδϯʹରԠ͢Δ ‣ ࣍Կ͕͍͍Ͱ͔͢Ͷ|шƅ)ŧŽŕ ‣ ಛఆͷόʔδϣϯʹ͕ͬͭΓґଘͯ͠͠·͍ͬͯΔ ͷͰɺ΋͏গ͠ϓϥΨϒϧͳߏ଄ʹ͍ͨ͠ʢOSGi ͷ࠾༻ͱ͔ʣ

Slide 27

Slide 27 text

テスト支援 ‣ ςϯϓϨʔτͱσʔλϑΝΠϧͷνΣοΫπʔϧ ‣ Ұ౓ಈ͘Α͏ʹ࡞ͬͨσʔλϑΝΠϧ͕ɺ์ஔ͞Ε ͯ؊৺ͳͱ͖ʹಈ͔ͳ͍ͳΜͯ͜ͱ΋͋Δ ‣ ܧଓతʹ඼࣭ΛอͯΔ࢓૊ΈΛͭ͘Δ ‣ ࣮͸Ӆ͠ػೳͱͯ͠طʹ͋Δʢ׬੒౓·ͩ௿͍ʣ

Slide 28

Slide 28 text

まとめ

Slide 29

Slide 29 text

Javaで迷惑かけないようにしよう ‣ αʔόαΠυʹҾ͖ͣΒΕΔͱɺϑϩϯτΤϯδχ ΞͷJava΁ͷҹ৅͕ѱ͘ͳΔ ‣ Java͸ѱ͘ͳ͍ɻʢΫιʣϓϩδΣΫτ͕ѱ͍ ‣ ϑϩϯτΤϯδχΞʹจ۟ݴΘΕͳ͍ͨΊͷࢪࡦ͕ ඞཁ

Slide 30

Slide 30 text

ステッカー置いてきますね