theme | colorSchema | fonts | layout | image | ||||
---|---|---|---|---|---|---|---|---|
light-icons |
light |
|
image-right |
2021/10/30(Sat) 10:00〜 / 主催: @Meijin_garden
https://connpass.com/event/227990/
layout: image-right image: https://raw.githubusercontent.com/lightvue/slidev-theme-light-icons/master/static/light-icons-cover.svg
- 環境構築 - Viteの公式ガイドに則って、環境構築から一通りの機能を使うところまで進めます
- プラスアルファ - 終わったらStorybookを入れたり、プラグインを入れたり、Vercelにホスティングしたり各自興味のある活動をします
※なんとなくイベント立ち上げたらめっちゃ登録数があっておののいています
※なので、チャットや会話で盛り上げていただけると助かりますw
layout: image-right image: https://raw.githubusercontent.com/lightvue/slidev-theme-light-icons/master/static/light-icons-cover.svg
- 自己紹介
- 主催
- 話す枠の方々
- 画面共有して環境構築開始
- HMR, pre-bundle, plugin, CSS Modules, env variables and mode...など
- あくまで入門会なので、公式ドキュメントを順になぞります
- 感想など雑談
- この場で皆に質問したいことがあればチャット等で募集とか
- 時間に余裕があればプラスアルファなにかやる
- 解散
layout: image-right image: https://raw.githubusercontent.com/lightvue/slidev-theme-light-icons/master/static/light-icons-cover.svg
- 「名人」というニックネームで活動
- Twitter: @Meijin_garden
- Webエンジニア6年目
- 好きな分野はWebフロントエンド
- 好きなエディタのテーマはPanda
- 趣味は将棋(初段くらい)
- 株式会社NoSchool CTO
- オンライン家庭教師マナリンク -> https://manalink.jp
layout: image-right image: https://raw.githubusercontent.com/lightvue/slidev-theme-light-icons/master/static/light-icons-cover.svg
- お名前
- 好きな技術
- Viteとの関わり
layout: image-right image: https://raw.githubusercontent.com/lightvue/slidev-theme-light-icons/master/static/light-icons-illustration.svg
React & TypeScriptで書きたい場合
yarn create vite react-application --template react-ts
layout: image-right image: https://raw.githubusercontent.com/lightvue/slidev-theme-light-icons/master/static/light-icons-illustration.svg
- degitを使えばtemplateから簡単に開始できます。
npx degit TeXmeijin/vite-react-ts-tailwind-firebase-starter vite-hoge
- 以下は自作のテンプレです
layout: image-right image: https://raw.githubusercontent.com/lightvue/slidev-theme-light-icons/master/static/light-icons-illustration.svg
yarn
yarn dev
layout: image-right image: https://raw.githubusercontent.com/lightvue/slidev-theme-light-icons/master/static/light-icons-illustration.svg
layout: image-right image: https://raw.githubusercontent.com/lightvue/slidev-theme-light-icons/master/static/light-icons-illustration.svg
- https://vitejs.dev/guide/features.html#typescript
- Vite only performs transpilation on .ts files and does NOT perform type checking.
- tscはCIやIDEが別途実行してくれるよねっていう考え
npx esbuild src/App.tsx
- 爆速でJavaScriptへの変換が終わる
- むしろ型情報(+JSX)を落とすことだけをesbuildがやっている
layout: image-right image: https://raw.githubusercontent.com/lightvue/slidev-theme-light-icons/master/static/light-icons-illustration.svg
- SPAなのでHTMLはindex.htmlのみ
- 基本的にはドキュメントルートにindex.htmlがあります
<html>
のlang="ja"とかはここで変える
layout: image-right image: https://raw.githubusercontent.com/lightvue/slidev-theme-light-icons/master/static/light-icons-illustration.svg
- https://vitejs.dev/guide/features.html#npm-dependency-resolving-and-pre-bundling
- esbuildが依存をバンドルして
node_modules/.vite
以下に配置してくれる
Pre-bundling dependencies:
react
react-dom
react/jsx-dev-runtime
(this will be run only when your dependencies or config have changed)
layout: image-right image: https://raw.githubusercontent.com/lightvue/slidev-theme-light-icons/master/static/light-icons-illustration.svg
- 起動中にライブラリを追加し、新しいimportを追加すると再度Prebundleが走るっぽい
yarn add @chakra-ui/react @emotion/react @emotion/styled framer-motion
import { Button, ButtonGroup } from "@chakra-ui/react"
// 本当はProviderとか要るけど雑に追加
<Button>
hoge
</Button>
18:26:01 [vite] ✨ dependencies updated, reloading page...
layout: image-right image: https://raw.githubusercontent.com/lightvue/slidev-theme-light-icons/master/static/light-icons-illustration.svg
- TSXコンポーネントを作ったり、Hookを切ってimportすると、それらも別個のファイルでリクエストされる
- 手元の実運用中のViteアプリケーションでは1画面で300以上のリクエストが飛んでる
- 手元のNuxtアプリケーションでは170程度なので多いほうと思われる
- 依存しているファイル数だけリクエストが増えるので当然といえば当然
layout: image-right image: https://raw.githubusercontent.com/lightvue/slidev-theme-light-icons/master/static/light-icons-illustration.svg
- vite本体はシンプルな機能で、プラグインを足していく
Reactの場合のデフォルトは:
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [react()]
})
layout: image-right image: https://raw.githubusercontent.com/lightvue/slidev-theme-light-icons/master/static/light-icons-illustration.svg
たとえばSentryの場合
import viteSentry from 'vite-plugin-sentry';
export default defineConfig(({ mode }) => {
return {
plugins: [react(), viteSentry(getSentryConfig(mode))],
- mode(後述)を受け取れる関数として定義するとmodeごとに違うSentry設定を反映できる
layout: image-right image: https://raw.githubusercontent.com/lightvue/slidev-theme-light-icons/master/static/light-icons-illustration.svg
- 本番ビルドのVisualize方法気になりますよね?
- 設定は以下の記事がおすすめ(手前味噌
https://zenn.dev/meijin/articles/vite-bundle-analyzer
layout: image-right image: https://raw.githubusercontent.com/lightvue/slidev-theme-light-icons/master/static/light-icons-illustration.svg
- デフォルトでCSS Modulesに対応してます(すごい)
- https://vitejs.dev/guide/features.html#css-modules
.scss
ももちろん対応できます
yarn add -D sass
たとえば↓
import { ReactNode } from 'react';
import styles from './ErrorText.module.scss';
export const ErrorText = ({ children }: { children: ReactNode }) => <span className={styles.text}>{children}</span>;
layout: image-right image: https://raw.githubusercontent.com/lightvue/slidev-theme-light-icons/master/static/light-icons-illustration.svg
- みんな気になる環境変数
- https://vitejs.dev/guide/env-and-mode.html
VITE_FIREBASE_APIKEY=hogehogehogehogehogehoge
VITE_
から始まる変数だけクライアント側に放出される- 環境変数へのアクセスはデフォでは型安全でないが、
env.d.ts
といったファイルを定義してstringにしておくとよい
layout: image-right image: https://raw.githubusercontent.com/lightvue/slidev-theme-light-icons/master/static/light-icons-illustration.svg
vite build
でProduction Buildができるけど、検証環境と本番環境で環境変数などを切り分けたいケースはあるvite build --mode staging
といったmode
引数が指定できる。便利。CIもこれで組める.env.[mode]
のファイル名の環境変数を読み込んでくれるvite.config.ts
で指定するconfigを関数にできるのでその引数にmodeが含まれる
// https://vitejs.dev/config/
export default defineConfig(({ mode }) => {
return {
layout: image-right image: https://raw.githubusercontent.com/lightvue/slidev-theme-light-icons/master/static/light-icons-illustration.svg
- だいたいこれで実装するときに必要な知識は網羅できた...?
- 個人的に良いなと思っているところ
- とにかくHMRの反映が速い
- シンプルかつ拡張可能な仕組み
- 本番ビルドはrollupなので安定してる
自由時間に入る前に...
<style> body h1 { font-size: 2.5rem; margin-bottom: 16px; } body .text-center { text-align: left; } body .col-span-12 { margin: auto 48px; } </style>
オンライン家庭教師マナリンク(https://manalink.jp)は以下の課題を解決しています。
多くの家庭教師サービスは、先生ではなく「運営会社に資料請求」するので体験指導と本指導の先生が違うこともあるなど、先生にこだわりたいご家庭にとって不満が残ります。
マナリンクではすべての先生のプロフィールを作成し、YouTube上に自己紹介動画も公開しています。もちろん直接指名できます。
layout: image-right image: https://raw.githubusercontent.com/lightvue/slidev-theme-light-icons/master/static/light-icons-illustration.svg
詳しく訊きたいと思っていただいた方はMeetyでぜひご連絡を!
https://meety.net/matches?q=%23%E3%83%9E%E3%83%8A%E3%83%AA%E3%83%B3%E3%82%AF
採用技術はTypeScript(React, React Native, Vue, AWS CDK, Vite, Firebase), PHP(Laravel), AWSなどです。
layout: image-right image: https://raw.githubusercontent.com/lightvue/slidev-theme-light-icons/master/static/light-icons-illustration.svg
- Twitterフォローしてね
- @Meijin_garden
- ZennでViteの記事なども書いているので、本日の内容が勉強になったという方がいらっしゃったらサポートください💰
layout: image-right image: https://raw.githubusercontent.com/lightvue/slidev-theme-light-icons/master/static/light-icons-illustration.svg
デプロイ、Storybook、プラグイン探しなどなど