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
止まっちゃいけないフロントエンド開発
Search
stormcat24
August 23, 2014
Programming
24
9.5k
止まっちゃいけないフロントエンド開発
DevLOVE甲子園2014 東日本大会 技トラック 5回表
stormcat24
August 23, 2014
Tweet
Share
More Decks by stormcat24
See All by stormcat24
素早く賢く失敗するDeveloper Productivityの実現を目指して
stormcat24
4
4.8k
KubernetesのマニフェストをそれなりにCIしたい
stormcat24
4
1.3k
令和時代のSaaS開発
stormcat24
1
260
History in 5 years of CircleCI and CyberAgent
stormcat24
3
830
Kubernetes Handson Osaka
stormcat24
5
560
Kubernetes Handson
stormcat24
5
4.3k
DockerとKubernetesでアプリケーション開発にコンテナをフル活用!
stormcat24
0
310
Base Image Journey 2018
stormcat24
29
140k
kotlin-fest
stormcat24
13
17k
Other Decks in Programming
See All in Programming
データの整合性を保つ非同期処理アーキテクチャパターン / Async Architecture Patterns
mokuo
54
19k
Grafana Loki によるサーバログのコスト削減
mot_techtalk
1
150
SwiftUI Viewの責務分離
elmetal
PRO
2
270
PHPカンファレンス名古屋2025 タスク分解の試行錯誤〜レビュー負荷を下げるために〜
soichi
1
670
もう少しテストを書きたいんじゃ〜 #phpstudy
o0h
PRO
17
3.9k
CI改善もDatadogとともに
taumu
0
200
AIの力でお手軽Chrome拡張機能作り
taiseiue
0
190
第3回関東Kaggler会_AtCoderはKaggleの役に立つ
chettub
3
1.2k
Ruby on cygwin 2025-02
fd0
0
180
Go 1.24でジェネリックになった型エイリアスの紹介
syumai
2
280
推しメソッドsource_locationのしくみを探る - はじめてRubyのコードを読んでみた
nobu09
2
230
負債になりにくいCSSをデザイナとつくるには?
fsubal
10
2.6k
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
40
2k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.4k
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
We Have a Design System, Now What?
morganepeng
51
7.4k
Docker and Python
trallard
44
3.3k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
BBQ
matthewcrist
87
9.5k
The Invisible Side of Design
smashingmag
299
50k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.2k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Raft: Consensus for Rubyists
vanstee
137
6.8k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.1k
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 -