26
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

爆速SvelteKit + tailwindcss-jit の学習環境を作って Vercel にデプロイする

Last updated at Posted at 2021-04-02

image.png

「ビルドが早くて開発体験が良い」

大まかな流れ

  1. Svelte + tailwindcss のプロジェクトを作る
  2. GitHub にプロジェクトを追加(割愛)
  3. Vercel にデプロイ

おまけ
Vite (ヴィート)はなぜ早い?

追記

  • @tailwindcss/jitは`tainwindcss本体にv2.1から取り込まれました(2021/4/6)

1. Svelte + tailwindcss のプロジェクトを作る

SvelteKitアプリケーションを作る

mkdir sveltekit-ts-tailwindcss
cd sveltekit-ts-tailwindcss
npm init svelte@next

下記の設定を対話モードで設定していきます。

  • TypeScriptを使うか
  • スタイルの当て方(CSS / Less / SCSS)
  • ESLintを使うか
  • Prettierを使うか

今回はTypeScript使う、CSS、ESLint使う、Prettier使うを選択します。

image.png

そうすると、プロジェクトがスキャフォールドされるので、起動してみます。

yarn install
yarn dev --open

2秒で起動しますっ:rocket:
(timeコマンドを先頭につけると計測できます)

time yarn dev --open
real	0m1.983s
user	0m0.168s
sys	0m0.046s

image.png

ctl + C でいったん停止します。

@tailwindcss/jitをインストールする

npx svelte-add@latest tailwindcss
yarn install

2021/10/13更新: jittailwindcssのデフォルト設定になったので、--jitは不要になりました。 @tamanugiさんありがとうございます!

yarn dev --open

3秒で起動しますっ:flushed:
(初回ビルドとは思えない早さ!!)

time yarn dev --open
real	0m2.918s
user	0m0.179s
sys	0m0.049s

tailwindcssが有効かコードを少し変更してみます。

src/routes/index.svelte
- <main>
+ <main class="bg-black">
    <h1>Hello world!</h1>
+   <p class="text-xl text-white">「tailwindは有効です」</p>

image.png
変わった!

2. GitHub にプロジェクトを追加(割愛)

こちらをご覧ください :bow:

Gitでのユーザー名やメールアドレスを変更したい場合はこちらをご確認ください :bow:

3. Vercel にデプロイする

SvelteKitには、ビルドされたアプリを受け取り、指定したプラットフォームごとに最適化された出力をするアダプターが用意されています。
20201/04/04時点で、SvelteKitドキュメントから確認できるのは以下の通りです。

Vercelアダプターを設定

Vercel用のアダプターをインストールしましょう。現時点では、バージョン指定で@nextをつけないとbuildでエラーになるのでお忘れなく。不要なnode用アダプターはアンインストールします。

yarn add -D @sveltejs/adapter-vercel@next
yarn remove @sveltejs/adapter-node
package.json
	"devDependencies": {
-		"@sveltejs/adapter-node": "next",
+		"@sveltejs/adapter-vercel": "^1.0.0-next.10",

続いて、ビルド時にVercelアダプターを使うように設定します。

svelte.config.js
- const node = require('@sveltejs/adapter-node');
+ const vercel = require('@sveltejs/adapter-vercel');

module.exports = {
	kit: {
		...
-		adapter: node()
+		adapter: vercel()
	}
};

では、さっそくビルドしてみましょう!ビルドコマンドを実行します。

yarn build

すると、.vercel_build_output が出力されました。
これはソース管理する必要がないので .gitignore に追加しましょう。

.gitignore
...
.vercel_build_output

さて、うまくビルドできたところで、いったんGitHubに最新ソースをコミットしておきます。

git add .
git commit -m "add adapter-vercel"
git push

Vercelにプロジェクトを作成

GitHubのリポジトリを公開してみましょう :earth_asia:

VercelにログインしたらNew ProjectからGitHubリポジトリをImportします。

Vercelからリポジトリへのアクセスを許可する

(既に設定済みの方はスキップしてください。)
初回の場合、まずはVercelからリポジトリへのアクセスを許可する必要があります。
image.png

GitHubのダイアログが表示されたら、リポジトリを選択して保存します。
image.png

先程のVercelの選択画面に許可したリポジトリが表示されるので、Importボタンをクリックしてください。
image.png

個人アカウントなので PERSONAL ACCOUNT を選択します。
image.png

TOP階層を選択します。
image.png

OUTPUT DIRECTORY に.svelteを入力してDeployボタンをクリックしてください。
約38秒後、世界が震撼します :volcano:
image.png

デプロイが成功したらアクセスしてみてください。
おめでとうございます!!
image.png

ここまでできた方は以下やってみてください

(実は、これは社内勉強会の資料なのです...:bow:

  • ページの追加
    • SvelteKit#Routingを参考にして
    • src/routes/about.svelteファイルを追加してlocalhost:3000/aboutにアクセスしてみる
  • tailwindをサンプルから使ってみる
    • tailwindcomponentsにアクセスする
    • サイト内でCardとかで検索し、気に入ったコンポーネントを選択
    • コンポーネント詳細画面でShow Codeをクリックし、コードを表示してabout.svelteファイルに貼り付ける
  • tailwindを試してみる

Appendix

Vite (ヴィート)はなぜ早い?

SvelteKitのビルドが早い理由として、ノーバンドラーツールであるViteを採用していることが挙げられます。
ViteはGO製のesbuildで依存関係を事前解決するため非常に高速です。

  • three.jsのビルド時間は他のビルドツールより10-100倍高速です。
    image.png
    引用元『esbuild

  • ファイル変更すると関連するモジュールのみ置き換えます。ViteはネイティブESMを介して実行するため、他のバンドラーのHMR機能より高速です。(キャッシュも強力らしいので、時々変更した内容が反映されないのはこのためか!?)
    image.png

参考サイト

https://kit.svelte.dev/docs
https://github.com/svelte-add/tailwindcss

26
15
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?