Open20

Svelte (SvelteKit) 触ってみる

かがんかがん

Svelte 触ってみるぞい!

動機

  • HTMLのゲームを作ろうとしてる
    • 手癖で書くならReactになるが、せっかくならこの機会に使ったことないのやってみよう
    • Svelteの話をよく聞く割に、いまだに触ったことなかったからSvelteやってみっか
かがんかがん

はじめる

SvelteKitって要るのか?要らないのか? と思ったが、公式ドキュメントでデフォでSvelteKitで始めるような書き方だったのでこれにならって入れる
https://svelte.jp/docs/introduction

バージョン

  • 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の書き方を学んでいく

かがんかがん

結構知らん書き方あるな~

Svlete Components

https://svelte.jp/docs/svelte-components

  • script
  • マークアップ
  • style

VueとかAstroと同じような構成ね

script

  • <script lang="ts"> でTSがつかえる。
  • import { enhance } from '$app/forms';
    • SvleteKitでデフォで用意されている機能が使える
      • $app で参照できるの、簡単だけどわかりにくいような…)
  • export let でpropsを定義できる
  • let で定義した変数に値を代入すると再レンダリングされる
    • useState使わなくてもstateみたいな感じか
  • $: でリアクティブなステートメントを定義
    • useEffectみたいなものか

style

クラス名が自動付与されて、scopedなスタイルになる。

かがんかがん

AstroとVueを通ってきたので、わりと近い概念が多くて雰囲気でいけそうだな
とりあえず作りつつで行けそうか

かがんかがん

「作りたいものは作り始める前に今すぐにデプロイしよう」 という言葉があるので、まずデプロイできるところまで通してみるか

最終的にはサーバーサイドも動かしたいけど、GitHub Pagesで楽したいので一旦フロント完結で。

かがんかがん

静的出力する。
このページ見ればOK
https://kit.svelte.dev/docs/adapter-static

  • 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.jp/docs/adapter-static

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ページ出してくれる?っぽい