$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Aeromockが渋谷Javaにやってキタ━(゚∀゚)━!(Aeromockを支える技術)
Search
stormcat24
December 12, 2014
Programming
1
1k
Aeromockが渋谷Javaにやってキタ━(゚∀゚)━!(Aeromockを支える技術)
Shibuya Java #9
stormcat24
December 12, 2014
Tweet
Share
More Decks by stormcat24
See All by stormcat24
素早く賢く失敗するDeveloper Productivityの実現を目指して
stormcat24
4
5.1k
KubernetesのマニフェストをそれなりにCIしたい
stormcat24
4
1.5k
令和時代のSaaS開発
stormcat24
1
310
History in 5 years of CircleCI and CyberAgent
stormcat24
3
870
Kubernetes Handson Osaka
stormcat24
5
600
Kubernetes Handson
stormcat24
5
4.4k
DockerとKubernetesでアプリケーション開発にコンテナをフル活用!
stormcat24
0
350
Base Image Journey 2018
stormcat24
29
140k
kotlin-fest
stormcat24
13
18k
Other Decks in Programming
See All in Programming
connect-python: convenient protobuf RPC for Python
anuraaga
0
380
開発に寄りそう自動テストの実現
goyoki
1
760
LLM Çağında Backend Olmak: 10 Milyon Prompt'u Milisaniyede Sorgulamak
selcukusta
0
110
30分でDoctrineの仕組みと使い方を完全にマスターする / phpconkagawa 2025 Doctrine
ttskch
3
800
UIデザインに役立つ 2025年の最新CSS / The Latest CSS for UI Design 2025
clockmaker
18
7.3k
新卒エンジニアのプルリクエスト with AI駆動
fukunaga2025
0
200
なあ兄弟、 余白の意味を考えてから UI実装してくれ!
ktcryomm
11
11k
Cell-Based Architecture
larchanjo
0
100
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
6
2.4k
C-Shared Buildで突破するAI Agent バックテストの壁
po3rin
0
380
モデル駆動設計をやってみようワークショップ開催報告(Modeling Forum2025) / model driven design workshop report
haru860
0
260
ハイパーメディア駆動アプリケーションとIslandアーキテクチャ: htmxによるWebアプリケーション開発と動的UIの局所的適用
nowaki28
0
390
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.2k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
3k
Done Done
chrislema
186
16k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
1
93
Documentation Writing (for coders)
carmenintech
76
5.2k
Building Flexible Design Systems
yeseniaperezcruz
330
39k
How to train your dragon (web standard)
notwaldorf
97
6.4k
Writing Fast Ruby
sferik
630
62k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
The Invisible Side of Design
smashingmag
302
51k
Transcript
Aeromock͕ौ୩Javaʹ ͬͯŝŦᴸᴸ ƅ㱼ƅ)ᴸᴸ!! (AeromockΛࢧ͑Δٕज़ʣ Akinori Yamada (@stormcat24) 2014/12/13 Shibuya Java
#9
who? ‣ @stormcat24 ‣ CyberAgent, Inc. ‣ ࡶ༻ܥΖ͙Β·ʔ ‣ Scalaͱ͔ͦͷΜ
‣ ࠷ۙJavaΛݟͭͭ͋͠Δ
Agenda ‣ Aeromock is Կ ‣ AeromockΛࢧ͑Δٕज़ ‣ ࠓޙͷలʹ͍ͭͯ ‣
·ͱΊ
Aeromock is Կ
https://github.com/CyberAgent/aeromock
Aeromock is ‣ ScalaϞοΫαʔό ‣ JVMܥςϯϓϨʔτΤϯδϯͷελϒ ‣ Freemarker/Velocity/Groovy Templates etc
‣ JSON API ‣ Protocol Buffers
動作イメージ Aeromock Client 3FRVFTU )5.- σʔλϑΝΠϧ (JSON / YAML) ςϯϓϨʔτ
ϑΝΠϧ (FTLʣ
目指すところ ‣ ϑϩϯτ͕αʔόαΠυʹґଘͤͣʹ։ൃ ‣ ຊͷҙຯͰͷɺϑϩϯτΤϯυɾαʔόαΠυ ۀͷཱ֬ ‣ ઐྖҬͷ࡞ۀʹྗ ‣ লϦιʔε
‣ ࠶ىಈෆཁͰαΫαΫ։ൃ
Aeromockを支える技術
使ってる技術 ‣ Netty ‣ Javassist ‣ Groovy ‣ Gradle ‣
snakeyaml ‣ javax.el ‣ Scaldi
Netty ‣ http://netty.io/ ‣ Netty4ܥΛར༻ ‣ ͱʹ͔͘ബ͚Εബ͍΄Ͳ͍͍ͱ͍͏ߟ͑ ‣ ϨΠϠʔͷίϯτϩʔϧ͕͍͢͠
Javassist ‣ όΠτίʔυΤϯϋϯα ‣ ςϯϓϨ্Ͱϝιουίʔϧ͕͋ΔʢΫιʣ࣮ͱ͔ ੈؒʹͬͺΓ͋Δ ‣ σʔλϑΝΠϧͰඞཁͳϝιουఆٛΛͯ͠ɺಈత ʹΠϯελϯεʹ࣮ͤ͞Δ
<p>${target.execute()}</p> メソッド呼び出し(遺憾) target: __methods: - name: execute: value: shibuya_java <p>shibuya_java</p>
動的に追加されるメソッド public Object execute(Object[] args) { return “shibuya_java”; }
Groovy ‣ ϧʔςΟϯά੍ޚεΫϦϓτʢrouting.groovyʣͷDSLΛGroovy Ͱ࣮ ‣ ΧελϜλάϑΝϯΫγϣϯͷϞοΫ࣮ʹར༻ ‣ ࠶ىಈͳ͠ͰɺτϥΠΞϯυΤϥʔ͍ͨ͠εΫϦϓςΟϯάʹ ͔ͳΓ༗༻ ‣
ύϑΥʔϚϯεʹҙʢมߋ͕͋ͬͨͱ͖͚ͩύʔε͢Δ࣮ ʹͯ͠Δʣ ‣ groovy.util.GroovyScriptEngineͰ༰қʹΈࠐΊΔ
Gradle ‣ aeromock-brewʢύοέʔδϚωʔδϟʣͰར༻ ‣ https://github.com/CyberAgent/aeromock-brew ‣ gradlewΛ௨ͯ͠ɺMaven Central͔Βҙͷόʔ δϣϯΛΠϯετʔϧͰ͖Δ ‣
GradleͰॻ͚ΫϩεϓϥοτϑΥʔϜΛ͋Μ·Γ ҙࣝ͠ͳͯ͘ࡁΉ
snakeyaml ‣ https://code.google.com/p/snakeyaml/ ‣ JavaͷYAML࣮ ‣ σʔλϑΝΠϧͱͯ͠JSONʹՃ͑ɺYAMLΛ࠾༻ ͍ͯ͠ΔʢίϝϯτΛ༷ͱ͍ͯͨ͢͠͠Ίʣ
javax.el ‣ σʔλϑΝΠϧͷதͰɺมΛՃ͍ͨ͠Α͏ͳͱ ͖ɺELࣜͷൣᙝͰ͖ͳΑ͏ʹͰ͖Δ ‣ EL3.0ʢJSR-341ʣ ‣ org.glassfish:javax.el:3.0.0Λར༻ ‣ javax.el.ELProcessorΛ͑ɺׂͱ؆୯ʹಋೖͰ
͖Δ
form_data: name: ${FORM_DATA[‘name’].trim()} age: ${PARAMETERS[‘age’].trim()} comment: ${PARAMETERS[‘comment’].substring(0, 100)} ELར༻ྫ
protobuf-java ‣ protobufͷJava࣮ ‣ com.google.protobuf:protobuf-java:2.6.1 ‣ protobufͷόΠφϦΛੜ͢ΔͨΊʹར༻
protoparser ‣ https://github.com/square/protoparser ‣ protoϑΝΠϧͷύʔαʔ ‣ protobuf-javaʹύʔαʔແ͔ͬͨʢผ్ protocͰύʔεˠJavaͷίʔυΛੜ͢ΔͨΊʣ ‣ ύʔεͯ͠औಘͨ͠protobufͷߏͱɺσʔλϑΝ
ΠϧΛಥ͖߹ΘͤΔ
Scaldi ‣ http://scaldi.org/ ‣ Scala༻ͷܰྔͳDIϥΠϒϥϦ ‣ ࠷ॳDIແ͠Ͱ࣮͕ͯͨ͠ɺͩΜͩΜਏ͘ͳ͖ͬͯ ͨͷͰಋೖ
今後の展望について
φϏήʔγϣϯπʔϧ ‣ ݱঢ়ɺݟ͍ͨը໘ͷURLΛ͍͍ͪͪϒϥβʹೖྗ ͢Δඞཁ͕͋ΔͷͰλϧ͍ ‣ ԼͷςϯϓϨʔτΛϑΝΠϧπϦʔදࣔͯ͠ɺඈ ΔWeb UIΛ༻ҙ ‣ ࣍ͷϝδϟʔϦϦʔεͰͷೖΛ༧ఆ
Live Loading ‣ ςϯϓϨσʔλϑΝΠϧΛมߋͨ͠߹ɺ͍͍ͪ ͪϦϩʔυ͢Δͷ͕λϧ͍ ‣ grunt-contrib-watchͷAeromock൛Έ͍ͨͳ
テンプレートエンジン ‣ धཁͷߴͦ͏ͳςϯϓϨʔτΤϯδϯʹରԠ͢Δ ‣ ࣍Կ͕͍͍Ͱ͔͢Ͷ|шƅ)ŧŽŕ ‣ ಛఆͷόʔδϣϯʹ͕ͬͭΓґଘͯ͠͠·͍ͬͯΔ ͷͰɺ͏গ͠ϓϥΨϒϧͳߏʹ͍ͨ͠ʢOSGi ͷ࠾༻ͱ͔ʣ
テスト支援 ‣ ςϯϓϨʔτͱσʔλϑΝΠϧͷνΣοΫπʔϧ ‣ Ұಈ͘Α͏ʹ࡞ͬͨσʔλϑΝΠϧ͕ɺ์ஔ͞Ε ͯ؊৺ͳͱ͖ʹಈ͔ͳ͍ͳΜͯ͜ͱ͋Δ ‣ ܧଓతʹ࣭ΛอͯΔΈΛͭ͘Δ ‣ ࣮Ӆ͠ػೳͱͯ͠طʹ͋Δʢ·͍ͩʣ
まとめ
Javaで迷惑かけないようにしよう ‣ αʔόαΠυʹҾ͖ͣΒΕΔͱɺϑϩϯτΤϯδχ ΞͷJavaͷҹ͕ѱ͘ͳΔ ‣ Javaѱ͘ͳ͍ɻʢΫιʣϓϩδΣΫτ͕ѱ͍ ‣ ϑϩϯτΤϯδχΞʹจ۟ݴΘΕͳ͍ͨΊͷࢪࡦ͕ ඞཁ
ステッカー置いてきますね