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
15分で知(った気にな)る最近のフロントエンド事情
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
mugi / Hajime Mugishima
September 27, 2018
Technology
250
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
15分で知(った気にな)る最近のフロントエンド事情
2018.09.27 もくテク
mugi / Hajime Mugishima
September 27, 2018
More Decks by mugi / Hajime Mugishima
See All by mugi / Hajime Mugishima
AIと乗り切った1,500ページ超のヘルプサイト基盤刷新とさらにその先の話
mugi_uno
2
460
サイボウズフロントエンドの活動から考える探究と発信
mugi_uno
1
180
フロントエンドエキスパートチームの解散は 「いい話」なのか?
mugi_uno
8
2.5k
サイボウズフロントエンドの横断活動から考える AI時代にできること
mugi_uno
4
2.1k
令和7年版 あなたが使ってよいフロントエンド機能とは
mugi_uno
14
7.3k
New Order in Cascade Sorting Order
mugi_uno
3
4.4k
Deep Dive into React Stream/Serialize
mugi_uno
8
2.3k
Next.js App Router での MPA フロントエンド刷新
mugi_uno
40
26k
コロナ禍 Frontend おさらい
mugi_uno
1
500
Other Decks in Technology
See All in Technology
案件に一番詳しいAIを Amazon Bedrock AgentCore で作る ― 知見が知見を生むチームへ / Compounding Knowledge with AgentCore
yusukeshimizu
1
160
AIに持続⼒を与える 判断の⻑期記憶設計
eiei114
1
430
My broken English still works: speaking at global OSS events
naruoga
0
120
LanceDB入門
mocobeta
9
640
Oracle MCP Servers Explained
thatjeffsmith
0
300
ガバメント AI 源内を地方自治体は活用できるのか可能性と課題、期待について
takeda_h
2
460
AIで変わるエンジニアの働き方(仮)
naoinaoi
0
230
NANDでも描画したい!
nichica906
0
230
自宅NWにISR4331を導入してみた話
okaits
0
120
社内の7割が使うデータ基盤を、 データチーム2人で回すためにやったこと
koh_yoshi
4
1.5k
私がブラウザを自作したくなった理由
supurazako
1
270
英語が話せなくてもKubeConスタッフに参加した話
yusuke427
0
1k
Featured
See All Featured
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
640
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
250
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
270
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
How STYLIGHT went responsive
nonsquared
100
6.2k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
440
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
HDC tutorial
michielstock
2
800
A Soul's Torment
seathinner
6
3.5k
Transcript
15分で知る 最近の フロントエンド事情 2018/9/27 もくテク 最近のWeb技術についてワイワイ語る会 (った気にな)
麦島 一 (むぎしま はじめ) @mugi_uno 自己紹介
フロントエンド、ついていけてます?
None
よく聞くワード 「Javascriptは初心者向け」
現実
一気におさらいしてみよう!
〜はじめに〜
15分じゃ無理
〜目標〜 1. 言語自体の話 2. JSと静的型付け 3. よく聞くフレームワーク 4. 状態管理 5.
モジュール管理 を知った気になってもらう
言語自体の話
ECMAScript • ESxとも呼ばれる(e.g. ES6) • 実装状況はブラウザによる https://kangax.github.io/compat-table/es6/ • 提案状況→tc39/proposals •
Javascriptの標準仕様
ECMAScript • ESxと呼ばれたりする(e.g. ES6) • 実装状況はブラウザによる https://kangax.github.io/compat-table/es6/ • 提案状況→tc39/proposals •
Javascriptの標準仕様
レガシー環境に合わせる必要がある • 要するにIE11で動かないといけない 参考: MDN 「クラス定義」 サポート状況 https:// developer.mozilla.org/ja/ docs/Web/JavaScript/
Reference/Classes
新しい仕様があるのに 使えない…
Babel • ECMAScript 2015+のコードを 未実装の環境でも動く形に変換する • コードをtransformする際に、 ついでに色々できるので混乱しがち (代表例: JSX→JSの変換)
AltJS • ECMAScriptに変換可能な言語 • 混同しがちだが、ECMAScript自体 は仕様なので、AltJSではない
AltJSの例 • TypeScript - Microsoft製 / よく聞く • Dart -
Google製 • ReasonML - Facebook製 • CoffeeScript - あんまり元気がない
なにを選べばいい?
• 私なら、可能ならTypeScriptを選ぶ • フレームワークによってはつらいので、 その場合はES2017 (async/await) • Proposalのstage0-2は避ける
JSと静的型付け
JSと型 • JSは動的型付言語 • データ型は7種類のみ • String • Number •
Boolean • Object • null • unde ned • Symbol (ES2015+)
静的型検査を したくなることがある
よくある問題 • APIのレスポンスはわかっているけど… • タイポで動いてませんでした const user = response.uesr; //
user === undefined
レスポンスを型定義できれば…
型を強化する色々 • TypeScript • Flow • 静的型付けのできるAltJS • 対応ライブラリが多い •
個人的にオススメ • ES上に静的型付けのみを提供する • コメントで定義できる
必要?
• 可能なら使ったほうが良いと思う • リファクタリングの敷居がグッと下がる • わ、わたしも導入しないと…(焦)
よく聞くフレームワーク
jQueryのコード例
e.g. 追加ボタンでタスクを追加 $(‘#add-button’).on('click', () => { const input = $('<input>');
input.attr('type', 'text'); $(‘#todo-list').append(input); }); クリックすると タスクを追加
e.g. 追加ボタンでタスクを追加 $(‘#add-button’).on('click', () => { const input = $('<input>');
input.attr('type', 'text'); input.addClass('todo'); $(‘#todo-list').append(input); }); 仕様変更 →classの追加
e.g. 追加ボタンでタスクを追加 $(‘#add-button').on('click', () => { const todo = $('<div>');
todo.addClass(‘wrapper’); const input = $('<input>'); input.attr('type', 'text'); input.addClass('todo'); todo.append(input); $('#todo-list').append(todo); }); 仕様変更 →divで囲む
e.g. 追加ボタンでタスクを追加 $(‘#add-button').on('click', () => { const todo = $('<div>');
todo.addClass(‘wrapper’); if($(‘.todo’).length % 5) { const separator = $(‘<hr>’); todo.append(separator); } const input = $('<input>'); input.attr('type', 'text'); input.addClass('todo'); todo.append(input); $('#todo-list').append(todo); }); 仕様変更 →5件ごとに区切る
e.g. 追加ボタンでタスクを追加 $(‘#add-button').on('click', () => { const todo = $('<div>');
todo.addClass(‘wrapper’); if($(‘.todo’).length % 5) { const separator = $(‘<hr>’); todo.append(separator); } const input = $('<input>'); input.attr('type', 'text'); input.addClass('todo'); todo.append(input); $(‘#todo-list').append(todo); if($(‘.todo’).length === 20) { $(‘#add-button’).hide(); } }); 仕様変更 →20件を上限
e.g. 追加ボタンでタスクを追加 $(‘#add-button').on('click', () => { const todo = $('<div>');
todo.addClass(‘wrapper’); if($(‘.todo’).length % 5) { const separator = $(‘<hr>’); todo.append(separator); } const input = $('<input>'); input.attr('type', 'text'); input.addClass('todo'); todo.append(input); $(‘#todo-list').append(todo); if($(‘.todo’).length === 20) { $(‘#add-button’).hide(); } }); Q. 最終的なDOMの形は?
• 気軽に描画結果を変更できない • CSS適用に一苦労 • 実際にはこんなものではない • 機能の追加・修正の難易度も高い
• React • Vue • Angular
• Viewを事前に定義する • 状態とViewを分離する 共通している考え方
さっきの例をVueのtemplateで書くと? <template> <div id='todo-list'> <div class='wrapper' v-for='(todo, index) in todoList'>
<input type='text' class='todo' v-model='todo' /> <hr v-if='index % 5' /> </div> <button id='add-button' v-if='todoList.length < 20’> Add Todo </button> </div> </template> DOMを 宣言的に定義
React Facebook / VirtualDOM / JSX • 事例・情報が多い • 他ライブラリとの依存が薄い
• JSX書くのがつらい • 結局他ライブラリが必要になる (Redux, React-Router, など) • トータルで記述量が多くなりがち
Vue コミュニティ / VirtualDOM / SFC • 日本語ドキュメントが充実 • 学習コストが低め(と思う)
• 関連ライブラリとの一体感 • 型付けがつらい • 大企業の後ろ盾がないので、 人によっては不安になるかも
Google / フルスタック / DI • 全部入りなので慣れると強いらしい • TypeScriptとの相性が良い (公式で推奨)
• 独自の概念が多い • 学習コストが高い Angular (経験が薄いので偉そうなことを書けない)
どれにしたらいいの?
いまゼロから学ぶなら Vueから入ると良さそう (個人の意見です)
状態管理
• データ(状態)が散らばったまま • ドメインロジックも散らばっている • SPAだと特につらくなる Reactなどを使って、 Viewは宣言的になったけど… e.g.) アプリケーション全体で使うFlashメッセージ
状態管理だけをきれいにまとめたい (脱オレオレ実装)
• Redux • Vuex
• Reactでの採用例が多い • 単一Store / ReadOnly • 変更時は純粋関数のみを使う Redux
• Vueに特化した状態管理 • Vueならこれにしとけば良い Vuex
必要なの?
• 規模が大きくなってからの 状態管理ライブラリ導入はキツい 入れるなら早めに • 早い段階で判断したほうがいい
モジュール管理
• Javaで言えばimport • Cで言えばinclude • Rubyで言えばrequire • ES5以前はモジュールの概念がない → コード間の依存関係を表現できない
• みんな工夫してがんばってた (RequireJSというものがあってじゃな…)
• Node.jsの登場 • CommonJSの採用 const sub = require(‘./sub.js’);
ブラウザでも使いたい…!
• webpack • Parcel • ES Modules
• CommonJSで書いたコードを ブラウザで動く形に変換できる • 他にできることがめっちゃ多い • uglify(コード圧縮・難読化) • PostCSS/SASSの変換 •
画像変換 など..
• webpack同様のモジュールバンドラ • 特徴 : Zero Con guration Parcel
ECMAScript単体で モジュール管理できないの?
• ES6(2015)以降の仕様 ES Modules import sub from ‘./sub.js’; • webpack/Parcelは
ESModulesも変換できる
結局どうすればいいの?
• ESModulesで書くのが主流 • やりたいことが増えてくると webpackじゃないと厳しくなる • とりあえず考えたくない場合は Parcelが圧倒的に楽 • 不要になる未来は到底来ない気がする
その他
• ESLint, Prettier • Mocha, Jest • puppeteer • SSR
• Next.js • Nuxt.js • Service Worker • PWA
時間切れ
まとめ
15分はあまりにも短すぎる
よく聞くワード 「フロントエンドは変化が速い」
facebook/react - Releases • v16.0.0 - 2017/09/27 • v15.0.0 -
2016/04/09 • v0.14.0 - 2015/08/08
ECMAScript • 2017 - 2017/06 • 2016 - 2016/06 •
6(2015) - 2015/06
そこまで速いわけでもないのでは?
なぜ速く感じるのだろう?
現実
現実 変化するものが多い
私たちは忙しいので、 すべてを常に追うのは難しい。
現実的な話、 新しいものを一気に導入するのは 容易じゃない
ひとつずつやっていこう!