Formspreeの使い方

2026/02/01

概要

html/cssのサイトを作成・管理してから17年目に入った。

当初からサイトのアクセスカウントや問い合わせフォームなどは公開されているperl(cgi*)で作成されたものを借用して使っている。流石に最近不具合が出てきた。さらにセキュリテイ上の弱点もあるという。(*この場合 cgi とはhtmlとperl(言語)の仲立ちをするインターフェース)

サイトへの問い合わせアプリであるpostmailの最新版を導入してみたが、現在の厳格なセキュリティ対策を施していないメールを拒絶するgmailやoutlookでは未達が起こる。

Geminiのお薦めはFormspree という。spreeとは「短時間で続けて行うこと」、「自由に活動に従事して、楽しむ」ということ。何々三昧。

ここでのフォームとは問い合わせ入力フォームをいう。問い合わせの仕組みはサイトと閲覧者とのコミュニケーションのためにあるが、悪意のある人間が使う場合の入口になることも考慮しなくてはならない。

FormspreeでFORMを作成

Formspreeは2014年に設立されたアメリカ発のフォームサービス。 世界中で利用されており、フォームサービスのマーケットの中では高いシェアを持っている。原則有料だが、無料のお試し版があり無料プランは月間送信数50件の制限があり、基本的な機能しか使えないが、個人サイトでは使える。

使い方

試しに使ってみたが、とにかく簡単に使える。

formspreeから、「Get started」ボタンから名前、email / パスワードを入力しアカウントを登録する。

登録したメールアドレスとパスワードでsign in する。

必要ならば設定(setting)をしformを作成する。有料プランを薦められるが、避ける。スパム対策のCAPTCHA機能は無料版でも使える。

Add New、Create formで、フォーム名、問い合わせが送られてくるメールアドレスなどを設定しフォームを作成する。

のちほど右上の「Forms」から、FORM ENDPOINTに表示されるurlをCOPYしhtmlに貼り付ける。

CODE EXAMPLEを参考にしてHTMLに貼り付ける

問い合わせのhtmlサンプル

見栄えのするhtml作成する。必須なのは<form>から</form>の黄色部分のみで他はhtmlとしてのコードと装飾のためのコード。

.............................................. <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;500;700&display=swap" rel="stylesheet"> <title>Hitoshi Diary | メールフォーム</title> <style> /* 基本設定 */ :root { --bg-color: #f4f7f6; --card-bg: #ffffff; --primary-color: #4a5568; /* 落ち着いたダークグレー */ --accent-color: #e6a23c; /* 以前の黄色系を上品に調整 */ --text-color: #333333; --input-bg: #f9f9f9; } * { box-sizing: border-box; } body { font-family: 'Noto Sans JP', sans-serif; background-color: var(--bg-color); color: var(--text-color); margin: 0; padding: 20px; min-height: 100vh; display: flex; justify-content: center; align-items: center; } /* フォーム全体のコンテナ(カードデザイン) */ .form-container { background-color: var(--card-bg); padding: 40px; border-radius: 12px; box-shadow: 0 10px 25px rgba(0,0,0,0.05); width: 100%; max-width: 600px; } h1 { text-align: center; font-size: 1.5rem; margin-bottom: 30px; color: var(--primary-color); letter-spacing: 0.05em; } /* フォームグループ */ .form-group { margin-bottom: 20px; } label { display: block; margin-bottom: 8px; font-weight: 500; font-size: 0.9rem; color: var(--primary-color); } /* 入力フィールドのデザイン */ input[type="text"], input[type="email"], textarea { width: 100%; padding: 12px 15px; border: 1px solid #ddd; border-radius: 6px; background-color: var(--input-bg); font-size: 1rem; transition: all 0.3s ease; font-family: inherit; } textarea { min-height: 150px; resize: vertical; } /* フォーカス時のアニメーション */ input:focus, textarea:focus { border-color: var(--accent-color); background-color: #fff; outline: none; box-shadow: 0 0 0 3px rgba(230, 162, 60, 0.2); } /* 送信ボタン */ button[type="submit"] { display: block; width: 100%; padding: 15px; background-color: var(--primary-color); color: #fff; border: none; border-radius: 6px; font-size: 1rem; font-weight: bold; cursor: pointer; transition: background-color 0.3s ease, transform 0.1s ease; margin-top: 10px; } button[type="submit"]:hover { background-color: var(--accent-color); transform: translateY(-2px); } /* 戻るボタンエリア */ #modoru { text-align: center; margin-top: 30px; } #modoru a { text-decoration: none; color: #888; font-size: 0.9rem; border-bottom: 1px solid transparent; transition: all 0.3s; } #modoru a:hover { color: var(--primary-color); border-bottom: 1px solid var(--primary-color); } /* スマホ対応 */ @media (max-width: 480px) { .form-container { padding: 25px; } h1 { font-size: 1.25rem; } } </style> </head> <body> <div class="form-container"> <h1>Hitoshi Diary<br><span style="font-size: 0.8em; font-weight: normal;">Contact Form</span></h1> <form action="https://formspree.io/f/sampleuid" method="POST"> <div class="form-group"> <label for="name">お名前 <span style="color:#ff6b6b; font-size:0.8em;">*</span></label> <input type="text" id="name" name="お名前" placeholder="山田 太郎" required> </div> <div class="form-group"> <label for="email">メールアドレス <span style="color:#ff6b6b; font-size:0.8em;">*</span></label> <input type="email" id="email" name="email" placeholder="example@mail.com" required> </div> <div class="form-group"> <label for="message">メッセージ</label> <textarea id="message" name="message" placeholder="お問い合わせ内容をご記入ください"></textarea> </div> <button type="submit">送信する</button> </form> <div id="modoru"> <a href="profile.html">← プロフィールに戻る</a> </div> </div> </body> </html>

問い合わせ画面サンプル

スマホ画面

問い合わせメール

送られるメール


phpアクセスカウンター

同時に試したのがphpコードで作成されたアクセスカウンター。

アクセスカウンター(無料版)テキスト版

一式をダウンロードして、解凍、count.phpはhtmlの表示したい箇所にiframeのsrcとして組み込む。count.datはサーバーにアップしパミッションを666に設定。

<iframe src="count/count.php" height="70" width="140" frameborder="0" scrolling="no"></iframe>

count.phpソースコード。html内にphpコードを組み込む場合は、最初に<?phpを記述し、全体を拡張子.phpにしてサーバーにアップする。

<?php ####################################################################################### ## # PHPカウンタープログラム # # IPアドレスで判定していますので、同一IPアドレスではカウントされませんが、 # 間にほかの人のアクセスがあればカウントします。ユニーク数というよりはセッション数になります。 # インラインフレームでページに埋め込み、またはphpファイルに直接埋め込むことも可能です。 # 改造や改変は自己責任で行ってください。 # # 著作権表記等は必要ありません。 # # 今のところ特に問題点はありませんが、不具合等がありましたら下記までご連絡ください。 # MailAddress: info@php-factory.net # name: K.Numata # HP: http://www.php-factory.net/ ## ####################################################################################### header("Content-Type: text/html;charset=UTF-8"); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name='robots' content='noindex,nofollow'> <title></title> <style type="text/css">/*id、classは振ってあります。スタイルシートは自由に編集してください*/ #total,#count{text-align:center;color:#777;font-size:12px;font-family:"ヒラギノ角ゴ Pro W3", "メイリオ", Meiryo, Osaka, "MS Pゴシック"} #total,.count{font-size:14px;} .count{color:#36C} </style> </head> <body> <?php $keta = 5; //カウンタの最低桁数 ※カウントがこの桁を超えても大丈夫(ちゃんと自動で桁が上がります) $base_day = date("Y/m/d"); //日付の取得 $remoteAddr = $_SERVER['REMOTE_ADDR']; //IP取得 $filepath = "count.dat"; $fp = fopen($filepath,"r+b"); flock ($fp,LOCK_EX); $line = fgets($fp); //fclose($fp); list($reg_day, $total, $today, $yesterday, $reg_remoteAddr) = explode(",", $line); if ($base_day != $reg_day){ $yesterday = $today; $today = 0; } if ($remoteAddr!=$reg_remoteAddr) { $total++; $today++; ftruncate($fp,0); rewind($fp); fwrite($fp,"$base_day,$total,$today,$yesterday,$remoteAddr"); fclose($fp); } echo "<div id=\"total\">"; printf("累計 %0{$keta}d", $total); echo "</div>"; echo "<div id=\"count\">"; echo "本日<span class=\"count\">{$today}</span>\n"; echo " 昨日<span class=\"count\">{$yesterday}</span>"; echo "</div>"; ?> </body> </html>

phpアクセスカウンター表示サンプル

感想

とにかく、簡単設置できる。多くの機能は有料で10ドル/月だが、個人サイトのと問い合わせは少ないので無料でよしとする。怖いのは有料にするにはクレジットカード情報など伝えなくてはならない。

忘備録としてphpのアクセスカウンターについても記録しておく。

戻る