Web3Formsã§ç°¡åã«ãåãåãããã©ãŒã ãäœã£ãŠã¿ããïŒâš
ããã«ã¡ã¯ãçŸåœ¹ãšã³ãžãã¢ã§ããã¯ããã¬ãŒã®@YushiYamamotoã§ãïŒ
ä»åã¯ãWeb3Formsãšããç¡æã§äœ¿ãããµãŒãã¹ãå©çšããŠããµãŒããŒã¬ã¹ã§ãåãåãããã©ãŒã ãäœãæ¹æ³ãåå¿è
ã«ãåããããã解説ããŸãã
ã³ãŒããæžãã®ãåããŠã®æ¹ã§ãããã®èšäºãèªãã°30å以å
ã«ã«ãã³ãããããã¢ããåŒãã©ãŒã ãèªåã®ãµã€ãã«åã蟌ããããã«ãªããŸããïŒð
ã§ã¯ããã£ããå§ããŸãããïŒ
Web3Formsã£ãŠäœïŒð€
Web3Formsã¯ããµãŒããŒãµã€ãã®ã³ãŒããæžããã«HTMLã ãã§ãåãåãããã©ãŒã ãäœãã䟿å©ãªããŒã«ã§ãã
ãã©ãŒã ã«å ¥åãããããŒã¿ãæå®ããã¡ãŒã«ã¢ãã¬ã¹ã«éä¿¡ããŠãããAPIãæäŸããŠãããç¹ã«ä»¥äžã®ãããªäººã«ããããã§ãïŒ
- éçãµã€ãïŒHTML/CSS/JSã®ã¿ïŒ ã䜿ã£ãŠãã人
- ãµãŒããŒã®ç®¡çãé¢åã ãšæãã人
- ç°¡åãã€ç¡æã§ãã©ãŒã ãå°å ¥ããã人
å¿ èŠãªãã®ã¯ä»¥äžã ãïŒ
- HTMLã³ãŒãïŒä»åã¯ãããã¢ããåŒã®ãµã³ãã«ãçšæïŒ
- Web3Formsã®APIããŒïŒç¡æã§ååŸå¯èœïŒ
宿ã€ã¡ãŒãžããã§ãã¯ïŒð
ãã®èšäºã§äœãã®ã¯ãç»é¢å³äžã«æµ®ãã¶ãããã¢ããåŒã®ãåãåãããã©ãŒã ã
ãã¿ã³ãæŒããšã¹ã©ã€ãã€ã³ããååãã¡ãŒã«ã¢ãã¬ã¹ãã¡ãã»ãŒãžãå
¥åã§ããŸãã
éä¿¡ãããšãæå®ããã¡ãŒã«ã¢ãã¬ã¹ã«å
容ãå±ãä»çµã¿ã§ãã
ãããªæãâïŒ
[ç»é¢å³äžã«äžžããã¿ã³] â ã¯ãªã㯠â [ãããã¢ããã§ãã©ãŒã ã衚瀺]
ã¹ããã1: Web3Formsã®APIããŒãååŸãã ð
ãŸãã¯APIããŒãæã«å ¥ããŸããããæé ã¯è¶ ç°¡åã§ãïŒ
- Web3Formsã®å ¬åŒãµã€ãã«ã¢ã¯ã»ã¹ã
- ãGet Startedããã¯ãªãã¯ããã¢ã«ãŠã³ããäœæïŒã¡ãŒã«ã¢ãã¬ã¹ã ãã§OKïŒã
- ããã·ã¥ããŒãã§ãAccess Keyããçæã
â äŸ:abcd1234-5678-9012-efgh-3456ijkl7890
ãã®ããŒã¯åŸã§ã³ãŒãã«åã蟌ãã®ã§ãã³ããŒããŠãããŠãã ãããã
ã¹ããã2: åºæ¬ã®HTMLã³ãŒããæºåãã ð
ä»åã¯ãæäŸãããã³ãŒããããŒã¹ã«ãæ¥æ¬èªå¯Ÿå¿ã®ãããã¢ãããã©ãŒã ãäœããŸãã
以äžããã®ã³ãŒãã®æŠèŠã§ãïŒçްããéšåã¯åŸã§è§£èª¬ããŸãïŒã
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ãåãåãããã©ãŒã </title>
</head>
<body>
<!-- ãããã¢ãããŠã£ãžã§ãã -->
<div id="web3forms__widget" x-data="{ open: false }">
<!-- ãã©ãŒã æ¬äœ -->
<div id="w3f__widget--content" x-show="open" class="fixed ...">
<form action="https://api.web3forms.com/submit" method="POST">
<input type="hidden" name="access_key" value="YOUR_API_KEY">
<input type="text" name="name" placeholder="å±±ç° å€ªé" required>
<input type="email" name="email" placeholder="you@company.com" required>
<textarea name="message" placeholder="ã¡ãã»ãŒãžãå
¥å"></textarea>
<button type="submit">éä¿¡</button>
</form>
</div>
<!-- ééãã¿ã³ -->
<button @click="open = !open">ãåãåãã</button>
</div>
<!-- å¿
èŠãªã©ã€ãã©ãª -->
<script src="https://cdn.jsdelivr.net/gh/alpinejs/alpine@v2.x.x/dist/alpine.min.js" defer></script>
</body>
</html>
ãã€ã³ã解説
-
<form>
ã¿ã°:action
屿§ã§Web3Formsã®APIãšã³ããã€ã³ããæå®ã -
access_key
: å ã»ã©ååŸããAPIããŒãããã«è²Œãä»ãã - Alpine.js: 軜éãªJavaScriptã©ã€ãã©ãªã§ããããã¢ããã®ééãç°¡åã«å®çŸã
ã¹ããã3: ãã¶ã€ã³ãæŽãã ðš
çŽ ã£æ°ãªããã©ãŒã ããã€ãŸããªãã§ãããïŒ
ããã§ãTailwind CSSã䜿ã£ãŠã¢ãã³ãªèŠãç®ã«ä»äžããŸãã
æäŸãããã³ãŒãã«ã¯ãã§ã«Tailwindãçµã¿èŸŒãŸããŠããã®ã§ããã®ãŸãŸäœ¿ããŸãã
Tailwindã®èªã¿èŸŒã¿
<script src="https://cdn-tailwindcss.vercel.app/"></script>
ããã§ããã¿ã³ã®è²ã圱ãã¢ãã¡ãŒã·ã§ã³ãé©çšãããŸããããšãã°ïŒ
- éä¿¡ãã¿ã³:
bg-indigo-500
ïŒé玫è²ïŒ - ãããã¢ãã:
shadow-2xl
ïŒç«äœæã®ãã圱ïŒ
ã¹ããã4: ãã©ãŒã éä¿¡ãåãã âïž
ãã©ãŒã ãéä¿¡ããããšãWeb3Formsã®APIãããŒã¿ãåŠçããç»é²ããã¡ãŒã«ã«éä¿¡ããŸãã
ãã®åŠçãJavaScriptã§ã«ã¹ã¿ãã€ãºããŸãããã
ãµã³ãã«ã³ãŒãïŒéä¿¡åŠçïŒ
<script>
document.getElementById('form').addEventListener('submit', function(event) {
event.preventDefault(); // ããã©ã«ãã®éä¿¡ããã£ã³ã»ã«
const formData = new FormData(this);
fetch('https://api.web3forms.com/submit', {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => {
document.getElementById('result').innerHTML = 'éä¿¡æåïŒð';
})
.catch(error => {
document.getElementById('result').innerHTML = 'ãšã©ãŒçºç ð¢';
});
});
</script>
ãããŒãã£ãŒãã§ä»çµã¿ãçè§£
[ãŠãŒã¶ãŒããã©ãŒã å
¥å] â [éä¿¡ãã¿ã³ã¯ãªãã¯] â [fetchã§APIã«ããŒã¿éä¿¡] â [æå/倱æã¡ãã»ãŒãžè¡šç€º]
ã¹ããã5: ããªããŒã·ã§ã³ã远å ãã â
å
¥åæŒããã¡ãŒã«ã¢ãã¬ã¹ã®åœ¢åŒãã¹ãé²ããããHTML5ã®ããªããŒã·ã§ã³ã掻çšããŸãã
ããã«ãæäŸã³ãŒãã«ã¯ã«ã¹ã¿ã ããªããŒã·ã§ã³ãå«ãŸããŠããŸãã
ã³ãŒãäŸ
<input type="email" name="email" required>
<div class="invalid-feedback text-red-400">
æå¹ãªã¡ãŒã«ã¢ãã¬ã¹ãå
¥åããŠãã ããã
</div>
CSSã§ãšã©ãŒæã®èŠãç®ã調æŽïŒ
.was-validated :invalid {
border-color: #dc3545; /* èµ€æ */
}
ããã§ã空æ¬ãç¡å¹ãªå ¥åããããšèµ€ãæ ãšãšã©ãŒã¡ãã»ãŒãžã衚瀺ãããŸãã
泚æç¹: APIããŒã®ã»ãã¥ãªã㣠ð
éåžžã<input type="hidden" name="access_key" value="YOUR_API_KEY">
ã®ããã«APIããŒãHTMLã«çŽæ¥æžããšããã©ãŠã¶ã®ãéçºè
ããŒã«ããªã©ã§èª°ã§ãèŠããŠããŸããããã»ãã¥ãªãã£ãå¿é
ã«ãªããŸãããã
ã§ããWeb3Formsã®å Žåã¯ç¹å¥ïŒ
å®ã¯ãWeb3Formsã®APIããŒã¯å
¬éãããŠã倧äžå€«ãªããã«èšèšãããŠããŸããå
·äœçã«ã¯ïŒ
- éä¿¡å ãåºå®: APIããŒã«ã¯ãããããç»é²ããã¡ãŒã«ã¢ãã¬ã¹ãçŽã¥ããããŠããã第äžè ãåæã«å¥ã®éä¿¡å ã«ããŒã¿ãéãããšã¯ã§ããŸããã
- ã¹ãã å¯Ÿçæžã¿: CAPTCHAãã¬ãŒãå¶éãè£åŽã§åããŠãããããæªçšããã«ããä»çµã¿ã«ãªã£ãŠããŸãã
ã€ãŸããåå¿è
ã§ãå®å¿ããŠãã®ãŸãŸã³ãŒãã«åã蟌ãããã£ãŠOKïŒð
å
¬åŒãµã€ãã§ããAPIããŒãHTMLã«çŽæ¥æžããŠãåé¡ãªãããšæèšãããŠããŸãïŒåè: Web3Forms FAQïŒã
ãšã¯ãããããã«å®å šã«ãããå Žå
ãããã§ãã¡ãã£ãšæ°ã«ãªãâŠããšããæ¹ã¯ãæ¬¡ã®æ¹æ³ã詊ããŠã¿ãŠãããããïŒ
-
ç°å¢å€æ°ã䜿ã:
.env
ãã¡ã€ã«ã«APIããŒãä¿åãããã«ãæã«åã蟌ããïŒèŠãç®ã ãé ãããå Žåã«æå¹ïŒâ»éçãµã€ãã®å Žåããã«ãããŒã«ïŒäŸ: ViteãWebpackïŒã§èšå®ãå¿ èŠã# .env WEB3FORMS_API_KEY=abcd1234-5678-9012-efgh-3456ijkl7890
- ã«ã¹ã¿ã ãããã·: ãµãŒããŒåŽã§APIãªã¯ãšã¹ããäžç¶ããä»çµã¿ãäœãïŒäžçŽè åãïŒã
ã§ããWeb3Formsã®åºæ¬çãªçšéïŒå人ãµã€ããå°èŠæš¡ãããžã§ã¯ãïŒãªãããã®ãŸãŸäœ¿ãã®ãæè»œã§ååã§ããå®å¿ããŠãã©ãŒã äœããæ¥œããã§ãã ãããïŒð
宿ïŒè©ŠããŠã¿ãã ð
- äžèšã®ã³ãŒãã
index.html
ãšããŠä¿åã - APIããŒã
value="YOUR_API_KEY"
ã«æžãæãã - ãã©ãŠã¶ã§éããŠãã¹ãïŒ
éä¿¡ãããšãç»é²ããã¡ãŒã«ã«ä»¥äžã®ãããªå 容ãå±ããŸãïŒ
ä»¶å: Web3Formsããã®æ°ããéä¿¡
ãåå: å±±ç° å€ªé
ã¡ãŒã«ã¢ãã¬ã¹: you@company.com
ã¡ãã»ãŒãž: ããã«ã¡ã¯ããå
æ°ã§ããïŒ
ã«ã¹ã¿ãã€ãºã¢ã€ã㢠ð¡
-
ãã¶ã€ã³å€æŽ:
bg-indigo-500
ãbg-green-500
ã«å€ããŠè²ã調æŽã -
å€èšèªå¯Ÿå¿:
<html lang="en">
ã«ããŠè±èªçãäœã£ãŠã¿ãã -
远å ãã£ãŒã«ã:
<input name="phone" placeholder="é»è©±çªå·">
ã远å ã
ãŸãšã
Web3Formsã䜿ãã°ããµãŒããŒã¬ã¹ã§ç°¡åã«ãã©ãŒã ãäœããŸãã
HTMLãšå°ãã®JavaScriptã§ãåå¿è
ã§ãããã£ãœãUIãå®çŸå¯èœïŒ
ãã²èªåã®ãããžã§ã¯ãã«åãå
¥ããŠããŠãŒã¶ãŒããã®å£°ãéããŠã¿ãŠãã ãããã
質åãããã°ã³ã¡ã³ãæ¬ã§æ°è»œã«èããŠãã ããïŒ
次åã¯ããã©ãŒã ããŒã¿ãGoogleã¹ãã¬ããã·ãŒãã«ä¿åããæ¹æ³ãã玹ä»ããããïŒã楜ãã¿ã«ïŒð
åèãªã³ã¯:
æåŸã«ïŒæ¥åå§èšã®ãçžè«ãæ¿ããŸã
ç§ã¯ãæ¥åå§èšãšã³ãžãã¢ãšããŠWEBå¶äœãã·ã¹ãã éçºãè«ãè² ã£ãŠããŸããææ°æè¡ã掻çšããã¬ã¹ãã³ã·ããªWebãµã€ããã€ã³ã¿ã©ã¯ãã£ããªã¢ããªã±ãŒã·ã§ã³ãAPI飿ºãªã©ãå¹ åºãããŒãºã«å¯Ÿå¿å¯èœã§ãã
ã課é¡è§£æ±ºã«åãã峿Šåãæ¬²ããããé«å質ãªWebå¶äœãäŸé Œãããããšããæ¹ã¯ããã²ãæ°è»œã«ãçžè«ãã ãããäžç·ã«ããžãã¹ã®æé·ãç®æããŸãããïŒ