Reactã¢ããªã±ãŒã·ã§ã³ã§ãã£ãã·ã¥é¢æ°ã䜿çšããã¹ããŒããªãã£ãã·ã¥ç¡å¹åæŠç¥ãå®è£ ããããã®å æ¬çã¬ã€ããå¹ççãªããŒã¿ç®¡çãšããã©ãŒãã³ã¹åäžã«çŠç¹ãåœãŠãŠããŸãã
Reactã®ãã£ãã·ã¥é¢æ°ç¡å¹åæŠç¥ïŒã¹ããŒããªãã£ãã·ã¥æå¹æé
çŸä»£ã®Webéçºã«ãããŠãå¹ççãªããŒã¿ç®¡çã¯ãå¿çæ§ãé«ãããã©ãŒãã³ã¹ã®è¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããããã«äžå¯æ¬ ã§ããReactã¢ããªã±ãŒã·ã§ã³ã¯ãåé·ãªããŒã¿ãã§ãããé¿ãããããã¯ãŒã¯è² è·ã軜æžããäœæããã©ãŒãã³ã¹ãåäžãããããã«ããã°ãã°ãã£ãã·ã¥ã¡ã«ããºã ã«äŸåããŸããããããäžé©åã«ç®¡çããããã£ãã·ã¥ã¯å€ãããŒã¿ã«ã€ãªãããäžæŽåãçã¿åºãããŠãŒã¶ãŒãèç«ãããå¯èœæ§ããããŸãããã®èšäºã§ã¯ãReactã®ãã£ãã·ã¥é¢æ°ã«å¯ŸããããŸããŸãªã¹ããŒããªãã£ãã·ã¥ç¡å¹åæŠç¥ãæ¢ããäžèŠãªåãã§ãããæå°éã«æããªããããŒã¿ã®é®®åºŠã確ä¿ããããã®å¹æçãªæ¹æ³ã«çŠç¹ãåœãŠãŸãã
Reactã«ããããã£ãã·ã¥é¢æ°ãçè§£ãã
Reactã®ãã£ãã·ã¥é¢æ°ã¯ãã³ã³ããŒãã³ããšããŒã¿ãœãŒã¹ïŒäŸïŒAPIïŒãšã®éã®äžéçãªåœ¹å²ãæãããŸããããŒã¿ããã§ãããããã£ãã·ã¥ã«ä¿åããå©çšå¯èœãªå Žåã¯ãã£ãã·ã¥ãããããŒã¿ãè¿ãããšã§ãç¹°ãè¿ãã®ãããã¯ãŒã¯ãªã¯ãšã¹ããåé¿ããŸããreact-query
ãSWR
ïŒStale-While-RevalidateïŒã®ãããªã©ã€ãã©ãªã¯ãå
ç¢ãªãã£ãã·ã¥æ©èœãæšæºã§æäŸãããã£ãã·ã¥æŠç¥ã®å®è£
ãç°¡çŽ åããŸãã
ãããã®ã©ã€ãã©ãªã®æ žãšãªãèãæ¹ã¯ãããŒã¿ãã§ããããã£ãã·ã³ã°ãããã³ç¡å¹åã®è€éãã管çããéçºè ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã®æ§ç¯ã«éäžã§ããããã«ããããšã§ãã
react-query
ã䜿çšããäŸïŒ
react-query
ã¯ãããŒã¿ãèªåçã«ãã£ãã·ã¥ããã³æŽæ°ããuseQuery
ããã¯ãæäŸããŸããåºæ¬çãªäŸã以äžã«ç€ºããŸãïŒ
import { useQuery } from 'react-query';
const fetchUserProfile = async (userId) => {
const response = await fetch(`/api/users/${userId}`);
if (!response.ok) {
throw new Error('Network response was not ok');
}
return response.json();
};
function UserProfile({ userId }) {
const { data, isLoading, error } = useQuery(['user', userId], () => fetchUserProfile(userId));
if (isLoading) return <p>Loading...</p>;
if (error) return <p>Error: {error.message}</p>;
return (
<div>
<h2>{data.name}</h2>
<p>Email: {data.email}</p>
</div>
);
}
SWR
ã䜿çšããäŸïŒ
SWR
ïŒStale-While-RevalidateïŒã¯ãããŒã¿ãã§ããã®ããã®ããäžã€ã®äººæ°ã®ããã©ã€ãã©ãªã§ããããã¯ããã£ãã·ã¥ãããããŒã¿ãå³åº§ã«è¡šç€ºãã€ã€ãããã¯ã°ã©ãŠã³ãã§åæ€èšŒããããšãåªå
ããŸãã
import useSWR from 'swr';
const fetcher = (url) => fetch(url).then((res) => res.json());
function UserProfile({ userId }) {
const { data, error } = useSWR(`/api/users/${userId}`, fetcher);
if (error) return <div>failed to load</div>
if (!data) return <div>loading...</div>
return (
<div>
<h2>{data.name}</h2>
<p>Email: {data.email}</p>
</div>
);
}
ãã£ãã·ã¥ç¡å¹åã®éèŠæ§
ãã£ãã·ã³ã°ã¯æçã§ãããåºç€ãšãªãããŒã¿ã倿Žãããéã«ã¯ãã£ãã·ã¥ãç¡å¹åããããšãäžå¯æ¬ ã§ãããããæ ããšããŠãŒã¶ãŒãå€ãæ å ±ãèŠãŠããŸããæ··ä¹±ãæããããžãã¹äžã®æææ±ºå®ã«åœ±é¿ãäžããå¯èœæ§ããããŸãã广çãªãã£ãã·ã¥ç¡å¹åã¯ãããŒã¿ã®äžè²«æ§ãšä¿¡é Œæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãä¿èšŒããŸãã
ååäŸ¡æ Œã衚瀺ããeã³ããŒã¹ã¢ããªã±ãŒã·ã§ã³ãèããŠã¿ãŸããããããŒã¿ããŒã¹ã§ååã®äŸ¡æ Œã倿Žãããå ŽåããŠã§ããµã€ãäžã®ãã£ãã·ã¥ãããäŸ¡æ Œã¯éããã«æŽæ°ãããªããã°ãªããŸããããã£ãã·ã¥ãç¡å¹åãããªããšããŠãŒã¶ãŒã¯å€ãäŸ¡æ ŒãèŠãŠããŸããè³Œå ¥ãšã©ãŒã顧客ã®äžæºã«ã€ãªããå¯èœæ§ããããŸãã
ã¹ããŒããªãã£ãã·ã¥ç¡å¹åæŠç¥
ã¹ããŒããªãã£ãã·ã¥ç¡å¹åã«ã¯ããã€ãã®æŠç¥ããããããããã«å©ç¹ãšãã¬ãŒããªãããããŸããæé©ãªã¢ãããŒãã¯ãããŒã¿ã®æŽæ°é »åºŠãäžè²«æ§ã®èŠä»¶ãããã©ãŒãã³ã¹ã®èæ ®äºé ãªã©ãã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®èŠä»¶ã«ãã£ãŠç°ãªããŸãã
1. æéããŒã¹ã®æå¹æéïŒTTL - Time To LiveïŒ
TTLã¯ãã·ã³ãã«ã§åºã䜿ãããŠãããã£ãã·ã¥ç¡å¹åæŠç¥ã§ãããã£ãã·ã¥ãšã³ããªãæå¹ã§ããæéãåºå®ã§èšå®ããŸããTTLãåãããšããã£ãã·ã¥ãšã³ããªã¯å€ããšèŠãªãããæ¬¡ã®ãªã¯ãšã¹ãã§èªåçã«æŽæ°ãããŸãã
å©ç¹ïŒ
- å®è£ ãç°¡åã
- é »ç¹ã«ã¯å€æŽãããªãããŒã¿ã«é©ããŠããã
æ¬ ç¹ïŒ
- TTLãé·ããããšå€ãããŒã¿ã«ã€ãªããå¯èœæ§ãããã
- TTLãçããããšäžèŠãªåãã§ãããåŒãèµ·ããå¯èœæ§ãããã
react-query
ã䜿çšããäŸïŒ
useQuery(['products'], fetchProducts, { staleTime: 60 * 60 * 1000 }); // 1 hour
ãã®äŸã§ã¯ãproducts
ããŒã¿ã¯1æéæ°é®®ã§ãããšèŠãªãããŸãããã®åŸãreact-query
ã¯ããã¯ã°ã©ãŠã³ãã§ããŒã¿ãåãã§ãããããã£ãã·ã¥ãæŽæ°ããŸãã
2. ã€ãã³ãããŒã¹ã®ç¡å¹å
ã€ãã³ãããŒã¹ã®ç¡å¹åã¯ãåºç€ãšãªãããŒã¿ã倿Žãããããšã瀺ãç¹å®ã®ã€ãã³ããçºçãããšãã«ãã£ãã·ã¥ãç¡å¹åãããã®ã§ãããã®ã¢ãããŒãã¯ãå¿ èŠãªãšãã«ã®ã¿ãã£ãã·ã¥ãç¡å¹åãããããTTLããŒã¹ã®ç¡å¹åãããæ£ç¢ºã§ãã
å©ç¹ïŒ
- ããŒã¿ã倿Žããããšãã«ã®ã¿ãã£ãã·ã¥ãç¡å¹åããããšã§ãããŒã¿ã®äžè²«æ§ã確ä¿ããã
- äžèŠãªåãã§ãããåæžããã
æ¬ ç¹ïŒ
- ããŒã¿å€æŽã€ãã³ããæ€åºããäŒæãããã¡ã«ããºã ãå¿ èŠã
- TTLãããå®è£ ãè€éã«ãªãå¯èœæ§ãããã
WebSocketã䜿çšããäŸïŒ
å ±åããã¥ã¡ã³ãç·šéã¢ããªã±ãŒã·ã§ã³ãæ³åããŠã¿ãŠãã ããããããŠãŒã¶ãŒãããã¥ã¡ã³ãã«å€æŽãå ãããšããµãŒããŒã¯WebSocketãä»ããŠæ¥ç¶ãããŠãããã¹ãŠã®ã¯ã©ã€ã¢ã³ãã«æŽæ°ã€ãã³ããããã·ã¥ã§ããŸããã¯ã©ã€ã¢ã³ãã¯ããã®ç¹å®ã®ããã¥ã¡ã³ãã®ãã£ãã·ã¥ãç¡å¹åã§ããŸãã
// Client-side code
const socket = new WebSocket('ws://example.com/ws');
socket.onmessage = (event) => {
const message = JSON.parse(event.data);
if (message.type === 'document_updated') {
queryClient.invalidateQueries(['document', message.documentId]); // react-query example
}
};
3. ã¿ã°ããŒã¹ã®ç¡å¹å
ã¿ã°ããŒã¹ã®ç¡å¹åã§ã¯ãç¹å®ã®ã¿ã°ã®äžã«ãã£ãã·ã¥ãšã³ããªãã°ã«ãŒãåã§ããŸããç¹å®ã®ã¿ã°ã«é¢é£ããããŒã¿ã倿Žãããå Žåããã®ã¿ã°ã«é¢é£ä»ããããŠãããã¹ãŠã®ãã£ãã·ã¥ãšã³ããªãç¡å¹åã§ããŸãã
å©ç¹ïŒ
- ãã£ãã·ã¥ã®äŸåé¢ä¿ãæè»ã«ç®¡çããæ¹æ³ãæäŸããã
- é¢é£ããŒã¿ããŸãšããŠç¡å¹åããã®ã«äŸ¿å©ã
æ¬ ç¹ïŒ
- é©åãªã¿ã°ãå®çŸ©ããããã«æ éãªèšç»ãå¿ èŠã
- TTLãããå®è£ ãè€éã«ãªãå¯èœæ§ãããã
äŸïŒ
ããã°ãã©ãããã©ãŒã ãèããŠã¿ãŸããããç¹å®ã®èè ã®IDã§ããã®èè ã«é¢é£ãããã£ãã·ã¥ãšã³ããªã«ã¿ã°ãä»ããããšãã§ããŸããèè ã®ãããã£ãŒã«ãæŽæ°ããããšããã®èè ã«é¢é£ä»ããããŠãããã¹ãŠã®ãã£ãã·ã¥ãšã³ããªãç¡å¹åã§ããŸãã
react-query
ãSWR
ã¯çŽæ¥ã¿ã°ããµããŒãããŠããŸããããã¯ãšãªããŒãæŠç¥çã«æ§é åãããã£ã«ã¿é¢æ°ã§queryClient.invalidateQueries
ã䜿çšããããšã§ããã®åäœããšãã¥ã¬ãŒãã§ããŸãã
// Invalidate all queries related to authorId: 123
queryClient.invalidateQueries({
matching: (query) => query.queryKey[0] === 'posts' && query.queryKey[1] === 123 // example query key: ['posts', 123, { page: 1 }]
})
4. Stale-While-Revalidate (SWR)
SWRã¯ãã¢ããªã±ãŒã·ã§ã³ããã£ãã·ã¥ããå€ãããŒã¿ãå³åº§ã«è¿ããåæã«ããã¯ã°ã©ãŠã³ãã§ããŒã¿ãåæ€èšŒãããã£ãã·ã³ã°æŠç¥ã§ãããã®ã¢ãããŒãã¯ãé«éãªåæããŒããæäŸãããŠãŒã¶ãŒãæçµçã«ææ°ã®ããŒã¿ãèŠãããããã«ããŸãã
å©ç¹ïŒ
- é«éãªåæããŒããæäŸããã
- æçµçãªããŒã¿ã®äžè²«æ§ã確ä¿ããã
- äœæããã©ãŒãã³ã¹ãåäžãããã
æ¬ ç¹ïŒ
- ãŠãŒã¶ãŒãäžæçã«å€ãããŒã¿ãèŠãããšãããã
- ããŒã¿ã®å€ãã®èš±å®¹åºŠãæ éã«èæ ®ããå¿ èŠãããã
SWR
ã䜿çšããäŸïŒ
import useSWR from 'swr';
const { data, error } = useSWR('/api/data', fetcher);
SWR
ã§ã¯ãããŒã¿ã¯ïŒå©çšå¯èœã§ããã°ïŒãã£ãã·ã¥ããå³åº§ã«è¿ããããã®åŸfetcher
颿°ãããã¯ã°ã©ãŠã³ãã§åŒã³åºãããŠããŒã¿ãåæ€èšŒãããŸãã
5. ãªããã£ãã¹ãã£ãã¯ã¢ããããŒãïŒæ¥œèŠ³çæŽæ°ïŒ
ãªããã£ãã¹ãã£ãã¯ã¢ããããŒãã¯ããµãŒããŒã倿Žã確èªããåã§ãã£ãŠããæäœã®æåŸ ãããçµæã§UIãå³åº§ã«æŽæ°ãããã®ã§ãããã®ã¢ãããŒãã¯ãããå¿çæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããŸãããæœåšçãªãšã©ãŒãšããŒã«ããã¯ã®åŠçãå¿ èŠã§ãã
å©ç¹ïŒ
- éåžžã«å¿çæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããã
- äœæçãªé å»¶ãåæžããã
æ¬ ç¹ïŒ
- æ éãªãšã©ãŒãã³ããªã³ã°ãšããŒã«ããã¯ã¡ã«ããºã ãå¿ èŠã
- å®è£ ãããè€éã«ãªãå¯èœæ§ãããã
äŸïŒ
æç¥šã·ã¹ãã ãèããŠã¿ãŸãããããŠãŒã¶ãŒãæç¥šãããšããµãŒããŒãæç¥šã確èªããåã§ãã£ãŠããUIã¯å³åº§ã«æç¥šæ°ãæŽæ°ããŸãããµãŒããŒãæç¥šãæåŠããå ŽåãUIã¯åã®ç¶æ ã«ããŒã«ããã¯ããå¿ èŠããããŸãã
const [votes, setVotes] = useState(initialVotes);
const handleVote = async () => {
const optimisticVotes = votes + 1;
setVotes(optimisticVotes); // Optimistically update the UI
try {
await api.castVote(); // Send the vote to the server
} catch (error) {
// Rollback the UI on error
setVotes(votes);
console.error('Failed to cast vote:', error);
}
};
react-query
ãSWR
ã§ã¯ãéåžžããªããã£ãã¹ãã£ãã¯ã¢ããããŒãã®ããã«mutate
颿°ïŒreact-query
ïŒã䜿çšããããcache.set
ïŒã«ã¹ã¿ã SWR
å®è£
ã®å ŽåïŒã䜿çšããŠæåã§ãã£ãã·ã¥ãæŽæ°ããŸãã
6. æåã«ããç¡å¹å
æåã«ããç¡å¹åã¯ããã£ãã·ã¥ããã€ã¯ãªã¢ãããããæç€ºçã«å¶åŸ¡ã§ããŸããããã¯ãPOSTãPUTããŸãã¯DELETEãªã¯ãšã¹ããæåããåŸãªã©ãããŒã¿ããã€å€æŽãããããããçè§£ããŠããå Žåã«ç¹ã«äŸ¿å©ã§ããããã«ã¯ããã£ãã·ã³ã°ã©ã€ãã©ãªãæäŸããã¡ãœããïŒäŸïŒreact-query
ã®queryClient.invalidateQueries
ïŒã䜿çšããŠãã£ãã·ã¥ãæç€ºçã«ç¡å¹åããããšãå«ãŸããŸãã
å©ç¹ïŒ
- ãã£ãã·ã¥ç¡å¹åã®æ£ç¢ºãªå¶åŸ¡ã
- ããŒã¿ã®å€æŽãäºæž¬å¯èœãªç¶æ³ã«æé©ã
æ¬ ç¹ïŒ
- ç¡å¹åãæ£ããå®è¡ãããããã«æ éãªç®¡çãå¿ èŠã
- ç¡å¹åããžãã¯ãé©åã«å®è£ ãããŠããªãå Žåããšã©ãŒãçºçããããã
react-query
ã䜿çšããäŸïŒ
const handleUpdate = async (data) => {
await api.updateData(data);
queryClient.invalidateQueries('myData'); // Invalidate the cache after the update
};
é©åãªæŠç¥ã®éžæ
é©åãªãã£ãã·ã¥ç¡å¹åæŠç¥ã®éžæã¯ãããã€ãã®èŠå ã«äŸåããŸãïŒ
- ããŒã¿æŽæ°é »åºŠïŒé »ç¹ã«å€æŽãããããŒã¿ã«ã¯ãã€ãã³ãããŒã¹ãŸãã¯SWRãé©ããŠããå ŽåããããŸããé »ç¹ã«å€æŽãããªãããŒã¿ã«ã¯ãTTLã§ååãªå ŽåããããŸãã
- äžè²«æ§ã®èŠä»¶ïŒå³å¯ãªããŒã¿ã®äžè²«æ§ãéèŠãªå Žåã¯ãã€ãã³ãããŒã¹ãŸãã¯æåã«ããç¡å¹åãå¿ èŠã«ãªãå ŽåããããŸããããçšåºŠã®å€ãã蚱容ã§ããå Žåã¯ãSWRãããã©ãŒãã³ã¹ãšäžè²«æ§ã®ãã©ã³ã¹ãåãã®ã«é©ããŠããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã®è€éãïŒåçŽãªã¢ããªã±ãŒã·ã§ã³ã§ã¯TTLã圹ç«ã€å ŽåããããŸãããããè€éãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ã¿ã°ããŒã¹ãŸãã¯ã€ãã³ãããŒã¹ã®ç¡å¹åãå¿ èŠã«ãªãå ŽåããããŸãã
- ããã©ãŒãã³ã¹ã®èæ ®äºé ïŒåãã§ããããµãŒããŒè² è·ãšãããã¯ãŒã¯åž¯åå¹ ã«äžãã圱é¿ãèæ ®ããŠãã ãããããŒã¿ã®é®®åºŠã確ä¿ãã€ã€ãäžèŠãªåãã§ãããæå°éã«æããæŠç¥ãéžæããŠãã ããã
æ¥çå¥ã®å®è·µäŸ
ãããã®æŠç¥ãããŸããŸãªæ¥çã§ã©ã®ããã«é©çšã§ããããæ¢ã£ãŠã¿ãŸãããïŒ
- eã³ããŒã¹ïŒååäŸ¡æ Œã«ã€ããŠã¯ãããŒã¿ããŒã¹ã§ã®äŸ¡æ ŒæŽæ°ã«ãã£ãŠããªã¬ãŒãããã€ãã³ãããŒã¹ã®ç¡å¹åã䜿çšããŸããååã¬ãã¥ãŒã«ã€ããŠã¯ãSWRã䜿çšããŠãã£ãã·ã¥ãããã¬ãã¥ãŒã衚瀺ãã€ã€ãããã¯ã°ã©ãŠã³ãã§åæ€èšŒããŸãã
- ãœãŒã·ã£ã«ã¡ãã£ã¢ïŒãŠãŒã¶ãŒãããã£ãŒã«ã«ã€ããŠã¯ãã¿ã°ããŒã¹ã®ç¡å¹åã䜿çšããŠããããã£ãŒã«ãæŽæ°ããããšãã«ç¹å®ã®ãŠãŒã¶ãŒã«é¢é£ãããã¹ãŠã®ãã£ãã·ã¥ãšã³ããªãç¡å¹åããŸãããã¥ãŒã¹ãã£ãŒãã«ã€ããŠã¯ãSWRã䜿çšããŠãã£ãã·ã¥ãããã³ã³ãã³ãã衚瀺ãã€ã€ãæ°ããæçš¿ããã§ããããŸãã
- éèãµãŒãã¹ïŒæ ªäŸ¡ã«ã€ããŠã¯ãTTLãšã€ãã³ãããŒã¹ã®ç¡å¹åãçµã¿åãããŸããé »ç¹ã«å€åããäŸ¡æ Œã«ã¯çãTTLãèšå®ããéèŠãªäŸ¡æ Œå€åãçºçãããšãã«ã¯ã€ãã³ãããŒã¹ã®ç¡å¹åã䜿çšããŠãã£ãã·ã¥ãæŽæ°ããŸãã
- ãã«ã¹ã±ã¢ïŒæ£è èšé²ã«ã€ããŠã¯ãããŒã¿ã®äžè²«æ§ãåªå ããæ£è ããŒã¿ããŒã¹ã®æŽæ°ã«ãã£ãŠããªã¬ãŒãããã€ãã³ãããŒã¹ã®ç¡å¹åã䜿çšããŸããããŒã¿ã®ãã©ã€ãã·ãŒãšã»ãã¥ãªãã£ã確ä¿ããããã«ã峿 Œãªã¢ã¯ã»ã¹å¶åŸ¡ãå®è£ ããŸãã
ãã£ãã·ã¥ç¡å¹åã®ãã¹ããã©ã¯ãã£ã¹
广çãªãã£ãã·ã¥ç¡å¹åã確ä¿ããããã«ã以äžã®ãã¹ããã©ã¯ãã£ã¹ã«åŸã£ãŠãã ããïŒ
- ãã£ãã·ã¥ããã©ãŒãã³ã¹ã®ç£èŠïŒãã£ãã·ã¥ã®ãããçãšåãã§ããã®é »åºŠã远跡ããæœåšçãªåé¡ãç¹å®ããŸãã
- å ç¢ãªãšã©ãŒãã³ããªã³ã°ã®å®è£ ïŒããŒã¿ãã§ããããã³ãã£ãã·ã¥ç¡å¹åäžã®ãšã©ãŒãåŠçããã¢ããªã±ãŒã·ã§ã³ã®ã¯ã©ãã·ã¥ãé²ããŸãã
- äžè²«ããåœåèŠåã®äœ¿çšïŒãã£ãã·ã¥ããŒã«æç¢ºã§äžè²«ããåœåèŠåã確ç«ãã管çãšãããã°ãç°¡çŽ åããŸãã
- ãã£ãã·ã³ã°æŠç¥ã®ææžåïŒéžæããç¡å¹åæ¹æ³ãšãã®æ ¹æ ãå«ãããã£ãã·ã³ã°æŠç¥ãæç¢ºã«ææžåããŸãã
- ãã£ãã·ã³ã°å®è£ ã®ãã¹ãïŒãã£ãã·ã³ã°å®è£ ã培åºçã«ãã¹ãããããŒã¿ãæ£ããæŽæ°ããããã£ãã·ã¥ãæåŸ ã©ããã«åäœããããšã確èªããŸãã
- ãµãŒããŒãµã€ãã¬ã³ããªã³ã°ïŒSSRïŒã®æ€èšïŒé«éãªåæããŒãæéãšSEOæé©åãå¿ èŠãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ããµãŒããŒãµã€ãã¬ã³ããªã³ã°ã䜿çšããŠãµãŒããŒäžã§ãã£ãã·ã¥ãäºåã«çæããããšãæ€èšããŠãã ããã
- CDNïŒã³ã³ãã³ãããªããªãŒãããã¯ãŒã¯ïŒã®äœ¿çšïŒCDNã䜿çšããŠéçã¢ã»ããããã£ãã·ã¥ããäžçäžã®ãŠãŒã¶ãŒã®é å»¶ãåæžããŸãã
é«åºŠãªãã¯ããã¯
åºæ¬çãªæŠç¥ãè¶ ããŠãããã«ã¹ããŒããªãã£ãã·ã¥ç¡å¹åã®ããã«ã以äžã®é«åºŠãªãã¯ããã¯ãæ€èšããŠãã ããïŒ
- é©å¿åTTLïŒããŒã¿å€æŽã®é »åºŠã«åºã¥ããŠTTLãåçã«èª¿æŽããŸããäŸãã°ãããŒã¿ãé »ç¹ã«å€æŽãããå Žåã¯TTLãçãããããŒã¿ããŸãã«ãã倿Žãããªãå Žåã¯TTLãé·ãããŸãã
- ãã£ãã·ã¥ã®äŸåé¢ä¿ïŒãã£ãã·ã¥ãšã³ããªéã«æç€ºçãªäŸåé¢ä¿ãå®çŸ©ããŸãããããšã³ããªãç¡å¹åããããšããã¹ãŠã®äŸåãšã³ããªãèªåçã«ç¡å¹åããŸãã
- ããŒãžã§ã³ç®¡çããããã£ãã·ã¥ããŒïŒãã£ãã·ã¥ããŒã«ããŒãžã§ã³çªå·ãå«ããŸããããŒã¿æ§é ã倿Žããããšãã«ããŒãžã§ã³çªå·ãã€ã³ã¯ãªã¡ã³ãããŠããã¹ãŠã®å€ããã£ãã·ã¥ãšã³ããªãç¡å¹åããŸããããã¯ãAPIã®å€æŽãåŠçããã®ã«ç¹ã«äŸ¿å©ã§ãã
- GraphQLã®ãã£ãã·ã¥ç¡å¹åïŒGraphQLã¢ããªã±ãŒã·ã§ã³ã§ã¯ãæ£èŠåããããã£ãã·ã³ã°ããã£ãŒã«ãã¬ãã«ã®ç¡å¹åãªã©ã®ãã¯ããã¯ã䜿çšããŠããã£ãã·ã¥ç®¡çãæé©åããŸããApollo Clientã®ãããªã©ã€ãã©ãªã¯ããããã®ãã¯ããã¯ãçµã¿èŸŒã¿ã§ãµããŒãããŠããŸãã
çµè«
ã¹ããŒããªãã£ãã·ã¥ç¡å¹åæŠç¥ã®å®è£
ã¯ãå¿çæ§ãé«ãããã©ãŒãã³ã¹ã®è¯ãReactã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ããããŸããŸãªç¡å¹åæ¹æ³ãçè§£ããç¹å®ã®ããŒãºã«é©ããã¢ãããŒããéžæããããšã§ãããŒã¿ã®äžè²«æ§ã確ä¿ãããããã¯ãŒã¯è² è·ã軜æžããåªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸã§ããŸããreact-query
ãSWR
ã®ãããªã©ã€ãã©ãªã¯ããã£ãã·ã¥æŠç¥ã®å®è£
ãç°¡çŽ åããåªãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã®æ§ç¯ã«éäžã§ããããã«ããŸãããã£ãã·ã¥ããã©ãŒãã³ã¹ãç£èŠããå
ç¢ãªãšã©ãŒãã³ããªã³ã°ãå®è£
ãããã£ãã·ã³ã°æŠç¥ãææžåããŠãé·æçãªæåã確å®ã«ããããšãå¿ããªãã§ãã ããã
ãããã®æŠç¥ãæ¡çšããããšã§ãå¹ççã§ä¿¡é Œæ§ã®é«ããã£ãã·ã³ã°ã·ã¹ãã ãæ§ç¯ã§ãããŠãŒã¶ãŒã«ãšã£ãŠããè¯ããšã¯ã¹ããªãšã³ã¹ãšãéçºããŒã ã«ãšã£ãŠããä¿å®ããããã¢ããªã±ãŒã·ã§ã³ã«ã€ãªãããŸãã