Svelte (SvelteKit) 触ってみる
Svelte 触ってみるぞい!
動機
- HTMLのゲームを作ろうとしてる
- 手癖で書くならReactになるが、せっかくならこの機会に使ったことないのやってみよう
- Svelteの話をよく聞く割に、いまだに触ったことなかったからSvelteやってみっか
はじめる
SvelteKitって要るのか?要らないのか? と思ったが、公式ドキュメントでデフォでSvelteKitで始めるような書き方だったのでこれにならって入れる
バージョン
- create-svelte 6.0.9
- @sveltejs/kit 2.0.0
- svelte 4.2.7
すごい、
- TypeScript使うか
- ESLint入れるか
- Prettier入れるか
- Playwright入れるか
- Vitest入れるか
全部聞いてくれてまとめてやってくれる
楽~~~~!
導入時に SvelteKit demo app
を選ぶと、
- ド定番のカウンター
- シンプルなaboutページ
- 「Sverdle」とかいうWordleゲーム
を出してくれた
.svelte
ファイルのシンタックスハイライトは Svelte for VS Code
の拡張を入れないといけない
とりあえず入れといたらよさそう
Svlete, SvelteKitの文法
sverdleのコードを見つつ、SvleteKitの書き方を学んでいく
ルーティング
src/routes
がページに対応している。
http://localhost:5173/sverdle のページは、 src/routes/sverdle/+page.svelte
に対応している
+
つきのファイルはSvelteKitの特別なファイルって感じかな 👀
-
+page.svelte
: ページに対応するコンポーネント -
+page.ts
: +page.svelteと同時に実行される。ロード時に実行される処理やssrの設定など -
+page.server.ts
:+page.ts
をサーバーサイドでのみ実行 -
hoge.server.ts
: サーバーサイドだけで実行される
_
を付けたらルーティングから除外される、みたいなやつある?って思ったけどなかった。
けど、 +page
みたいなルーティング用のファイルを置かない限りはページは生成されないから、 +page
を置かなければいいだけの話だった
わりと Next.jsのApp Routerと近い使い心地だな
レイアウトグループの機能もあるらしいし
結構知らん書き方あるな~
Svlete Components
script
- マークアップ
style
VueとかAstroと同じような構成ね
script
-
<script lang="ts">
でTSがつかえる。 -
import { enhance } from '$app/forms';
- SvleteKitでデフォで用意されている機能が使える
- (
$app
で参照できるの、簡単だけどわかりにくいような…)
- (
- SvleteKitでデフォで用意されている機能が使える
-
export let
でpropsを定義できる -
let
で定義した変数に値を代入すると再レンダリングされる- useState使わなくてもstateみたいな感じか
-
$:
でリアクティブなステートメントを定義- useEffectみたいなものか
style
クラス名が自動付与されて、scopedなスタイルになる。
AstroとVueを通ってきたので、わりと近い概念が多くて雰囲気でいけそうだな
とりあえず作りつつで行けそうか
「作りたいものは作り始める前に今すぐにデプロイしよう」 という言葉があるので、まずデプロイできるところまで通してみるか
最終的にはサーバーサイドも動かしたいけど、GitHub Pagesで楽したいので一旦フロント完結で。
静的出力する。
このページ見ればOK
- adapter-staticを入れる
-
*.server.ts
があると当然静的に吐き出せないので、そういうページは削除する。- もしくは、
strict: false
にすればエラーにせず除外してくれる
- もしくは、
- 出力するすべてのページが prerender可能でないといけない。すべての
+page.ts
に書いてもいいし、面倒なら ルートの+layout.ts
に書けばOK -
+layout.ts
で trailingSlashを設定すると /about/index.htmlを吐き出してくれる-
https://kit.svelte.dev/docs/page-options#trailingslash
- (感想)こういう、決まった名前でexportするやつあんまり好きじゃないんだよな~…。型がつかないからタイポしてても気づけないし、変数命名って本来恣意性があるべきなんだけど見えないところでそれが奪われている感じ…
-
https://kit.svelte.dev/docs/page-options#trailingslash
よし、デプロイ成功 🎉
ただサブディレクトリなのがうまく設定できてないから画像とかリンクが404
GitHub Pages 向けにビルドするとき、あなたのリポジトリの名前が your-username.github.io と異なる場合は、config.kit.paths.base をあなたのリポジトリの名前に更新してください。
これをしないといけない
ビルド時にリンク切れしている(hrefの指定をミスっている)と警告出してくれるみたいなんだけど、
どのファイルを修正すればいいかがわかりにくい…
し、普通に誤検知してそう
SvelteKitError: Not found: /html-card-game/$./
いや、私がわるうございました
<a href="{base}/about">
って書くところを、テンプレートリテラルのノリで <a href="${base}/about">
って書いてた
なにも設定してなくても、layoutを元に404ページ出してくれる?っぽい