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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

これを固定ページのmarkdownファイルに貼り付けるだけで動けばいいのですが、うまく動きません。

Netlify公式ブログ (opens new window)によれば、普通のサイトではNetlifyのビルド時に<input type="hidden" name="form-name" value="contact" />というような要素を埋め込むのですが、Static Site Generatorで作ったサイトはそれを消してしまうので、手動で埋め込む必要があるそうです。

VuePressで僕がやった解決策としては以下の感じ。

  1. .vuepress/components/NetlifyForm.vueというコンポーネントファイルを作る
  2. NetlifyForm.vueにhidden要素を埋め込んだフォームを書き込む
  3. コンタクトページのmarkdownから<NetlifyForm/>と書いてフォームを読み込む

NetlifyForm.vueの内容は以下の感じ。



 




<template>
<form name="contact" method="post" data-netlify="true">
  <input type="hidden" name="form-name" value="contact" />
  ...
</form>
</template>
1
2
3
4
5
6

最初の<form>タグのすぐ下にhidden要素を足します。

# 参考にしたサイト

Search
Netlify comes with some handy, built-in features to process form submissions without having to write any server-side code. Learn how to integrate them in your React app.
Netlify Formsで問い合わせフォームを作ったら簡単だった - mottox2 blog
今回、ブログに問い合わせフォームを置くためにNetlify Formsを使ったのですが、静的サイトのまま簡単にフォームが設置できて最高でした。
Gatsby + netlifyでフォームを送信する方法 - atnr.net
netlify上でGatsbyを使ってフォームを作る方法を調べたのでメモしておきます。
Netlify FormsをつかってGatsbyにお問い合わせフォームを追加するまで - Qiita
いままでは、お問い合わせフォームを作成するのに、そのためだけにWordPressを入れてコンタクトフォームプラグインを使ったり、PHPのスクリプトを用意したりと、なかなか手間がかかって大変でした。
ファイルがドロップされなくても使えるようなDropletの書き方

ファイルがドロップされなくても使えるようなDropletの書き方

Dropletとは、アプリアイコンにファイルがドロップ&ドロップされると、そのファイルに対して処理を行えるAppleScript製アプリのことです。

そのDropletを普通にアプリとしても起動しても、同じように使えるようにするためのサンプル。

エラー処理とかまったく考えてないので、よしなにしてください。

VuePress 1.xでPWAを有効にする方法

VuePress 1.xでPWAを有効にする方法

VuePress 0.x以前のやり方はネットに転がっていましたが、1.x以降のやり方は探してもなかったので、自分の備忘録として書きます。

VuePress 1.xでPWAを有効にするにはちょっと手間がかかります。