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
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.2k
KubernetesのマニフェストをそれなりにCIしたい
stormcat24
4
1.5k
令和時代のSaaS開発
stormcat24
1
320
History in 5 years of CircleCI and CyberAgent
stormcat24
3
890
Kubernetes Handson Osaka
stormcat24
5
620
Kubernetes Handson
stormcat24
5
4.5k
DockerとKubernetesでアプリケーション開発にコンテナをフル活用!
stormcat24
0
360
Base Image Journey 2018
stormcat24
29
140k
kotlin-fest
stormcat24
13
18k
Other Decks in Programming
See All in Programming
[KNOTS 2026登壇資料]AIで拡張‧交差する プロダクト開発のプロセス および携わるメンバーの役割
hisatake
0
300
疑似コードによるプロンプト記述、どのくらい正確に実行される?
kokuyouwind
0
390
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
16
6.1k
LLM Observabilityによる 対話型音声AIアプリケーションの安定運用
gekko0114
2
440
余白を設計しフロントエンド開発を 加速させる
tsukuha
7
2.1k
Gemini for developers
meteatamel
0
100
AIによる高速開発をどう制御するか? ガードレール設置で開発速度と品質を両立させたチームの事例
tonkotsuboy_com
7
2.4k
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
330
フロントエンド開発の勘所 -複数事業を経験して見えた判断軸の違い-
heimusu
7
2.8k
2026年 エンジニアリング自己学習法
yumechi
0
140
Data-Centric Kaggle
isax1015
2
780
20260127_試行錯誤の結晶を1冊に。著者が解説 先輩データサイエンティストからの指南書 / author's_commentary_ds_instructions_guide
nash_efp
1
1k
Featured
See All Featured
WCS-LA-2024
lcolladotor
0
450
30 Presentation Tips
portentint
PRO
1
230
Designing Powerful Visuals for Engaging Learning
tmiket
0
240
The Cult of Friendly URLs
andyhume
79
6.8k
So, you think you're a good person
axbom
PRO
2
1.9k
Ethics towards AI in product and experience design
skipperchong
2
200
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.1k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
340
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
160
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
67
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.6k
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ѱ͘ͳ͍ɻʢΫιʣϓϩδΣΫτ͕ѱ͍ ‣ ϑϩϯτΤϯδχΞʹจ۟ݴΘΕͳ͍ͨΊͷࢪࡦ͕ ඞཁ
ステッカー置いてきますね