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
バックエンドエンジニアの私がお勧めする SPAフロントエンド開発環境
Search
Kaz Watanabe
July 25, 2020
Technology
6.3k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
バックエンドエンジニアの私がお勧めする SPAフロントエンド開発環境
@July Tech Festa 2020
Kaz Watanabe
July 25, 2020
More Decks by Kaz Watanabe
See All by Kaz Watanabe
開発エンジニアが取り組む DevSecOps ~ GitHub Enterprise × Azure での実践~
kaz29
0
39
Greenは本当にGreenか? - B/GデプロイとAPI自動テストで安心デプロイ
kaz29
1
200
CI/CD/IaC 久々に0から環境を作ったらこうなりました
kaz29
1
490
開発エンジニアが実践するDevSecOps
kaz29
0
170
PHPCon福岡2024-Azureもなかなかいいですよ.pdf
kaz29
2
390
Azure Container Apps + Bicep 〜 こんな感じで運用しています
kaz29
3
1.3k
20220908_フロントエンドパフォーマンス改善.pdf
kaz29
2
200
PHP製のPodCast配信用WebアプリをReact+Next.jsなSSGで作り直してみた話
kaz29
3
720
201909-PHPCon北海道-PHPでCI_CD.pdf
kaz29
0
4.2k
Other Decks in Technology
See All in Technology
[ホンマでっか SRE] あなたはなぜ SRE に?
_awache
0
350
みてねにおけるAI-DLC導入活動とAIドリブン開発の現在地/JAWS-UG AI-DLC #2
isaoshimizu
2
280
The Django UUID Story - DjangoCon US 2026
pauloxnet
0
310
分割40%キーボードにスムーズに入門するには
hoto17296
1
180
IHV like なユースケースへのOpenID Connect 関連仕様の適用事例
optim
0
360
OpenID for Verifiable Credentials 実装から見えた相互運用性確保までの道のり(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
360
Master Dataグループ紹介資料
sansan33
PRO
1
4.8k
アクセスキーが漏れた日にやるべきこと- 無効化の先にある本当の対応
kazzpapa3
0
360
APIセキュリティを組織で実現するには~注力する点と設計・実装に入れたい対策~
riiimparm
2
720
Digital Credentials API × OpenID4VP ブラウザ完結型本人確認の実装知見(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
340
[RSJ26] Flow as Flow: Modeling Robot Velocity Fields as Probability Velocity Fields
keio_smilab
PRO
0
110
全社に広がるMCPサーバーを、 どう安全に管理するか MCPass開発の舞台裏
mtpooh
3
180
Featured
See All Featured
Everyday Curiosity
cassininazir
0
300
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
290
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
490
Why Our Code Smells
bkeepers
PRO
340
58k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
430
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
420
Game over? The fight for quality and originality in the time of robots
wayneb77
1
260
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
220
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
800
Transcript
Θͨͳ!LB[@ όοΫΤϯυΤϯδχΞͷࢲ͕͓קΊ͢Δ 41"ϑϩϯτΤϯυ։ൃڥ !+VMZ5FDI'FTUB
8)0 ลҰ (Θͨͳ ͔ͣͻΖ) @kaz_29 גࣜձࣾϋʔτϏʔπ ։ൃࣄۀ෦
גࣜձࣾϋʔτϏʔπ ຊۀMSPͷձࣾͰɺ ։ൃࣄۀΛ͍ͬͯ·͢ɻ
IC4","#" QPEDBTUͬͯ·͢
ΑΖ͓͘͠Ͷ͕͍͠·͢
'SPOUFOE8FC%FWFMPQNFOU
None
શ෦ΩϟονΞοϓͱ͔ͭΒΊ
৽͍͠ΞϓϦΛ࡞Γ࢝ΊΔ ͱ͖ʹຖճڥઃఆʹΉ
͙͢ʹ࡞Γ࢝ΊΒΕͯɺ ؾ࣋ͪΑ͘։ൃΛਐΊΒΕΔ ͓͢͢Ίͷશ෦ೖΓͷ ࣗ༻CPJMFSQMBUFͬΆ͍ͷ͕ཉ͍͠
ٕज़ཁૉ
ٕज़ཁૉ w 3FBDUIUUQTKBSFBDUKTPSH w .PC9IUUQTNPCYKTPSH3&"%.&IUNM w /FYU+4IUUQTOFYUKTPSH w UZQFTDSJQUIUUQTXXXUZQFTDSJQUMBOHPSH w
NBUFSJBMVJIUUQTNBUFSJBMVJDPN w TUPSZCPPLIUUQTTUPSZCPPLKTPSH w KFTUIUUQTKFTUKTJP
ٕज़ཁૉ 3FBDU w 'BDFCPPLۘͷ+BWB4DSJQUϑϨʔϜϫʔΫ w "OHVMBSͱ͔7VFͱ͔ͱΑ͘ൺΒΕΔ w ࠃͰ7VF͕ਓؾ w
ࠓճ͍׳Εͨ3FBDUͰ͢͢Ί·͢
ٕज़ཁૉ .PC9 w εςʔτΛཧ͢Δπʔϧ w 3FEVYͷସ͑ w ͓खܰ w ͍֮͑͢
w ॻ͘ίʔυྔ͕গͳ͍ w ෦ίʔυ͕ෳࡶ ࠇຐज़ͬΆ͍ ͷͰσόοά͕͍͠ w ࢲࠓ·Ͱࠔͬͨ͜ͱͳ͍ w ͦͦάϩʔόϧͳεςʔτඞཁ࠷ݶʹͯ͠ଟ༻͠ͳ͍ํ͕ྑ͍ ؾ͕͢Δ
ٕज़ཁૉ /FYU+4 w 6OJWFSTBM *TPNPSQIJD +BWB4DSJQUϑϨʔϜϫʔΫ w 443ରԠ w γϯϓϧͰೖ͍͢͠
w ͚Ͳ͍͜ͳ͢ͱ৭ʑͰ͖Δ w SPVUJOHΛॻ͔ͳͯ͘ྑ͍ ॻ͘͜ͱͰ͖Δ w 4UBUJD)5.-&YQPSU
ٕज़ཁૉ UZQFTDSJQU w ϚΠΫϩιϑτ͕։ൃͨ͠Φʔϓϯιʔεݴޠ ͬ͘͟Γݴ͏ͱํఆ͕ٛͰ͖Δ+BWB4DSJQU w +BWB4DSJQUͷεʔύʔηοτ w ܕɺΠϯλʔϑΣʔεɺΫϥεͳͲͳͲ͕͑Δ w
δΣωϦοΫ͕͑Δ w *%&͕ڧྗʹαϙʔτͯͯ͘͠ΕΔ
ٕज़ཁૉ NBUFSJBMVJ w 3FBDU͚6*ίϯϙʔωϯτϥΠϒϥϦ w (PPHMFͷ.BUFSJBMσβΠϯΛϕʔεʹ։ൃ w ๛ͳػೳ w 5IFNF
w ϨεϙϯγϒରԠػೳ
ٕज़ཁૉ TUPSZCPPL w ίϯϙʔωϯτ୯ҐͰαϯυϘοΫεͰ։ൃͰ͖Δ w ๛ͳϓϥάΠϯ w BEEPOWJFXQPSU w BEEPOJO
w ίϯϙʔωϯτΛҰཡͰڞ༗Ͱ͖Δ w Χλϩά w υΩϡϝϯτ w ςετ ͖ͷະணखͰΑ͘Θ͔͍ͬͯͳ͍
ٕज़ཁૉ KFTU w +BWB4DSJQU༻ςεςΟϯάϑϨʔϜϫʔΫ w ίʔυΧόϨοδ w ϞοΫ w ϑϩϯτΤϯυ։ൃͷςετʹ͍ͭͯࡧத
w DVTUPNIPPLͷॲཧͷςετ w σʔλͷՃΛ͏ॲཧͷςετ
CPJMFSQMBUF
CPJMFSQMBUF w લग़ͷٕज़ཁૉΛશͯΈࠐΉ w )FMMP 8PSMEͰͳ࣮͘ࡍʹಈ͘ίʔυαϯϓϧΛؚΉ w 4UPSF w "1*࿈ܞ
w ͲΜͳ;͏ʹ։ൃ͍ͯ͠Δ͔ ͋Δఔ Έ͑Δ w 4UBUJD)5.-&YQPSU w ϩʔΧϧͰͷಈ࡞֬ೝڥ w σϓϩΠ
αϯϓϧΞϓϦ https://www.weatherapi.com/api.aspx
αϯϓϧΞϓϦ
αϯϓϧΞϓϦ w UZQFTDSJQU w 'VODUJPO$PNQPOFOU w )PPLT
None
։ൃͷਐΊํ
։ൃͷਐΊํ w OPEFOW IUUQTHJUIVCDPNOPEFOWOPEFOW w %PDLFS%FTLUPQGPS.BD IUUQTIVCEPDLFSDPNFEJUJPOTDPNNVOJUZEPDLFSDFEFTLUPQ NBD
։ൃͷਐΊํ ίϯϙʔωϯτΛ࣮ w ZBSOTUPSZCPPL TUBSUTUPSZCPPLQTQVCMJD IPUSFMPBE WJFXQPSUΛସ͑ͯQDNPCJMFͷݟͨΛ֬ೝ ݴޠΛସ͑ͯදࣔ֬ೝTUBUJDXFCͰͷରԠݕ౼த
։ൃͷਐΊํ ίϯϙʔωϯτΛ࣮ 1 import React from 'react' 2 import {
storiesOf } from '@storybook/react' 3 import WeatherCard from '.' 4 import { currentWeather } from '~/__fixtures__/current_weather' 5 6 storiesOf('components/WeatherCard', module) 7 .add('default', () => ( 8 <WeatherCard 9 currentWeather={currentWeather} 10 /> 11 )) JOEFYTUPSJFTUTY
։ൃͷਐΊํ υϝΠϯϩδοΫͷ࣮ w ZBSOUFTU /0%&@&/7UFTUKFTUOPDBDIFFOWKTEPN 6OJU5FTUΛॻ͖ͳ͕Β࣮ AZBSOUFTUGϑΝΠϧ໊Uςετ໊A $PNQPOFOUͷςετͪΐͬͱΑ͘Θ͔ΒΜ ҙຯ͕͋ΔςετΛ͔͚Δ͔
։ൃͷਐΊํ ΞϓϦͷ࣮ w ZBSOEFW OFYUEFW IPUSFMPBE ಈ࡞֬ೝ͠ͳ͕Β։ൃ
։ൃͷਐΊํ ZBSOTUPSZCPPL ZBSOEFW ίʔυमਖ਼ $PNQPOFOUͷ࣮ ಈతͳڍಈͷ࣮ IPUSFMPBE ZBSOUFTU %PNBJOMPHJDͳͲ ͷ6OJU5FTU
։ൃڥ ࠷ऴ֬ೝ 4UBUJD)5.-&YQPSUͨ͠੩తϑΝΠϧ w ZBSOCVJME OFYUCVJMEOFYUFYQPSU 4UBUJD&YQPSUͰBSUJGBDUΛ࡞ w EPDLFSDPNQPTFVQE
OHJOYίϯςφܦ༝Ͱಈ࡞֬ೝ
։ൃڥ ࠷ऴ֬ೝ 4UBUJD)5.-&YQPSUͨ͠੩తϑΝΠϧ 1 version: '3.1' 2 3 services: 4
nextjs-template: 5 container_name: nextjs-template 6 image: nginx:latest 7 ports: 8 - 80:80 9 volumes: 10 - ./out:/usr/share/nginx/html:cached 11 - ./nginx.conf.d:/etc/nginx/conf.d 12 restart: always
։ൃڥ ࠷ऴ֬ೝ 4UBUJD)5.-&YQPSUͨ͠੩తϑΝΠϧ ϖʔδભҠઌͰϦϩʔυ͢Δͱ/PU'PVOE
։ൃڥ ࠷ऴ֬ೝ 4UBUJD)5.-&YQPSUͨ͠੩తϑΝΠϧ 1 server { 2 listen 80; 3
server_name localhost; 4 5 #charset koi8-r; 6 #access_log /var/log/nginx/host.access.log main; 7 8 location / { 9 root /usr/share/nginx/html; 10 index index.html index.htm; 11 try_files $uri $uri.html /index.html; 12 } ... ͚ͩ͜͜Ճ
σϓϩΠ
σϓϩΠ σϓϩΠઌͷબࢶ w ͳΜΒ͔8FCαʔόʔΛཱͯΔ w 4UBUJD8FCΛϗετ͢ΔαʔϏεΛ͏ w ֤ΫϥυϕϯμʔͷΦϒδΣΫτετϨʔδ ੩త8FCΛϗετ͢ΔαʔϏε w
"[VSF"QQ4FSWJDF4UBUJD8FC"QQT
σϓϩΠ σϓϩΠઌͷબࢶ w ͳΜΒ͔8FCαʔόʔΛཱͯΔ w 4UBUJD8FCΛϗετ͢ΔαʔϏεΛ͏ w ֤ΫϥυϕϯμʔͷΦϒδΣΫτετϨʔδ ੩త8FCΛϗετ͢ΔαʔϏε w
"[VSF"QQ4FSWJDF4UBUJD8FC"QQT
σϓϩΠ "[VSF4UBUJD8FC"QQT1SFWJFX w ੩తαΠτͷϗεςΟϯάαʔϏε w (JU)VC"DUJPOTʹΑΔ#VJME%FQMPZ (JU)VC࿈ܞඞਢ w ΧελϜυϝΠϯରԠɺ44-ূ໌ॻ
ແྉ ΧελϜυϝΠϯͷઃఆΛ͢Δͱɺࣗಈతʹ44-ূ໌ॻ࡞͞ΕΔ w ϓϨϏϡʔػೳ 13Λ࡞͢ΔͱɺϓϨϏϡʔ൛͕ࣗಈσϓϩΠ͞ΕΔ ϚʔδΫϩʔζ͢Δͱຊ൪ө͞ΕɺϓϨϏϡʔ൛ࣗಈআ w ϓϩϏδϣχϯά࣌ʹσϑΥϧτͷઃఆ͕ࣗಈੜ͞ΕΔ w ΞϓϦΤϯδχΞʹ͍͍͢
σϓϩΠ "[VSF4UBUJD8FC"QQT1SFWJFX
σϓϩΠ "[VSF4UBUJD8FC"QQT1SFWJFX
σϓϩΠ "[VSF4UBUJD8FC"QQT1SFWJFX
σϓϩΠ "[VSF4UBUJD8FC"QQT1SFWJFX
͓·͚
͓·͚ 6OJU5FTUॻ͍ͯɺ(JU)VC"DUJPOTಋೖͨ͠ͷͰ$*͠Α͏ ... 12 jobs: 13 build_and_deploy_job: 14 if: github.event_name
== 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed') 15 runs-on: ubuntu-latest 16 name: Build and Deploy Job 17 steps: 18 - uses: actions/checkout@v2 19 with: 20 submodules: true 21 - name: Setup nodejs 22 uses: actions/setup-node@v1 23 with: 24 node-version: '12.x' 25 - run: yarn install --dev 26 - run: yarn test:ci 27 - name: Build And Deploy 28 id: builddeploy ...
·ͱΊ
·ͱΊ w ϑϩϯτΤϯυ։ൃɺ·ͩ·ͩਐԽ͕͍͛͠ w લͷͬͨࣽ͝ײ ແ͘ͳͬͨʁ w ͲΜͲΜ͍͍ײ͡ʹਐԽͯ͠Δײ w ۤ࿑͢Δ͜ͱ͋Δ͚ͲɺόοΫΤϯυಉ͡
w ϑϩϯτΤϯυ։ൃͨͷ͍͠ &OKPZ https://github.com/kaz29/nextjs-template
͓͠·͍