Upgrade to Pro — share decks privately, control downloads, hide ads and more …

「+page.server.tsって結局なにを置けばいいんだ……?」

Avatar for Hitoshiro Hitoshiro
October 24, 2025
38

 「+page.server.tsって結局なにを置けばいいんだ……?」

Svelte Japan Offline Meetup #5

Avatar for Hitoshiro

Hitoshiro

October 24, 2025
Tweet

Transcript

  1. Routing(ルーティング) • +page.svelte : アプリのページ定義だね • +page.ts : クライアント側でAPIとかあらかじめ叩くときに使うんだろうね •

    +error.svelte : エラーページ定義 • +layout(以下略) : 特定のパス以下に共通の定義したいときに使うんだね • +server.ts : エンドポイントが作れるんだね
  2. 巨大+page.server.ts問題 export const actions: Actions = { login: async({ request

    }) => { // たくさんの処理... } logout: async({ request }) => { // たくさんの処理... } follow: async({ request }) => { // たくさんの処理... } }
  3. 巨大+page.server.ts問題 export const actions: Actions = { login: async({ request

    }) => { // たくさんの処理... } logout: async({ request }) => { // たくさんの処理... } follow: async({ request }) => { // たくさんの処理... } } ファイルを分けたい (安直な発想)
  4. 名前つきActionってページと異なるパスに置けないかな? <form method="POST" action="/api/login?/login" > <label> Email <input name="email" type="email">

    </label> <label> Password <input name="password" type="password"> </label> <button>Log in</button> </form> 📁api └ 📄+page.server.ts 📁login └ 📄+page.svelte /loginからSubmitして処理したあと、 /api/login/+page.svelteを探す → 404 Not Found
  5. 名前つきActionってページと異なるパスに置けないかな? 📁api └ 📄+page.server.ts export const actions: Actions = {

    login : async () => {       // 処理してから       // リダイレクトしちゃおう redirect(303, '/login'); } } こうすれば/loginに戻ってはこれるが、 SvelteKitの良いやり方ではない
  6. ワークフローの境界に責務がありそう リ ク エ ス ト D T O コ

    マ ン ド ス テ ッ プ イ ベ ン ト D T O レ ス ポ ン ス
  7. ワークフローの境界に責務がありそう リ ク エ ス ト D T O コ

    マ ン ド ス テ ッ プ イ ベ ン ト D T O レ ス ポ ン ス
  8. Remote Functionsの検証に何を期待しようか? • Remote Functionsの検証にガッツリ期待して、スキーマに必要な検証をぜんぶ書 いておく ◦ Remote Functionsの検証を全面的に信頼 ◦

    小規模なアプリケーションなら正直これで全然よさそう • ドメインとしてはあくまで未検証として扱う ◦ 「これは何者なのか?」の見通しは良くなる ◦ ちゃんとDDDするならこれかな?