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
Introducing Now and Next.js
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Naoyuki Kanezawa
November 13, 2016
Programming
5.6k
12
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Introducing Now and Next.js
now と next.js の紹介
Naoyuki Kanezawa
November 13, 2016
More Decks by Naoyuki Kanezawa
See All by Naoyuki Kanezawa
WebSocketの圧縮機能とSocket.IO
nkzawa
5
9.3k
Socket.IO 1.0 Client for Javaの紹介
nkzawa
5
1.8k
Socket.IO 1.0の変更点・内部的な話
nkzawa
20
9.4k
Other Decks in Programming
See All in Programming
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.6k
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
170
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
14
5.6k
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
260
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
270
Javaの型とAI時代に型が大事な理由 / java types and type in AI era
kishida
2
140
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
270
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
160
Strategic Design in the Frontend: Moduliths & Micro Frontends @DDDEurope
manfredsteyer
PRO
0
110
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
170
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
200
そのテスト、説明できますか?~LWテスト戦略FW~のご紹介
nakahara
0
150
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
Testing 201, or: Great Expectations
jmmastey
46
8.2k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.6k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Mobile First: as difficult as doing things right
swwweet
225
10k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
460
The untapped power of vector embeddings
frankvandijk
2
1.8k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
360
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
Balancing Empowerment & Direction
lara
6
1.2k
Prompt Engineering for Job Search
mfonobong
0
350
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Transcript
Introducing Now and Next.js ౦ژNodeֶԂࡇ2016 @nkzawa
ࣗݾհ
@nkzawa Zeit, Inc ॴଐ next.js ϝϯςφ socket.io ϝϯςφ
Zeit ?
None
now micro hyper (چhyperterm) next.js
now micro hyper (چhyperterm) next.js
Next.js
ϢχόʔαϧͳReactΞϓϦͷͨΊͷখ͞ͳϑϨʔϜϫʔΫ
None
Get started 1. next.js ΛΠϯετʔϧ 2. next ίϚϯυΛ࣮ߦ 3. pages
σΟϨΫτϦʹ Reactίϯϙω ϯτΛฦ͢JSϑΝΠϧΛ࡞
ίϚϯυͰ͍͏ͱ $ npm install —save next $ node_modules/.bin/next $ vi
pages/index.js
pages/index.js import React from ‘react’ export default () => (
<div>Hello, world!</div> )
ϑΝΠϧΛURLʹϚοϐϯά pages/index.js -> / pages/about.js -> /about pages/foo/bar.js -> /foo/bar
ࣗಈͰ͜ΕΒ͕ߦΘΕΔ • αʔόϨϯμϦϯά • ίʔυׂ + Ԇಡࠐ • ࠷৽ίʔυࣗಈ࠶ಡࠐ(hot-code reloading)
• babelʹΑΔτϥϯεύΠϧ • webpackʹΑΔ݁߹
ઃఆͷඞཁͳ͠ ͔ͭ ։ൃɺύϑΥʔϚϯεΛ࠷దԽ
SPAͰΑ͋͘Δ • ॳظද͕͍ࣔ • ϖʔδ͕૿͑Δͱॏ͘ͳΔ
Next.jsͷղܾํ๏
αʔόϨϯμϦϯά ॳظදࣔύϑΥʔϚϯε্ɺSEO JSϑΝΠϧΛஔ͚ͩ͘
ϦονͳWebΞϓϦέʔγϣϯͷͨΊͷ7ͭͷݪଇ http://yosuke-furukawa.hatenablog.com/entry/2014/11/14/141415 “αʔόʔ͕ϖʔδΛϨϯμϦϯά͢ΔͷҙͰͳ͍ɻ” “tl;DR: αʔόʔϨϯμϦϯάSEO͚ͩͷͷ͡Όͳ͘ɺੑೳΛ্ͤ͞ΔͨΊͷͷ Ͱ͢ɻʢޙུʣ”
ίʔυׂ + Ԇಡࠐ ϖʔδຖʹ݁߹ϑΝΠϧΛ࡞͠ɺॳظදࣔ࣌ʹෆඞཁͳϞδϡʔϧಡΈࠐ·ͳ͍ɻ ભҠ͕ൃੜͨ͠ॠؒʹॳΊͯɺ࣍ͷίϯϙʔωϯτΛऔಘ͠දࣔ͢Δɻ ϖʔδಡΈࠐΉϞδϡʔϧ͕૿͑ͯɺଞͷϖʔδʹӨڹ͠ͳ͍ɻ
ͦͷଞͷػೳ
CSS glamor ϥΠϒϥϦΛͬͨελΠϧఆٛ - CSS-in-JS: JSͷදݱྗΛϑϧ׆༻ - ίϯϙωϯτຖʹಠཱ: ύϑΥʔϚϯεతʹଞϖʔδӨڹͳ͠ -
vendor prefix ࣗಈ༩ͷαϙʔτ
import React from 'react' import css from 'next/css' const style
= css({ background: ‘red’, ':hover': { background: 'gray' }, '@media (max-width: 600px)': { background: 'blue' } }) export default () => <p className={style}>hi!</p>
Link ίϯϙʔωϯτ pushState ΛͬͨϖʔδભҠ
import React from 'react' import Link from 'next/link' export default
() => ( <div><Link href=“/about”>͜͜</Link>ΛΫϦοΫ</div> )
Head ίϯϙʔωϯτ headλάͷࢠཁૉΛߋ৽
import React from 'react' import Head from 'next/head' export default
() => ( <div> <Head> <title>λΠτϧ</title> <meta charSet="utf-8" /> </Head> <p>hi</p> </div> )
getInitialProps τοϓϨϕϧίϯϙωϯτͷ props Λฦ͢staticϝιουΛఆٛ
IsomorphicʹσʔλΛऔಘ͢Δྫ import React from ‘react' import 'isomorphic-fetch' export default class
extends React.Component { static async getInitialProps () { // CORS͕༗ޮͳAPIʹαʔόɺΫϥΠΞϯτํ͔ΒΞΫηε const res = await fetch(‘http://api.example.com/user/123’) const user = await res.json() return { user } } render () { return <p>hi, {this.props.user.name}!</p> } }
ٞதͷIssue - Θ͔Γ͍͢URLͷ࣮ݱ /users/123 - babel, webpack ͷΧελϚΠζ ৄ͘͠: https://github.com/zeit/next.js#future-directions
Ұ୴·ͱΊ ReactΛ͍ͬͯΕ͙͢ʹ͑Δ Next.jsϑϩϯτΤϯυ։ൃΛָʹ͠·͢!
now
ΠϛϡʔλϒϧͳσϓϩΠαʔϏε
None
Get started 1. now ΛΠϯετʔϧ 2. now ίϚϯυΛ࣮ߦ͢Δ 3. ॳճͷΈϝʔϧʹΑΔϩάΠϯೝূ
ίϚϯυͰ͍͏ͱ $ npm install -g now $ now
package.json { “name”: “app” “scripts”: { “start”: “node server.js” }
}
ϙʔτΛҰͭͪड͚Δ const http = require(‘http’) http.createServer((req, res) => { res.writeHead(200,
{ 'Content-Type': ‘text/plain' }) res.end(‘Hello, world’) }).listen(3000, () => { console.log(‘Ready!’) })
ඞཁͳͷ npm start ͷఆٛͷΈ ͲͷϙʔτΛlistenͯ͠Α͍
શͯͷΞϓϦɺ͜ͷΑ͏ʹಈ࡞͢Δ • ৗʹHTTPS • ඪ४ͰHTTP/2αϙʔτ • Φʔτεέʔϧ • Πϛϡʔλϒϧ
ΠϛϡʔλϒϧɾσϓϩΠ σϓϩΠ͢Δຖʹ৽͍͠URL͕࡞͞ΕΔɻ ྫ͑: my-app-erkgfjtrna.now.sh ݹ͍URLআ͠ͳͯ͘Α͍ɻӬٱʹଘࡏ͠ଓ͚Δɻ
ຊ൪ެ։͢Δ࣌ʹɺΘ͔Γ͍͢ΤΠϦΞεɾυϝΠϯΛઃఆ $ now alias my-app-erkgfjtrna.now.sh my-app.now.sh
• URL͕ৗʹಉ͡ΞϓϦͷঢ়ଶΛද͢ • ߋ৽ϩʔϧόοΫ͕Ұॠ • εςʔδϯάڥ͕ඞཁͳ͘ͳΔ ͳͲͷར
Φʔτεέʔϧ τϥϑΟοΫϦιʔεͷมԽʹԠͯ͡ɺΠϯελϯεΛ૿ݮ τϥϑΟοΫΛෛՙࢄ
θϩͷεέʔϧ ͠Β͘τϥϑΟοΫ͕ͳ͍߹ɺΠϯελϯε͕θϩʹͳΔ ࠶ͼΞΫηε͕͋Εɺ৽ͨʹΠϯελϯε্ཱ͕͕ͪΔ
σʔλͷӬଓԽ Πϯελϯε͕ࣗಈͰੜɺഁغ͞ΕΔͨΊ෦ʹσʔλΛͤͳ͍ ΘΓʹ compose.com ͳͲͷΫϥυɾετϨʔδαʔϏεΛ͏
Dockerfile αϙʔτ package.json ͷΘΓʹ Dockerfile Λ༻ҙͯ͠ɺ $ now ͲΜͳݴޠͰॻ͔ΕͨΞϓϦσϓϩΠՄೳ
੩తαΠταϙʔτ htmlϑΝΠϧը૾ͳͲͷΞηοτΛ༻ҙͯ͠ɺ $ now ࣗಈͰ੩తαΠτ͔Ͳ͏͔ผ͞ΕΔ
ଞʹ • Now.app: σεΫτοϓɾΫϥΠΞϯτ • zeit.world: Free DNS αʔϏε •
now secret: γʔΫϨοτͷཧ
ϚΠΫϩαʔϏε micro ϥΠϒϥϦΛͬͨϢʔεέʔε https://github.com/zeit/micro
microΛͬͨαʔό࣮ const { json } = require(‘micro’) module.exports = async
(req, res) => { // ϦΫΤετϘσΟͷऔಘ const body = await json(req) console.log(body.data) // Ϩεϙϯε return { message: ‘ok’ } }
package.json { “name”: “foo”, “scripts”: { “start”: “micro” }, “dependencies”:
{ “micro”: “*” } }
σϓϩΠ & ΤΠϦΞεઃఆ $ now $ now alias foo-uiafeuzauf.now.sh foo.now.sh
ϚΠΫϩαʔϏε܈Λ࡞ foo.now.sh bar.now.sh baz.now.sh …
API GatewayͰ·ͱΊΔ api.my-app.com/foo -> foo.now.sh api.my-app.com/bar -> bar.now.sh api.my-app.com/baz ->
baz.now.sh …
Serverless ʹ͍ۙੑ࣭ (αʔόཧෆཁɺΦʔτεέʔϧɺؔɺ୯Ұͷؔ৺ࣄ) ʴ just HTTP (no ϩοΫΠϯ)
·ͱΊ now σϓϩΠΛγϯϓϧ͢Δ ˚ Zeit Node.JSΤίγεςϜʹߩݙ͍͖ͯ͠·͢