TRISHAFT

Viteを使ったSvelteのプロジェクト生成時のメモ

  #プログラム#Svelte

Viteを使ってSvelteでシンプルなアプリを作ってGitHub Pagesへデプロイする際、いくつかの手順が必要になるので、書き残しておく。

環境

やること

Viteを使って、Svelteのシンプルなアプリを作り、GitHub Pagesへデプロイする。

!

SvelteKitではなく、Svelte単体でアプリを作る。Svelteの公式ドキュメントに「Svelteでシンプルなアプリを構築したい場合はViteとSvelteを使える」という記載があるので、これに則る。

Viteによるプロジェクト作成とテスト実行

プロジェクトを作成したいフォルダでターミナルを開き、npm init vite を実行する。

できたプロジェクトをVSCodeで開き、npm i を実行して必要なパッケージのインストールを行う。

それからひとまずターミナルで npm run dev と実行すると、ローカルホストで超シンプルなカウンターが起動する。

!

npm i の実行を忘れていると、開発サーバで確認するために npm run dev と実行したとき、「‘vite’ is not recognized as an internal or external command, operable program or batch file.」というエラーが発生する。

プロジェクト作成後に表示されるメッセージに「ディレクトリに移動して npm install を実行してね」とコマンドが書いているので、あまり忘れることはないと思うけど。

ちなみに npm inpm install は同じ意味。

VSCodeでエラーが表示されたときの対応(1度だけ)

もしも、プロジェクト内の .svelte ファイルをVSCodeで開いたときに、こんなエラーが表示されたときの対処法。

Error [ERR_MODULE_NOT_FOUND]: Cannot find package '@sveltejs/vite-plugin-svelte' imported from <プロジェクトのディレクトリ>\svelte.config.js

これは以下の設定を行えば解消できる。

  1. VSCodeの「設定」を開く。(Ctrl + ,)
  2. 設定を「Svelte」で検索する。
  3. 「Svelte › Language-server: Runtime」に、node へのパスを入れる。(例えば C:\\Program Files\\nodejs\\node.exe
  4. 「ウィンドウの再読み込み」を行う。(F1を押して「Reload Window」を実行する)
!

この設定はVSCode自体に対するものなので、一度実施すれば他のプロジェクトを作成しても行う必要はない。

Vitestの有効化

Vitestを使って、スクリプト部分の単体テストを行うための手順。

npm i -D vitest によりVitestをインストールする。

package.jsonscriptsの部分に、"test": "vitest" を追記する。(前の行にカンマを追加するのを忘れないこと)

...(略)...
"scripts": {
  "dev": "vite",
  "build": "vite build",
  "preview": "vite preview",
  "check": "svelte-check --tsconfig ./tsconfig.json",
  "test": "vitest"
},
...(略)...

src ディレクトリ内に、適当なテスト用ファイルを作成する。

// test.test.ts

import { expect, test } from "vitest";

test("One plus Two", () => {
  expect(1 + 2).toBe(3);
});

npm run test によりテストを実行する。Vitestはファイルの変更をチェックし続けるので、コードを変更して保存すれば自動的にテストが走る。

GitHub Pagesへのデプロイ

リポジトリへプッシュしたときに、GitHub Actionsで自動ビルドされてgh-pagesブランチがGitHub Pagesとして公開されるよう設定する。

ファイルの作成・編集

.github/workflows/deploy.yaml として、以下のファイルを作成する。

name: deploy

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    concurrency:
      group: ${{ github.workflow }}-${{ github.ref }}
    steps:
      - uses: actions/checkout@v3

      - uses: actions/setup-node@v3
        with:
          node-version: "16"
          cache: npm

      - run: npm install
      - run: npm run build

      - uses: peaceiris/actions-gh-pages@v3
        if: ${{ github.ref == 'refs/heads/main' }}
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./dist

GitHub Pagesの相対パスに対応するよう、vite.config.ts を編集し、ビルド時の設定を変更する。具体的には以下のようにbaseを追加する。

// vite.config.ts
export default defineConfig({
  plugins: [svelte()],
  base: "./",
});

また、独自ドメインを使わず普通にGitHub Pagesにデプロイする場合、src/index.htmlのパス指定を、相対パスで読み込むよう書き換える。

<script type="module" src="/src/main.ts"></script>
    ↓
<script type="module" src="./src/main.ts"></script>

GitHub側の設定

リポジトリをWebブラウザで開き、Settings > Actions > General 内の Workflow permissionsRead and write permissions を選択する。

プッシュ

GitHubにリポジトリを作ってプッシュする。

  1. ローカルでgit init
  2. GitHubに空のリポジトリを作成
  3. ローカルでリモートとしてリポジトリを追加
  4. プッシュ

GitHub Pagesの公開設定

Settings > Pages > Branchgh-pages/(root) を選択して Save する。

!

gh-pagesは、ビルドとデプロイのActionsが成功してgh-pagesブランチができた後にしか選択できない。

公開の確認

これでGitHub Pagesに公開されているはず。URLはリポジトリの Actions タブの実行結果を見れば分かる。

!

もしプッシュ後にデプロイが失敗し、リポジトリの Actions タブの当該デプロイに Action failed with "The process '/usr/bin/git' failed with exit code 128" というエラーが表示されていた場合は、上記のワークフローのパーミッションを設定する必要がある。

リポジトリで、Settings > Actions > General 内の Workflow permissionsRead and write permissions を選択する。