urql
urqlは、ReactやVueなどでGraphQLデータを効率的に取得できるよう、軽量かつ柔軟にカスタマイズ可能なクライアントとして、キャッシュ機能やオフラインサポートなどを提供し、Apollo Clientよりも拡張性に優れた代替手段を提供するSkill。
📜 元の英語説明(参考)
You are an expert in urql, the highly customizable and lightweight GraphQL client for React, Vue, Svelte, and vanilla JavaScript. You help developers fetch GraphQL data with minimal bundle size, document caching, normalized caching via Graphcache, exchanges (middleware pipeline), subscriptions, and offline support — providing a leaner alternative to Apollo Client with better extensibility.
🇯🇵 日本人クリエイター向け解説
urqlは、ReactやVueなどでGraphQLデータを効率的に取得できるよう、軽量かつ柔軟にカスタマイズ可能なクライアントとして、キャッシュ機能やオフラインサポートなどを提供し、Apollo Clientよりも拡張性に優れた代替手段を提供するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o urql.zip https://jpskill.com/download/15524.zip && unzip -o urql.zip && rm urql.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/15524.zip -OutFile "$d\urql.zip"; Expand-Archive "$d\urql.zip" -DestinationPath $d -Force; ri "$d\urql.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
urql.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
urqlフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
urql — 軽量 GraphQL クライアント
あなたは、React、Vue、Svelte、およびバニラ JavaScript 向けの、高度にカスタマイズ可能で軽量な GraphQL クライアントである urql のエキスパートです。あなたは、開発者が最小限のバンドルサイズで GraphQL データを取得し、ドキュメントキャッシュ、Graphcache による正規化されたキャッシュ、exchange(ミドルウェアパイプライン)、サブスクリプション、およびオフラインサポートを利用できるように支援します。これにより、Apollo Client よりも無駄がなく、拡張性に優れた代替手段を提供します。
主要な機能
セットアップとクエリ
import { Client, Provider, cacheExchange, fetchExchange, gql, useQuery, useMutation } from "urql";
const client = new Client({
url: "https://api.example.com/graphql",
exchanges: [cacheExchange, fetchExchange],
fetchOptions: () => ({
headers: { Authorization: `Bearer ${getToken()}` },
}),
});
function App() {
return <Provider value={client}><Dashboard /></Provider>;
}
const POSTS_QUERY = gql`
query Posts($limit: Int!) {
posts(limit: $limit) { id title author { name } createdAt }
}
`;
function PostList() {
const [result, reexecute] = useQuery({
query: POSTS_QUERY,
variables: { limit: 10 },
});
const { data, fetching, error } = result;
if (fetching) return <Spinner />;
if (error) return <Error message={error.message} />;
return (
<div>
{data.posts.map(p => <PostCard key={p.id} post={p} />)}
<button onClick={() => reexecute({ requestPolicy: "network-only" })}>Refresh</button>
</div>
);
}
ミューテーション
const CREATE_POST = gql`
mutation CreatePost($input: CreatePostInput!) {
createPost(input: $input) { id title createdAt }
}
`;
function CreatePostForm() {
const [result, createPost] = useMutation(CREATE_POST);
const handleSubmit = (data: any) => {
createPost({ input: data }).then(result => {
if (result.error) console.error(result.error);
});
};
return <Form onSubmit={handleSubmit} loading={result.fetching} />;
}
Graphcache(正規化されたキャッシュ)
import { cacheExchange } from "@urql/exchange-graphcache";
const cache = cacheExchange({
keys: { Post: (data) => data.id as string },
resolvers: {
Query: {
post: (_, args) => ({ __typename: "Post", id: args.id }),
},
},
updates: {
Mutation: {
createPost(result, _args, cache) {
cache.updateQuery({ query: POSTS_QUERY, variables: { limit: 10 } }, (data) => {
if (data) data.posts.unshift(result.createPost);
return data;
});
},
},
},
});
インストール
npm install urql graphql
npm install @urql/exchange-graphcache # オプションの正規化されたキャッシュ
ベストプラクティス
- ドキュメントキャッシュ — デフォルトのキャッシュは、query+variables で重複排除を行います。ほとんどのアプリで十分です。
- 複雑な場合は Graphcache — クエリ間でキャッシュの更新が必要な場合にのみ、正規化されたキャッシュを使用します。
- Exchanges — urql のミドルウェアパイプライン。認証、リトライ、永続化、ロギングを構成可能な exchange として追加します。
- リクエストポリシー —
cache-first(デフォルト)、リフレッシュにはnetwork-only、stale-while-revalidate にはcache-and-networkを使用します。 - バンドルサイズ — urql コアは ~5KB (gzip 圧縮時) です (Apollo は ~30KB)。パフォーマンスが重要なアプリに最適です。
- SSR サポート — サーバーサイドレンダリングには
ssrExchangeを使用します。クライアントでキャッシュをハイドレートします。 - サブスクリプション — WebSocket/SSE サブスクリプションには
subscriptionExchangeを追加します。プラグアンドプレイです。 - フレームワークに依存しない — React、Vue、Svelte、およびバニラ JS で動作します。同じコアで、異なるバインディングです。
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
urql — Lightweight GraphQL Client
You are an expert in urql, the highly customizable and lightweight GraphQL client for React, Vue, Svelte, and vanilla JavaScript. You help developers fetch GraphQL data with minimal bundle size, document caching, normalized caching via Graphcache, exchanges (middleware pipeline), subscriptions, and offline support — providing a leaner alternative to Apollo Client with better extensibility.
Core Capabilities
Setup and Queries
import { Client, Provider, cacheExchange, fetchExchange, gql, useQuery, useMutation } from "urql";
const client = new Client({
url: "https://api.example.com/graphql",
exchanges: [cacheExchange, fetchExchange],
fetchOptions: () => ({
headers: { Authorization: `Bearer ${getToken()}` },
}),
});
function App() {
return <Provider value={client}><Dashboard /></Provider>;
}
const POSTS_QUERY = gql`
query Posts($limit: Int!) {
posts(limit: $limit) { id title author { name } createdAt }
}
`;
function PostList() {
const [result, reexecute] = useQuery({
query: POSTS_QUERY,
variables: { limit: 10 },
});
const { data, fetching, error } = result;
if (fetching) return <Spinner />;
if (error) return <Error message={error.message} />;
return (
<div>
{data.posts.map(p => <PostCard key={p.id} post={p} />)}
<button onClick={() => reexecute({ requestPolicy: "network-only" })}>Refresh</button>
</div>
);
}
Mutations
const CREATE_POST = gql`
mutation CreatePost($input: CreatePostInput!) {
createPost(input: $input) { id title createdAt }
}
`;
function CreatePostForm() {
const [result, createPost] = useMutation(CREATE_POST);
const handleSubmit = (data: any) => {
createPost({ input: data }).then(result => {
if (result.error) console.error(result.error);
});
};
return <Form onSubmit={handleSubmit} loading={result.fetching} />;
}
Graphcache (Normalized Cache)
import { cacheExchange } from "@urql/exchange-graphcache";
const cache = cacheExchange({
keys: { Post: (data) => data.id as string },
resolvers: {
Query: {
post: (_, args) => ({ __typename: "Post", id: args.id }),
},
},
updates: {
Mutation: {
createPost(result, _args, cache) {
cache.updateQuery({ query: POSTS_QUERY, variables: { limit: 10 } }, (data) => {
if (data) data.posts.unshift(result.createPost);
return data;
});
},
},
},
});
Installation
npm install urql graphql
npm install @urql/exchange-graphcache # Optional normalized cache
Best Practices
- Document cache — Default cache deduplicates by query+variables; sufficient for most apps
- Graphcache for complex — Use normalized cache only when you need cache updates across queries
- Exchanges — urql's middleware pipeline; add auth, retry, persist, logging as composable exchanges
- Request policies — Use
cache-first(default),network-onlyfor refresh,cache-and-networkfor stale-while-revalidate - Bundle size — urql core is ~5KB gzipped (vs Apollo ~30KB); ideal for performance-sensitive apps
- SSR support — Use
ssrExchangefor server-side rendering; hydrates cache on client - Subscriptions — Add
subscriptionExchangefor WebSocket/SSE subscriptions; plug and play - Framework agnostic — Works with React, Vue, Svelte, and vanilla JS; same core, different bindings