SvelteKit Remote Functions: Part 1
SvelteKit は、データの新しい扱い方をテストしています。それは Remote Functions と呼ばれます。この機能により、クライアントとサーバーが簡単に通信できるようになります。
Remote Functions とは何ですか?
Remote Functions を使用すると、SvelteKit アプリのどこからでもサーバー側のロジックを呼び出すことができます。クライアントから呼び出しますが、コードはサーバー上で実行されます。これにより、データベースやプライベートな環境変数に安全にアクセスできます。
有効にする方法
svelte.config.js ファイルで実験的モード(experimental mode)を有効にする必要があります。
const config = {
kit: {
experimental: {
remoteFunctions: true
}
},
compilerOptions: {
experimental: {
async: true
}
}
};
export default config;
クエリの利用
.remote.js または .remote.ts 拡張子のファイルを使用することで、リモート関数を作成できます。これには 4 つのタイプがあります。
- query(データの取得に使用)
- form
- command
- prerender
query 関数は HTTP GET リクエストのように動作します。Svelte コンポーネントにインポートして、await を使用してデータを取得できます。
リモートクエリの例:
import { query } from '$app/server';
import * as db from '$lib/server/database';
export const getPosts = query(async () => {
const posts = await db.sql`SELECT title, slug FROM post`;
return posts;
});
コンポーネント内では、次のように使用します:
{#each await getPosts() as { title, slug }}
<li>{title}</li>
{/each}
状態の管理
query 関数は、UI を管理するための 3 つの便利なプロパティを提供します。
- loading: データ取得中に true になります。
- error: リクエストが失敗した場合に true になります。
- current: 取得に成功したデータを保持します。
スマートな機能
バリデーション: Zod や Valibot などのライブラリを使用して、クエリに渡される引数を検証できます。これにより、サーバーの安全性を保つことができます。
データ処理: SvelteKit はデータの送信に
devalueを使用します。これにより、標準的な JSON では簡単に扱えないDateやMapなどの複雑な型をサポートしています。重複排除 (Deduplication): 同じ引数で同じクエリを複数回呼び出した場合、SvelteKit はそれを一度だけ実行します。これにより、データベースへの余計な負荷を防ぎます。
リフレッシュ: クエリに対して
.refresh()を呼び出すことで、サーバーから最新のデータを即座に取得できます。
注: これらの機能は実験的なものです。将来のアップデートで構文が変更される可能性があります。
出典: https://dev.to/nnutnonn/sveltekit-kaarthamngaankab-remote-function-part-1-4hg4
