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
ViteでReactを部分的に導入していく
Search
Yuba
April 23, 2024
Programming
750
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ViteでReactを部分的に導入していく
Yuba
April 23, 2024
Other Decks in Programming
See All in Programming
APNsからLive Activityを開始する話
yumnumm
0
160
Verilogで学ぶCPU自作入門
uyuki234
8
4.1k
Workers Cache を知る
syumai
0
350
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.5k
設計次第でAIコードの読む量は減らせる / designing-for-code-reading
minodriven
34
16k
Turning Architecture into Unit Tests in the AI Era (NSSpain XIV)
steliosf
PRO
1
140
Androidだけじゃない、DroidKaigiで広がった私の技術スタック
akkeylab
0
120
ジョジョの世界をXRで再現する
mofurune
0
150
CodeRabbitの効果検証と過ごしてみた3ヶ月
armondando
0
210
golang-bob.pdf
iwatsukayura
0
120
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
280
Simple Storage Service(S3) is not simple
iwatsukayura
0
240
Featured
See All Featured
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
590
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.1k
Unsuck your backbone
ammeep
672
58k
Designing for humans not robots
tammielis
254
26k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
260
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
630
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Design in an AI World
tapps
1
350
Designing for Timeless Needs
cassininazir
1
520
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
440
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
360
Transcript
ViteでReactを部分的に導入していく 千株式会社 弓場広登
自己紹介 弓場(ゆば)広登 2023年入社 • 現在ははいチーズ!フォトのフロントエンド開発やビルドツールの改善な どを中心に動いてます • TypeScript Node.jsなどが好きです •
最近の関心はNext.js (App Router)やデザインシステム
Viteとは?🤔 • Vue.jsの作者 Evan you 氏らによって開発されたフロントエンドのビルドツール • ES Modulesのモジュール分割の仕組みで必要なコンパイルの差分だけをブラウ ザに送るので、開発環境での更新などがすぐに完了する
https://ja.vitejs.dev/guide/why.html ◦ 既存のWebpackなどのバンドラーはすべてのファイルをクロールしてビルド している • React Vue などのプロジェクトがすぐに作成できる • Rollupでのファイルの配信を前提としたビルドにもデフォルトで対応している ✅ • Webpack.configのような複雑な設定が不要
npm create vite@latest ✔ Project name: … example-project ✔ Select
a framework: › React ✔ Select a variant: › TypeScript Scaffolding project in /hoge-project... Done. Now run: cd example-project npm install npm run dev vite.config.ts (初期のviteの設定ファイル) import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' // https://vitejs.dev/config/ export default defineConfig({ plugins: [react()], }) ViteでReactの新規プロジェクトを立ち上げる場合 🚀
部分的に導入するとは ❓ 自分が最近関わっていたプロジェクトのフロントエンド開発では以下の課題感 がありました • 既存のフロントエンドはLaravelのBladeのテンプレートを配信するMPA • フロントエンドのビルド環境が古い & メンテナンスがされていない
◦ 既存のコードはLaravelのBlade上でVueなどをどうにか使っている状態... • 上記の状態を引き継いだ状態でフロントエンドのコードを書いても、コードレビューがしにく い、メンテがされにくい状態に陥りそう • React(Next.js)などへのリプレイス計画があるので、それを前提に Reactでのコードの 資産を作っておきたい • チーム内でのReactへの知見を高めておきたい
今回のフロントエンド開発の要件 ✅ • 今回Reactが求められるような動的なフロントエンドの機能は1,2画面 • 複数のページにまたがることはない ◦ バックエンドでのロジックが中心的 • シンプルにAPIに対してリクエストをするだけのアプリケーションでいい
• 既存のビルドシステムなどの改修は影響範囲が難しい • 特定のページだけでReactを使えればいい ◦ そのページ用のビルドファイルだけがあればよい 👍 Viteを使うことでシンプルにモダンなフロントエンド開発ができる &将来 Next.jsなどへアプリケーションを作り直した場合も既存のComponentや Pageなどの資産が流用しやすい
ビルドされたReactのビルドファイルを扱う 🍳 ReactなどのSPAアプリケーションは一つのシングルHTMLファイルで一つ の.jsファイルやアセットのファイルを読み込む • npm run buildでビルドした1つの.js ファイル .css
ファイルを必要な ページで扱う • Viteでは外部ディレクトリに対してのビルドも可能なのでLaravelのリソー スに対してビルドをすることでBladeファイルで扱えるようにする
ビルドファイルの読み込み 💿 エントリーポイントにするtsxのファイルで以下のようなDOMをでレンダリン グするルートのidを設定する createRoot(document.getElementById( "example")!).render( <React.StrictMode> <Example /> </React.StrictMode>
); Blade側でのjsファイルの読み込み <link>タグでのCSSのビルドファイル の読み込みも必要 読み込んだDOMで表示をするために React側でエントリーポイントのファイルで rootの設定 - デフォルトだとroot - 特定のページで扱うならそれに合わせた idをつけるほうがわかりやすい <div id="example"></div> <script src="example.js"></script>
ビルド設定などを含めたvite.config.ts import { defineConfig } from "vite"; import react from
"@vitejs/plugin-react"; import svgr from "vite-plugin-svgr"; // https://vitejs.dev/config/ export default defineConfig({ plugins: [react(), svgr({ include: "**/*.svg" })], build: { rollupOptions: { output: { dir: "../../../laravel/resources/example", entryFileNames: "example.js", assetFileNames: "example.[ext]", }, }, }, }); plugins:ViteでloaderはbunlderなどのVite デフォルトではない機能を拡張するためのも の、今回はreactとsvgの画像を読み込むた めのsvgrだけを追加 rollupOptions: ビルドのバンドラーの設定 output: dir:出力先のディレクトリ entryFilenames:ビルドされた.jsファイル assetsFileNames:cssなどのアセットファイ ル https://ja.vitejs.dev/config/build-options.html
今回使ってみてよかったこと 👍 • 複雑な設定が必要ないのですぐにフロントエンド開発に入れた ◦ ビルドのディレクトリ設定とBlade側で読み込みさえできれば他に触 る部分はない • 起動やビルドなどが早いのであまり困ることがない •
チーム内でReactを触ったことがある人もいるのでフロントエンドのコード レビューなどの多少しやすくなった
課題点 📄 • 技術面 ◦ ビルドされたファイルを使う前提だと CSR(クライアントサイトレンダリングが )前提なので、小規模なアプ リケーションでも.jsのバンドルサイズがそれなりに大きくなった。 ▪
導入したライブラリの大きさなどは気をつけるべき ◦ CSS Modules周りなどがビルド前提だとうまく扱えない場合があった • 今回はViteの設定周りを変えることが svgのみでしか発生しなかったが、要件によっては設定を変 えることが多い場合もありそう。 ◦ 開発環境を整えれる余裕があるなら、ちゃんとした ViteのSPAやNext.jsなどでページ自体を 使えるようにしていくべき 👈 • ソフト面 ▪ 将来を見据えたコードルールやディレクトリ構造、設計などはチームで固めれないまま 動いてしまった ▪ APIのモックやテストの整備なども手を付けれず ... ▪ 知見を広めたいとは思ったけど、ほぼ一人で Reactのコードは書いてしまった
一緒にフロントエンド開発してくれる人を募集してます 🏗 https://sencorp.co.jp/recruit-career/