613 文字
3 分
Netlify FormsをVuePressで利用する
NetlifyにはHTMLのform要素を書くだけで問い合わせフォームが実装できる、素敵な機能があります。
その書き方のサンプルは公式サイトやネット上にたくさんありましたが、そのサンプルをそのままコピペしてもVuePress + Netlifyではうまく動かなかったので、どのようにすれば動くのかを書いていきます。
まず公式サイトのサンプルはこんな感じ。
<form name="contact" method="POST" data-netlify="true"> <p> <label>Your Name: <input type="text" name="name" /></label> </p> <p> <label>Your Email: <input type="email" name="email" /></label> </p> <p> <label>Your Role: <select name="role[]" multiple> <option value="leader">Leader</option> <option value="follower">Follower</option> </select></label> </p> <p> <label>Message: <textarea name="message"></textarea></label> </p> <p> <button type="submit">Send</button> </p> </form>
これを固定ページのmarkdownファイルに貼り付けるだけで動けばいいのですが、うまく動きません。
Netlify公式ブログによれば、普通のサイトではNetlifyのビルド時に<input type="hidden" name="form-name" value="contact" />
というような要素を埋め込むのですが、Static Site Generatorで作ったサイトはそれを消してしまうので、手動で埋め込む必要があるそうです。
VuePressで僕がやった解決策としては以下の感じ。
.vuepress/components/
にNetlifyForm.vue
というコンポーネントファイルを作るNetlifyForm.vue
にhidden要素を埋め込んだフォームを書き込む- コンタクトページのmarkdownから
<NetlifyForm/>
と書いてフォームを読み込む
NetlifyForm.vue
の内容は以下の感じ。
<template> <form name="contact" method="post" data-netlify="true"> <input type="hidden" name="form-name" value="contact" /> ... </form> </template>
最初の<form>
タグのすぐ下にhidden要素を足します。
参考にしたサイト
How to Integrate Netlify’s Form Handling in a React App | Netlify
Realize the speed, agility and performance of a scalable, composable web architecture with Netlify. Explore the composable web platform now!

Netlify Formsで問い合わせフォームを作ったら簡単だった - mottox2 blog
追記(2022/12/29): 問い合わせに対応する窓口をTwitterに統一したいので、フォームページは削除しました。当ブログは静的サイトホスティングサービスのNetlifyでホスティングされています。 今回、ブログに問い合わせフォーム
Gatsby + netlifyでフォームを送信する方法 - atnr.net
netlify上でGatsbyを使ってフォームを作る方法を調べたのでメモしておきます。 <form name="contact" method="post" action=& […]

Netlify FormsをつかってGatsbyにお問い合わせフォームを追加するまで - Qiita
いままでは、お問い合わせフォームを作成するのに、そのためだけにWordPressを入れてコンタクトフォームプラグインを使ったり、PHPのスクリプトを用意したりと、なかなか手間がかかって大変でした。…

Netlify FormsをVuePressで利用する
https://oiteiku.netlify.app/posts/use-netlify-by-vuepress/