Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
止まっちゃいけないフロントエンド開発
Search
stormcat24
August 23, 2014
Programming
9.7k
24
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
止まっちゃいけないフロントエンド開発
DevLOVE甲子園2014 東日本大会 技トラック 5回表
stormcat24
August 23, 2014
More Decks by stormcat24
See All by stormcat24
素早く賢く失敗するDeveloper Productivityの実現を目指して
stormcat24
4
5.5k
KubernetesのマニフェストをそれなりにCIしたい
stormcat24
4
1.6k
令和時代のSaaS開発
stormcat24
1
370
History in 5 years of CircleCI and CyberAgent
stormcat24
3
930
Kubernetes Handson Osaka
stormcat24
5
650
Kubernetes Handson
stormcat24
5
4.6k
DockerとKubernetesでアプリケーション開発にコンテナをフル活用!
stormcat24
0
410
Base Image Journey 2018
stormcat24
30
140k
kotlin-fest
stormcat24
13
19k
Other Decks in Programming
See All in Programming
Groovy as a human and AI friendly programming language
paulk
0
120
最近”作らせてる” ローカルAIアプリの話
akit37
0
500
우리의 Nitro Modules는 당신의 Turbo Modules보다 아름답다
l2hyunwoo
0
230
[Dev Group Paris Octobre 26] Agentforce, SIforce, Claudeforce, Slackbot… on s'y retrouve ?
nabondance
0
120
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
ActionController meets Protocol Buffers
sorah
1
730
ChromeでローカルLLM
ryu1013
0
170
Web Framework Benchmark Battle 2026, Any%
a_matsuda
3
3k
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
440
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
160
contenteditable と日本語入力に向き合う
colorful12
0
220
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
380
Featured
See All Featured
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Exploring anti-patterns in Rails
aemeredith
4
540
Between Models and Reality
mayunak
4
520
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.9k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
740
Odyssey Design
rkendrick25
PRO
2
890
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
270
How GitHub (no longer) Works
holman
316
150k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
460
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
310
GraphQLとの向き合い方2022年版
quramy
50
15k
Transcript
止まっちゃいけない フロントエンド開発 Akinori Yamada / @stormcat24 DevLOVEߕࢠԂ2014 ౦ຊେձ
‣ @stormcat24 ‣ CyberAgent, Inc. ‣ Technical Engineer ‣ Server-side
‣ Front-end? ‣ DevOpts
アメーバ事業本部所属
だった
Ҿ༻ɿ4PDJBM(BNF*OGP
技術本部所属
本日のアジェンダ
‣ AmebaεϚϗ։ൃͷόοΫάϥϯυ ‣ ๊͍͑ͯͨ ‣ ϑϩϯτΤϯυͷॏཁੑͱຊདྷͷׂ ‣ ։ൃޮ্ͷͨΊʹॻ͍ͨπʔϧࢪࡦ
2012年 Amebaスマホスタート
スマートフォン開発へのシフト ‣ 30ԯԁϓϩϞʔγϣϯʢ201211݄ʣ ‣ 2Ͱ100ͷ৽نࣄۀ ‣ ৫վฤɺେ෯૿һͰҰؾʹγϑτ ‣ ϒϥβϓϥοτϑΥʔϜઓུ ‣
ήʔϜɾίϛϡχςΟ
技術的バックグラウンド ‣ ͱͱJavaܦݧऀ͕ଟ͍ձࣾ ‣ ݴޠͷׂ߹ ‣ ήʔϜ΄΅Java ‣ ίϛϡχςΟRubyPHP͋ͬͨ ‣
࠷ۙNode.js͔ͳΓ಄ɺJavaൺˣ
Ameba定番アーキテクチャ ‣ Java ‣ Spring ‣ MySQL ‣ Memcached ‣
Freemarker
フロントエンドは・・・ ‣ αʔόαΠυςϯϓϨʔτ͕ओྲྀʢFTL) ‣ ͨ·ʹBackbone.jsϓϩδΣΫτ͕ͪ´ ‣ ϑϩϯτΤϯυ͕βϧͳϓϩδΣΫτ͕ଟ͔ͬͨ ‣ ʢҰԠʣۀͱ͍͏͜ͱʹͳͬͯΔ
抱えていた問題点
‣ αʔόαΠυ͕ແ͍ͱɺϑϩϯτΤϯυͷ΄ͱΜͲ Λಈ͔͢͜ͱ͕Ͱ͖ͳ͍ ‣ Τϥʔ͕͋Δͱ࡞ۀ͕ࢭ·Δ ‣ DBͷσʔλʹґଘ͢Δ࡞ۀ ‣ ৬छͰ͚ͯۀͬͯݴͬͯΔ͚ͩ 強いサーバサイド依存
ىಈʹʙ ͬͯͶ͆͆͆ /VMM1PJOUFS&YDFQUJPO 0VU0G.FNPSZ&SSPS མͪΔʁϚελσʔλ͓͔͍͠Ͷ͆ ͋͋ɺͦΕ ൿͷಈ͔͠ํ͕ʢ͈́ ͏୲ऀؼΓ·ͨ͠ αʔηϯXXX
強まるサーバサイド支配 ×分業 ◯下請け 神聖サーバサイド帝国・トムキャット8世
待つことの辛さ マンガでも読んで 気長に待つか・・・ いや、もっとやるべきことが あるはずだ 意識低い人 意識高い人
フロントエンドにとっての 専門外領域
強いられる 専門外の作業
フロントエンドエンジニアの専門領域
やること大杉ワロタw
高まりつづける専門性 ‣ ઈ͑ͣΠϯϓοτɾΞτϓοτ͕ඞཁ ‣ εϚϗ։ൃͷ߹ɺϨεϙϯεಛʹγϏΞ ‣ "OESPJEରԠ@ ཀAʯ㲃 @ ‣
ϝϯςφϒϧͳ։ൃ ‣ ςετख๏
サーバサイド待ってる暇とか無い ɾɾɾ
水のように消費されるレッドブル
目指すべき 開発スタイル
ઐ֎ྖҬ͔Βͷ٫ ‣ ϑϩϯτΤϯυΤϯδχΞ͕ɺઐྖҬʹϦιʔε ΛྗͰ͖ΔΈΛͭ͘Δ͜ͱ ‣ 7BHSBOU $IFG͡Όຊ࣭ͷղܾʹͳΒͳ͍
αʔόαΠυґଘ͔Βͷ٫ ‣ ϑϩϯτΤϯυʹͱͬͯɺαʔόαΠυ͕ΫϦςΟ ΧϧɾύεʹͳͬͯͳΒͳ͍ ‣ αʔόαΠυͷঢ়ଶʹؔΘΒͣɺ։ൃͰ͖Δ͜ͱ
ΠϯλϑΣʔεࢦ։ൃ ‣ αʔόαΠυͱϑϩϯτΤϯυΛऔΓ࣋ͭɺ7JFX ͷΠϯλϑΣʔεϕʔεͷ։ൃʹγϑτ͢Δ ‣ શͳۀΛཱ֬ͤ͞Δ
αΫαΫ։ൃɾলϦιʔε ‣ "1αʔόͷىಈͪ࣌ؒΛແ͘͢͜ͱ ‣ ࡞ۀʹ͓͚Δ҉Λແ͘͢͜ͱ ‣ গͳ͍ϚγϯϦιʔεͰ࣮ݱ
超えるべき壁 ‣ ੵΓੵٕͬͨज़తෛ࠴ ‣ ӡ༻εϐʔυΛམͱ͍͚ͯ͠ͳ͍ ‣ طଘͷγεςϜʹ෭࡞༻Λ༩͑ΔͷͰ͋ͬͯͳ Βͳ͍ ‣ ߅ྗͱͷઓ͍
ツールを書きました
None
+7.ܥςϯϓϨʔτΤϯδϯͷϞοΫαʔό ςϯϓϨʔτʴσʔλʢ+40/:".-ʣˠ)5.- 4DBMB +40/Ϩεϙϯε ੩తίϯςϯπ "NFCBͷ+BWBϓϩδΣΫτͰಋೖ ϛυϧΣΞෆཁ Aeromock is αʔόαΠυϞδϡʔϧෆཁ
࠶ىಈෆཁ ඵͰىಈ লϝϞϦ
https://github.com/CyberAgent/aeromock OSS Released !! Now Available!! 来週公開!! OSS Released !!
Now Available!!
来週公開!!
テンプレートと データを用意するだけ
<body> <ul> <li>map.propSimple = ${map.propSimple}</li> <#list map.propList as value> <li>map.propList[${value_index}]
= ${value}</li> </#list> <li>map.propMap.childSimple = ${map.propMap.childSimple}</li> <#list map.propMap.childList as value> <li>map.propMap.childList[${value_index}] = ${value}</li> </#list> </ul> </body>
map: propSimple: propSimpleValue propList: - 11111 - 22222 - 33333
propMap: childSimple: childSimpleValue childList: - child11111 - child22222 - child33333 :".-ͰσʔλΛͭ͘Δ͚ͩ ίϝϯτॻ͚ΔͷͰ:".-ਪ +40/ͰՄ
そんな簡単な例ばかりじゃない
<body> <ul> <li>target.prop1 = ${target.prop1}</li> <li>target.exeucte1() = ${target.execute1()}</li> <#assign execute2Result
= target.execute2() > <li>target.exeucte2().id = ${execute2Result.id}</li> <li>target.exeucte2().name = ${execute2Result.name}</li> </ul> </body> .FUIPE$BMM
target: prop1: prop1Value __methods: - name: execute1 value: execute1Value -
name: execute2 value: id: 100 name: foobar ϝιουఆٛͰ͖Δ ҾͷΘͳ͍ ωετ0,
カスタムタグ・ファンクション
<body> <@div> <img src=“${staticUrl(‘/img/sample.jpg’)}”/> </@div> </body> FH'SFFNBSLFS 5BH шʆ 'VODUJPO
if (arguments.isEmpty()) { throw new IllegalArgumentException("Argument required.”) } return "http://$HOST${arguments[0]}"
TUBUJD6SMHSPPWZ (SPPWZͰ'VODUJPOͷग़ྗΛίϯτϩʔϧ
_writer.write(‘<div class=“hoge” ‘) for (entry in _params) { _writer.write(‘${entry.key}=“‘ +
entry.value + ‘“ ’) } _writer.write(‘</div>’) EJWHSPPWZ (SPPWZͰ5BHͷग़ྗΛίϯτϩʔϧ
ガールフレンド(仮) on Aeromock
None
対応済テンプレートエンジン ‣ Freemarker ‣ Handlebars.java ‣ Jade4J ‣ Velocity ‣
Groovy Templates ‣ Thymeleaf ‣ ଓʑରԠ༧ఆ
開発に必要なもの
None
Aeromockで開発する利点
"1αʔόىಈ͕ͪແ͘ͳͬͨ αʔόαΠυʹࠨӈ͞Εͳ͘ͳͬͨ σʔλߏ͑͞ԡ͑͞ͱ͚Կͱ͔ͳΔ ϫϯλΠϜܥͷදࣔ֬ೝ͕͍͢͠ ۾ͳ͘ςετͰ͖Δ ͍ܰ νʔϜؒͰΪεΪε͠ͳ͘ͳͬͨ τϥΠΞϯυΤϥʔָ͕ :".-Ͱ໌֬ͳ༷ͷऔΓܾΊߦ͍ɺೝࣝ૬ҧ͕ݮͬͨ ઐྖҬ֎ʹ͏ίετ͕֨ஈʹݮͬͨ
ෳύλʔϯσʔλ ڞ௨σʔλϑΝΠϧ ΧελϜϧʔςΟϯά 7JSUVBM)PTU その他の機能たち 7BHSBOU4IBSF 7JFXͱσʔλͷςετ
Vagrant Share
7BHSBOU4IBSF ‣ 7BHSBOUͰߏஙͨ͠ήετ04ͰՔಇ͢ΔΞϓϦΛɺ Ұ࣌తʹάϩʔόϧʹެ։͢ΔΈ ‣ "FSPNPDLͰϩʔΧϧελϯυΞϩϯ൛ͱผ ʹɺ7BHSBOU4IBSFެ։༻༻ҙ͍ͯ͠Δ ‣ /HJOY "FSPNPDL
#BTJDೝূߏ ‣ ྨࣅαʔϏεʹOHSPL MPDBMUVOOFM
ローカルを即実機確認 ࣮ॳظஈ֊͔Β࣮ػ֬ೝ ग़དྷӫ͑ͷڞ༗ૣظʹ %FWڥཁΒͣ มߋଈө
普及活動
‣ ('ʹ͏͔ͬΓಋೖͯ͠طࣄ࣮Խʹޭ ‣ ֤ϓϩδΣΫτʹσϞ࣋ͬͯӦۀ ‣ ಋೖোน؇ͷͨΊɺॳظߏΛ13Ͱೲ ‣ ӡ༻αϙʔτ ‣ ಋೖϓϩδΣΫτ͑ͨ͘Β͍
https://github.com/CyberAgent/aeromock Please your star and Pull Request!! 来週公開!!
まとめ
‣ ܰࢹ͞Ε͕ͪͳϑϩϯτΤϯυɺͦͷՁΛࠓҰ ݟͦ͏ ‣ ύϫʔόϥϯε͕ͳϓϩδΣΫτɺ୭͔͕ͦͷ ঈΛ͍ͬͯΔ ‣ ֤ʑ͕ྗ͖͢υϝΠϯΛࠓҰߟ͑Α͏ ‣ ։ൃޮͷϘτϧωοΫΛղফ͢ΔࡦΛߟ͑ɺ֤ʑ
ͷϦιʔεΛ͍͖Ζ͏
止まるな、止めるな フロントエンド
に興味のあるひと GPMMPX!TUPSNDBU
ご清聴ありがとうございました - Thank you for listening -