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

RemoteFunctionを使ったコロケーション

 RemoteFunctionを使ったコロケーション

Avatar for Matsumoto Kazutaka

Matsumoto Kazutaka

October 24, 2025
Tweet

More Decks by Matsumoto Kazutaka

Other Decks in Technology

Transcript

  1. 1 1 Copyright© Explaza, inc. All rights reserved. RemoteFunctionを使ったコロケーション 


    Svelte Japan Offline Meetup #5 
 
 株式会社エクスプラザ 
 松本 和高

  2. 2 Copyright© Explaza, inc. All rights reserved. 自己紹介
 松本和高(まつもとかずたか)
 


    Twitter: _mkazutaka
 Github: mkazutaka
 
 2018年株式会社メルカリに入社。バックエンドエンジニアとして、
 リアーキテクチャやマイクロサービスを使った開発などに携わる。
 その後、フリーランス等を経て、株式会社エクスプラザに入社。
 2024年8月CTOに就任、生成AI Partner、Markといった
 新規サービスの立ち上げ等を行っている。趣味、仮想通貨。 
 執筆・登壇
 ▪ PHPWebのTemplateEngineをWebAssemblyに置き換えてみる 
 ▪ 0からRust/Wasmを使ってブラウザで動くバーコードリーダを作ってみた話 
 ▪ GPT-4 Turboにドキュメントのチャンク分けを任せてみる 
 ▪ 問い合わせメールをChatGPTで解析してSpreadsheetとNotionに転記する方法の紹介 
 ▪ 人形町生成AI忘年会「 LLMと連携したブログ書くエディタを作ってみた 」
 ▪ LLM Application Meetup vol.4: 「 社内情報検索システムで用いられるRAGの4つの実装方法 」
 ▪ LLM Application Meetup vol.5: 「 GPTsより精度の高いRAGシステムの構築 」
 ▪ Software Design 2024年8月号: 第1特集「LangChainではじめるLLMアプリ開発入門 
 ▪ CTOがエンジニアにコーディング禁止というお触れを出した 

  3. 3 Copyright© Explaza, inc. All rights reserved. 目次
 • 会社紹介


    • Formの実装
 ◦ Superformsを使った実装 
 ◦ RemoteFunctionをつかった実装 
 • リモートファンクションをつかったフォームの実装例 
 • AIによる自動化

  4. 5 Copyright© EXPLAZA Inc. All rights reserved. 00 01 Company

    生成AIに関する 多種多様な問い合わせをいただいており、 お客様のニーズに合わせた 最適なソリューションを提案可能。 国内最大級AIメディアのAISmileyでも ”PRODUCT AWARD”を2冠受賞。 豊富な支援実績 一部取引先 生成AIをつかったプロダクトを作っております
  5. 7 Copyright© Explaza, inc. All rights reserved. Form実装の悩み 
 •

    APIでリクエストするよりかは、formタグを使いたい 
 • Superformsを使っているがコードが複雑になる 
 ◦ 特に一つのページに複数のフォームがあるときにコード量が多くなる 
 ◦ てなるとフォーム部分をコンポーネント化したいが... 
 ▪ UI側はコンポーネント化できるがサーバ側の処理は、+page.server.ts にあり 
 見通しが悪い

  6. 9 Copyright© Explaza, inc. All rights reserved. Remote Functionとは 


    • 2025年08月に発表
 • あらゆるコンポーネントからサーバサイド上の関数を呼ぶことができる 
 ◦ 今まで: +page.svelteでデータを取得、コンポーネントにバケツリレー 
 ◦ Remote Functionによって コンポーネント単位で必要な情報をサーバサイドから取得可能 
 ▪ これはコロケーション だ!!

  7. 10 Copyright© Explaza, inc. All rights reserved. コロケーション(co-location) 
 •

    コロケーション: co-location 
 ◦ 広義な意味だと
 ▪ 関連するリソース同士を近くに置く、という考え方 
 ▪ 例えば、テストファイルとテスト対象ファイルは同じディレクトリに 
 置きましょうみたいな形 
 • React + GraphQLには、Fragment Colocationという考え方もある 
 ◦ => 次ページで紹介

  8. 11 Copyright© Explaza, inc. All rights reserved. Fragment Colocation 


    • GraphQL
 ◦ クライアントが「必要なデータだけ」をクエリとしてリクエストし、それらのみを取得できる 
 • GraphQLのFragment 
 ◦ クエリの一部を再利用可能にしたもの 
 ◦ 様々なクエリからFragmentを利用することができる 
 • Fragment Colocation: React Relayなら 
 ◦ GraphQLのFragment機能をつかってつかってコンポーネント単位で 
 要求する情報を制御できる 

  9. 12 Copyright© Explaza, inc. All rights reserved. Fragment Colocationの実装例 1/2

    
 • 子コンポーネントの実装 
 • 子コンポーネントファイル内で 
 Fragmentとコンポーネントを定義 
 参考: https://zenn.dev/gemcook/articles/2c8796761f2d02 Friend.tsx
  10. 13 Copyright© Explaza, inc. All rights reserved. Fragment Colocationの実装例 2/2

    
 • 親コンポーネントで子コンポーネントの Fragmentを使う
 • 親コンポーネントは子コンポーネントが 
 何を必要としているかは知らなくて良い 
 ◦ 理想的だ 
 参考: https://zenn.dev/gemcook/articles/2c8796761f2d02 SomePage.tsx
  11. 17 Copyright© Explaza, inc. All rights reserved. Superformsを使った実装例 / Dialogコンポーネントの定義

    
 • shadcn-svelteのDialogコンポーネントを使っている 
 DialogExampleBySuperform.svelteのScript部 DialogExampleBySuperform.svelteのBody部
  12. 18 Copyright© Explaza, inc. All rights reserved. Superformsを使った実装例 / 親コンポーネント

    
 • +page.server.tsからform値を渡す 
 ◦ 処理の流れ
 +page.server.ts => +page.svelte => DialogExampleBySuperform.svelte => +page.server.ts 
 +page.svelte +page.server.ts
  13. 19 Copyright© Explaza, inc. All rights reserved. Superformsを使った実装の問題点 
 •

    +page.svelteからform valueを引き回さないといけない 
 • +page.svelteに紐づくフォームが複数になった場合に処理が複雑になる 
 ◦ フォームごとの命名 / 引き回す処理 
 ◦ フォームが増えるたびに、+page.svelteのactionの項目が増える 
 ▪ +page.svelteのactionとform コンポーネントが暗黙的に紐づく 
 参照: https://claude.com/pricing#api
  14. 21 Copyright© Explaza, inc. All rights reserved. Remote Functionを使った実装 


    • shadcn-svelteのDialogコンポーネントを使っている 
 DialogExampleByRemotefunction.svelteのScript部 DialogExampleByRemotefunction.svelteのBody部
  15. 22 Copyright© Explaza, inc. All rights reserved. Remote Functionを使った実装 


    DialogExampleByRemotefunction.remote.ts • form関数をつかって関数をエクスポート 
 ◦ 処理の流れ: Component.svelte => Component.remote.ts 

  16. 23 Copyright© Explaza, inc. All rights reserved. RemoteFunctionを使った実装 
 •

    Formの変更に+page.svelteが絡まない 
 ◦ form valueを引き回さなくて良い 
 • フォームが複数になってもコンポーネント単位で境界づけられている 
 
 参照: https://claude.com/pricing#api
  17. 25 Copyright© Explaza, inc. All rights reserved. 表にまとめる 
 参照:

    https://claude.com/pricing#api Superformsによる実装 RemoteFunctionによる実装 +page.svelteの変更 必要 不要 +page.server.tsの変更 必要 不要 +xxx.remote.tsの実装 不要 必要
  18. 27 Copyright© Explaza, inc. All rights reserved. ClaudeCodeのAgent Skills(Claude Skills)でスキル化する

    
 • Agent Skills
 ◦ ClaudeもしくはClaude Codeの機能を拡張する機能の一つ 
 ▪ Claudeが参照するディレクトリの中に SKILL.mdを置き、それを起点に 
 スクリプトや複数のマークダウンを一つのディレクトリに格納する 
 ▪ それぞれもまとめりをモジュールとして扱えることができ、配布や利用ができる 
 • Agent Skillsには、Agent Skillsを作るためのAgent Skillがある 
 ◦ skill creator: https://github.com/anthropics/skills/tree/main/skill-creator 
 参照: https://claude.com/pricing#api
  19. 28 Copyright© Explaza, inc. All rights reserved. skill-creatorを使ってスキルを作成する 
 •

    プロンプトはシンプル 
 ◦ いくつかの選択項目をセレクトするとスキルを作成してくれる 
 参照: https://claude.com/pricing#api
  20. 33 Copyright© Explaza, inc. All rights reserved. まとめ
 • Dialogの実装をRemoteFunctionでコロケーション化したよ

    
 ◦ コード量が少なくなったよ 
 ◦ コンポーネントと関係ないところの編集が減ったよ 
 • Claudeのskill-creatorでスキル化したよ 
 ◦ コロケーションによって変更範囲が特定のディレクトリに収まるので 
 AIでも書きやすい
 参照: https://claude.com/pricing#api
  21. 35 Copyright© Explaza, inc. All rights reserved. 宣伝: エクスプラザでは絶賛採用中です! •

    AIつかったプロダクト開発をしています 
 ◦ 自社SaaS / クライアントワーク 
 ◦ クライアントワークは自由に技術選定して開発できる自由度の高いもの 
 ◦ 気になった方は、ぜひカジュアル面談 / このあとの懇親会でぜひお声がけください! 
 ▪ ホームページもSveltekitつかっているよ: explaza.jp