HTMLでフォームを作成する方法7選

HTMLフォームの作成方法と活用例を示す図HTML
この記事は約19分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

ウェブサイトやアプリケーション開発において、ユーザーから情報を収集するための重要な手段として、HTMLフォームは不可欠です。

この記事では、HTMLでフォームを作成する方法について、初心者でも理解しやすいように、基本的な概念から応用技術まで段階的に解説します。

HTMLフォームの構築を通じて、ウェブ技術の基礎知識を深め、より高度なプログラミングスキルへとステップアップするための一助となることでしょう。

●HTMLフォームの基本

HTMLフォームを理解するためには、まずはその構成要素を把握することが重要です。

フォームは、ウェブサーバーに情報を送信するための一連の入力フィールドであり、利用者がデータを入力し、サーバーに送信する手段を提供します。

基本的に、<form>タグで囲まれた範囲内に、テキストボックスやチェックボックス、ラジオボタン、サブミットボタンなどが配置されます。

それぞれの要素は特定のタイプのデータ入力と操作を可能にし、ユーザーインタラクションの核となります。

○フォームとは何か?

フォームは、HTMLの<form>要素によって定義され、ユーザーがデータを入力するフィールドや選択肢、ボタンなどを含むコンテナです。

これにより、ユーザーからの入力を受け取り、そのデータをサーバーに送信する役割を果たします。

フォームのデータは、通常、ボタンがクリックされると、名前付きの各入力要素から集められ、一つのデータセットとしてウェブサーバーに送信されます。

○フォームの基本的な構造

HTMLフォームの構造を理解することは、効果的なウェブフォームを作成するための第一歩です。

フォームは<form>タグで開始し、</form>タグで閉じられます。

この間に、<input>、<textarea>、<button>、<select>などの要素が含まれ、ユーザーがデータを入力しやすいように設計されています。

例えば、<input type=”text”>は一行のテキスト入力を提供し、<textarea>は複数行のテキスト入力が可能です。

また、<select>要素はドロップダウンリストを通じて選択肢を提供し、ユーザーがリストから選択することができます。

それぞれの入力要素は、name属性を持つことで、送信されるフォームデータとして識別されます。

●フォームの主要な要素と属性

HTMLフォームを構成する際、理解しておくべき主要な要素と属性がいくつかあります。

これらはフォームの効率性、使いやすさ、そして機能性を決定づける重要な部分です。

フォームには多様な入力要素が含まれ、それぞれ特定のデータ型と相互作用をサポートしています。

今回は、特に頻繁に使用されるinput要素に焦点を当て、その使用方法と属性について詳しく見ていきます。

○input要素の基本

input要素は、HTMLフォームで最も一般的に使われる要素の一つで、ユーザーがデータを入力できるフィールドです。

この要素は多用途に対応しており、type属性を変更することで様々な形式の入力を受け付けられます。

たとえば、type="text"は一般的なテキストボックスを指定し、type="password"はパスワード入力用のフィールドを作成します。

また、type="email"はEメールアドレスの入力を検証するための特別なフォーマットを使用します。

ここでは、シンプルなテキスト入力フォームのサンプルコードを紹介します。

<!-- テキスト入力フォームの例 -->
<form>
  <label for="name">名前:</label>
  <input type="text" id="name" name="name">
  <input type="submit" value="送信">
</form>

このコードは、ユーザーに名前を入力してもらい、送信ボタンでそのデータをサーバーに送る一連の流れを表しています。

label要素の使用は、フォームのアクセシビリティと使いやすさを向上させるために重要です。

○ラベルの重要性と使い方

フォーム内のlabel要素は、各入力フィールドが何のデータを求めているのかをユーザーに明確に伝える役割を担います。

labelinput要素と結びつけられることが多く、for属性によって特定のinput要素のIDを指定することで、ラベルとフィールドの関連付けが行われます。

この関連付けにより、ラベルをクリックするだけで対応する入力フィールドにフォーカスが当たり、ユーザー体験が向上します。

<!-- ラベルと入力フィールドの関連付けの例 -->
<form>
  <label for="email">Eメール:</label>
  <input type="email" id="email" name="email">
  <input type="submit" value="登録">
</form>

この形式は、フォームを使いやすく、アクセシブルにする上で非常に効果的です。

特に画面読み上げソフトを使用するユーザーにとって、label要素の正しい使用は情報の理解を助けます。

○セレクトボックスの作り方

セレクトボックスは、ユーザーがリストから複数の選択肢の中から一つを選ぶことができるフォーム要素です。

select要素内にoption要素を配置することで、ドロップダウンリストを簡単に作成できます。

下記のコードは、ユーザーに職業を選んでもらうためのセレクトボックスの一例です。

<!-- セレクトボックスの例 -->
<form>
  <label for="job">職業:</label>
  <select id="job" name="job">
    <option value="teacher">教師</option>
    <option value="doctor">医者</option>
    <option value="engineer">エンジニア</option>
    <option value="artist">アーティスト</option>
  </select>
  <input type="submit" value="送信">
</form>

このサンプルでは、select要素を通じて複数の選択肢を提供しており、ユーザーは自分の職業を選ぶことができます。

セレクトボックスの使用は、フォームの入力オプションを整理し、ユーザーにとって選択しやすい形をとることで、より良いフォーム体験を実現します。

●フォームの作成手順

フォームを作成する過程は、計画的に進めることが成功の鍵です。

初めにフォームの目的を明確に定義し、どのような情報をユーザーから収集する必要があるのかを決定します。

次に、必要なフォームフィールドを設計し、それぞれに適切な形式を選択します。

この段階で、入力の検証も考慮に入れることが大切です。検証は、不正確または不適切なデータが送信されるのを防ぐために重要です。

最後に、フォームデータの送信先となるサーバー側のスクリプトを準備します。

これにより、データを適切に処理し、必要に応じてユーザーにフィードバックを実装できるようになります。

○サンプルコード1:シンプルな連絡フォーム

シンプルな連絡フォームは、名前、メールアドレス、そしてメッセージを受け取る基本的な構造を持っています。

下記のサンプルコードは、これらの基本的な入力フィールドを持つHTMLフォームを表しています。

<!-- シンプルな連絡フォーム -->
<form action="/submit_form" method="post">
  <label for="name">名前:</label>
  <input type="text" id="name" name="name" required>
  <label for="email">メールアドレス:</label>
  <input type="email" id="email" name="email" required>
  <label for="message">メッセージ:</label>
  <textarea id="message" name="message" required></textarea>
  <input type="submit" value="送信">
</form>

このフォームは、ユーザーからの基本的な情報を収集し、サーバーにPOSTメソッドでデータを送信するためのものです。

各入力フィールドはrequired属性を持っており、これによりフォームのすべてのフィールドが入力されるまで送信ボタンが機能しないようになっています。

○サンプルコード2:登録フォームの作成

登録フォームは、ユーザーからもう少し詳細な情報を収集することが目的です。

下記のサンプルでは、ユーザー名、パスワード、性別、そして生年月日を入力するフィールドを含んでいます。

<!-- 登録フォーム -->
<form action="/register" method="post">
  <label for="username">ユーザー名:</label>
  <input type="text" id="username" name="username" required>
  <label for="password">パスワード:</label>
  <input type="password" id="password" name="password" required>
  <label for="gender">性別:</label>
  <select id="gender" name="gender">
    <option value="male">男性</option>
    <option value="female">女性</option>
  </select>
  <label for="dob">生年月日:</label>
  <input type="date" id="dob" name="dob">
  <input type="submit" value="登録">
</form>

このフォームは、セキュリティを考慮してパスワードフィールドを含み、性別はドロップダウンリストから選択できるようになっています。

生年月日の入力ではtype="date"を使用し、カレンダーから日付を選ぶことができます。

○サンプルコード3:フィードバックフォームの例

フィードバックフォームは、ユーザーからの意見や感想を収集するために設計されています。

下記のコードは、ユーザーがフィードバックを送信できるシンプルなフォームを表しています。

<!-- フィードバックフォーム -->
<form action="/feedback" method="post">
  <label for="subject">件名:</label>
  <input type="text" id="subject" name="subject" required>
  <label for="feedback">フィードバック:</label>
  <textarea id="feedback" name="feedback" required></textarea>
  <input type="submit" value="送信">
</form>

このフォームは、件名とフィードバックの内容を必須項目としており、ユーザーが情報を提供しやすいようにテキストエリアを使用しています。

このようなフィードバックは、サービスの改善に直接役立つ貴重なデータを提供します。

●フォームのデータ処理

フォームから送信されたデータの処理は、ウェブアプリケーションの基本的な部分を形成します。

ユーザーがフォームを介して入力したデータは、サーバーに送信された後、さまざまな処理が行われることが一般的です。

これには、データの検証、登録、データベースへの保存、応答の送信などが含まれます。

データ処理の正確さは、セキュリティの強化とデータの整合性の維持に不可欠です。

○フォームデータの送信と処理の流れ

ユーザーがフォームに情報を入力し「送信」ボタンをクリックすると、ブラウザはその情報を名前と値のペアとしてエンコードし、指定されたアクションURLにHTTPリクエストを通じて送信します。

このプロセスは通常、POSTまたはGETメソッドを使用して行われます。

サーバーはこのリクエストを受け取り、適切なサーバーサイドスクリプトでデータを処理します。

処理の結果に基づいて、サーバーはユーザーに対してHTMLページやステータスメッセージを含むレスポンスを返します。

ここでは、シンプルな連絡フォームデータを受け取り、処理するPHPスクリプトの例を紹介します。

<?php
// フォームデータの検証
$name = htmlspecialchars($_POST['name']);
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
$message = htmlspecialchars($_POST['message']);

if ($email) {
    // データベースへの保存やメール送信の処理をここで行う
    echo "受け取りました: " . $name . " (" . $email . ")";
} else {
    echo "無効なメールアドレスです。";
}
?>

このスクリプトは、ユーザーから受け取った名前、メールアドレス、メッセージを検証し、それらを安全に処理します。

不正なデータがフィルターされ、適切なフィードバックがユーザーに提供されます。

○サーバーサイドスクリプトへのデータ送信

サーバーサイドスクリプトは、フォームデータの処理と応答の生成を担当します。

スクリプトは通常、PHP、Python、Ruby、JavaScript(Node.js)などの言語で書かれ、データベースへの保存、メール送信、ユーザー認証、レスポンス生成などのタスクを行います。

データがサーバーに送信されると、スクリプトはデータを受け取り、必要に応じて様々な操作を行い、最終的にはデータをデータベースに保存するか、他の形で応答を返します。

ここでは、フォームデータを受け取り、処理する基本的なNode.jsのExpressサーバーの例を見ていきましょう。

const express = require('express');
const app = express();

app.use(express.urlencoded({ extended: true }));

app.post('/submit', (req, res) => {
    const { name, email, message } = req.body;
    console.log(`受け取ったデータ: 名前 - ${name}, メール - ${email}, メッセージ - ${message}`);
    res.send('フォームデータを受け取りました。');
});

app.listen(3000, () => {
    console.log('サーバーがポート3000で起動しました。');
});

このサーバーは、指定されたポートで起動し、送信されたフォームデータを受け取ってコンソールに出力します。

これにより、開発者はフォームからのデータをリアルタイムで確認し、さらに処理を行うことができます。

●エラー処理とセキュリティ対策

ウェブフォームにおけるエラー処理とセキュリティ対策は、不正アクセスやデータの漏洩を防ぐために重要です。

開発者はエラー処理を通じて、システムが適切に反応し、エラー情報を適切にユーザーに通知できるよう設計する必要があります。

また、セキュリティ対策として、フォームを通じて送信されるデータを保護する技術を組み込むことが必須です。

○入力値の検証方法

安全なウェブフォームを設計する上で、ユーザーからの入力を適切に検証することが非常に重要です。

サーバーサイドでの検証には、入力されたデータが予期したフォーマットと一致するかどうかを確認する処理が含まれます。

PHPの例では、不正なHTMLやスクリプトを無効化するためにhtmlspecialcharsやfilter_inputを使用して、XSS攻撃やSQLインジェクションを防ぎます。

○セキュリティを高めるためのヒント

ウェブアプリケーションにおけるセキュリティを強化するためには、データの暗号化、CSRFトークンの使用、コンテンツセキュリティポリシーの設定など、多方面からのアプローチが求められます。

HTTPSを用いることで通信の暗号化を保証し、CSRFトークンを活用してクロスサイトリクエストフォージェリのリスクを低減します。

また、CSPを設定することで外部の不正なリソースの読み込みを阻止し、サイトのセキュリティレベルを一層高めることができます。

●フォームの応用例

ウェブフォームは、単にデータを収集するだけでなく、様々な用途で応用が可能です。

アンケートフォームから注文フォーム、さらには画像のアップロード機能を持つフォームまで、具体的なシナリオに合わせてカスタマイズできます。

こうした応用例を通じて、フォームの可能性を広げることができます。

○サンプルコード4:アンケートフォームの構築

アンケートフォームは、ユーザーの意見や嗜好を収集するための有効な手段です。

例えば、商品やサービスに対するフィードバックを得るために利用されます。

下記のHTMLコードは、基本的なアンケートフォームの一例を表しています。

<form method="post" action="/submit_survey">
  <label for="age">年齢:</label>
  <input type="number" id="age" name="age">
  <label for="feedback">フィードバック:</label>
  <textarea id="feedback" name="feedback"></textarea>
  <input type="submit" value="送信">
</form>

このフォームでは、ユーザーが年齢とフィードバックを入力することができ、送信ボタンをクリックするとデータがサーバーに送信されます。

○サンプルコード5:注文フォームの作成

オンラインショップでの注文フォームは、商品の販売に不可欠です。

下記のサンプルでは、商品を選択し、個数を指定して注文できるフォームを表しています。

<form method="post" action="/place_order">
  <label for="product">商品:</label>
  <select id="product" name="product">
    <option value="apple">りんご</option>
    <option value="orange">オレンジ</option>
    <option value="banana">バナナ</option>
  </select>
  <label for="quantity">数量:</label>
  <input type="number" id="quantity" name="quantity" min="1">
  <input type="submit" value="注文">
</form>

このフォームを使用することで、ユーザーは簡単に商品を選び、必要な数量を入力後、注文を完了させることができます。

○サンプルコード6:画像アップロード機能付きフォーム

ウェブサイトに画像をアップロードする機能は、ユーザーが自身の画像を共有したり、カスタムプロフィール画像を設定する場合に利用されます。

下記のコードは、画像をアップロードするためのフォームです。

<form method="post" action="/upload_image" enctype="multipart/form-data">
  <label for="imageFile">画像ファイル:</label>
  <input type="file" id="imageFile" name="imageFile" accept="image/*">
  <input type="submit" value="アップロード">
</form>

このフォームでは、enctype="multipart/form-data"属性が必要で、これによりファイルのデータが適切にサーバーに送信されます。

○サンプルコード7:動的フォーム要素の追加

ウェブフォーム内で動的に入力フィールドを追加する機能は、ユーザーが複数の情報を入力する必要がある場合に役立ちます。

下記のJavaScriptとHTMLを使用した例では、ユーザーが必要に応じて複数の電話番号をフォームに追加できます。

<form id="contactForm">
  <label for="firstName">名前:</label>
  <input type="text" id="firstName" name="firstName">
  <div id="phoneNumbers">
    <label for="phone1">電話番号:</label>
    <input type="tel" id="phone1" name="phoneNumbers[]">
  </div>
  <button type="button" onclick="addPhoneNumber()">電話番号を追加</button>
  <input type="submit" value="送信">
</form>

<script>
function addPhoneNumber() {
  var container = document.getElementById('phoneNumbers');
  var input = document.createElement('input');
  input.type = 'tel';
  input.name = 'phoneNumbers[]';
  container.appendChild(input);
}
</script>

このスクリプトは、電話番号を追加ボタンがクリックされるたびに新しい電話番号入力フィールドをフォームに追加します。

これにより、ユーザーは必要な数の電話番号を容易にフォームに入力できます。

まとめ

この記事を通じて、HTMLフォームの基本から応用までを段階的に解説しました。

フォームの作成はウェブサイトやアプリケーションにおいて重要な役割を果たし、ユーザーからのデータ収集やインタラクションの窓口となります。

シンプルな連絡フォームから動的な要素を追加する高度なフォームまで、多岐にわたる例を表すことで、読者が自身のプロジェクトに応じたフォームを設計できるように支援しました。

これからも安全かつ効果的にフォームを活用して、ユーザー体験を向上させるための知識とスキルを深めていただければと思います。