静的サイトにHTMLとJavaScriptだけでコメント投稿機能を作る
Googleフォームとスプレッドシートを活用することで、HTMLとJavaScriptだけで動作するコメント投稿システムを作ることができます。
Hugoのような静的サイトジェネレーターで作ったブログにコメント欄を付けるには、Disqusのようなサービスを利用するのが一般的かと思います。ただサイトに設置すると重くなったり広告が出たりするのが嫌でした。そこで当サイトではコメント欄をなんとか自前で用意できないかと、Googleフォームを利用して作ってみました。
まずは今回作ったコメント欄のサンプルを見てみてください!
仕組み
Googleフォームにコメントを投稿すると自動的にスプレッドシートに記録される
コメントが記録されたスプレッドシートをCSV形式で出力する
出力したCSVをJavaScriptで読み込みウェブサイトに表示
こんな感じで動きます。応用次第で静的サイトでも色々なことができそうです。
特徴
HTMLとJavaScriptだけでウェブサイトに設置できる
コメントはリアルタイムでサイトに反映される
新しくコメントが投稿されるとメールで通知してくれる
投稿されたコメントはスプレッドシートで管理
NGワードの設定ができる
コメントにHTMLタグを使うとサイト上で反映されるようにできる(私の作ったサンプルでは反映されません)
コメントに返信する機能がない
今の所こんな感じです。なにか良いアイデアがありましたらコメント欄から教えてください!
作り方
1. Googleフォームを新規作成
Googleフォームにアクセスして空白のフォームを新規作成します。
右側の「+」ボタンをクリックし記述式の質問項目を作ります(重要)。ここでは「名前」「メールアドレス」「コメント」の3つの質問項目を作成。
ページ右上の送信ボタンをクリックし、表示されるリンクからフォームの回答ページを開きます。
その回答ページのソースを見てください。
ソース内を質問項目名で検索すると、下の画像のように「項目名+10桁程度の固有番号」が書かれている箇所が見つかるので、その番号をメモしておきます。項目名の右に書いてある数字です。左の数字は関係ないので注意。
そして、今開いている回答ページのURLの「フォームのID」は後で使います。
https://docs.google.com/forms/d/e/【フォームのID】/viewform
フォームの設定は以上です。
2. スプレッドシートの設定
フォーム作成ページの回答タブでスプレッドシートのマークをクリック。新しいスプレッドシートを作成してください。
スプレッドシート1行目には、既にフォームで作った質問項目が書かれています。
ここでちょっと特殊なことをします(もっと上手いやり方があれば教えて下さい!)
シート2行目の左端で右クリックして「行での他の操作項目を表示」→「行2まで固定」をクリックします。
そして3行目に質問項目をアルファベットで書きます。ここでは「Timestamp」「Name」「Mail」「Comments」とします。後ほどJavaScriptを使うときにここを読むためです。全角かな文字だとエラーが出ます。
最後に右上の共有ボタンから「リンクを知っている全員に変更」をクリックしシートを公開します。こうしないと後でCSVを出力しても読み込めません。
シートのURLのID部分も後で使います。
https://docs.google.com/spreadsheets/d/【スプレッドシートのID】/edit
スプレッドシートの設定は以上です。
3. HTMLでコメント投稿フォームを作成
下準備ができたので、実際にコメントを投稿するフォームを作ります。
以下のコードはコピペで使えます。
|
|
- 1行目: GoogleフォームのIDをコピペする
- 2,3,4行目: フォームの回答ページで調べた質問項目の固有番号をそれぞれ
entry.123456789
の数字部分にコピペする。
長いコードですが、変える必要があるのは上記の1~4行目の4箇所だけです。しかも全部コピペで済みます。
上記を適切に設定すると、ここからGoogleフォームにコメントを送信できます。適当に記入して送信ボタンをクリック!
送信したらスプレッドシートを見てください。シートの4行目にタイムスタンプと送信内容が記録されていれば成功です!
これでコメント投稿フォームができました。次はコメント欄を作ります。
4. スプレッドシートの内容をウェブサイトに表示する
下記のコードを手順3で紹介したコードの前でも後ろでもいいのでコピペします。
|
|
- 4行目: スプレッドシートのIDをコピペする
上のコードにスプレッドシートのIDを貼り付け、これをブラウザで見てみると…
スプレッドシートの内容が読み込まれ、コメント欄のように表示されました!
※注意点
PCに保存したHTMLファイル(file:///)からこのHTMLをブラウザで見るとコメントは送信できますが、恐らくCSVが読み込まれないと思います(CORSポリシーエラー)localhostサーバーを立てるか、ご自分のウェブサイト上で試してみてください。
これで基本的なことは終わりです。
あとはお好みでデザインを変えたり、スタイルシートで整えれば完成です。
テンプレができちゃえば、後はコメント欄ごとにGoogleフォームを作って、IDと固有番号をコピペしてくるだけでいいので楽チンです。慣れれば3分かかりません。
補足
以下はおまけです。
メール通知を有効化
Googleフォームで「新しい回答についてのメール通知を受け取る」にチェックすると、新しいコメントがあるたびにメールで知らせてくれます。
コメントの削除
スプレッドシートから行ごと削除すればOK。または「このコメントは削除されました」みたいに自分で書き換えちゃってもよし。
入力必須にする
<input>
または<textarea>
タグの中にrequired
と書くと入力必須になります。サンプルでは名前欄とコメント記入欄にこれが設定されています。
入力できる字数を制限する
<input>
または<textarea>
タグの中にmaxlength="400"
みたいに書くと最大400字に制限できます。
正規表現で特定の文字の使用を禁止する
<input>
または<textarea>
タグの中にpattern="[^★☆]+"
みたいに正規表現を使うと「★」と「☆」の使用が禁止になります。
コメントでHTMLタグが反映されるようにする
手順3のコードの18~25行目を削除すると、「<」を特殊文字に置き換える工程がなくなり、HTMLコードがそのまま反映されます。
コメント欄のデザインを変える
手順4のコードの7行目がコメント欄のベースのHTMLになっているので、そこを変更してください。
サンプル
今回作ったシンプルコメント欄です。
このコメント欄のスプレッドシートはこちら
コメントを書き込む
※広告・スパム・アダルトコンテンツ等の書き込みはご遠慮ください。
関連記事: