さとまたwiki

フォーム

ユーザーからの入力を受け取る仕組み

フォームとは?

日常での例え:紙のアンケート用紙

紙のアンケート

名前を書く欄
選択肢にチェック
「提出」ボタンを押す

Webフォーム

テキスト入力欄(input)
チェックボックス・ラジオボタン
「送信」ボタン

なぜフォームが必要?

Webページは通常「一方通行」で情報を見るだけ。
フォームがあると、ユーザーが情報を送信できる。
→ ログイン、会員登録、問い合わせ、検索など

フォームの基本構造

フォームの3つの要素

form、入力欄、送信ボタン

html
<!-- form: フォーム全体を囲む「箱」 -->
<!-- action: 送信先のURL -->
<!-- method: 送信方法(POST/GET) -->
<form action="/submit" method="POST">

  <!-- label: 入力欄の説明(「名前:」の部分) -->
  <!-- for: どのinputと紐づくか(idと同じ値) -->
  <label for="name">名前:</label>

  <!-- input: 実際の入力欄 -->
  <!-- id: labelと紐づける識別子 -->
  <!-- name: サーバーに送る時のデータ名 -->
  <input type="text" id="name" name="name">

  <!-- button type="submit": 送信ボタン -->
  <button type="submit">送信</button>

</form>
プレビュー

label と for/id はなぜ必要?
ラベルをクリックすると入力欄にフォーカスが移る。
視覚障害者用の読み上げソフトも正しく動作する。

name属性はなぜ必要?
サーバーが受け取るデータの「項目名」になる。
例: name="email" → サーバーは「email」という名前でデータを受け取る

inputの種類(type属性)

type属性で入力欄の「種類」を指定
適切なtypeを選ぶと、スマホで専用キーボードが出たり、入力チェックが自動で行われる。

テキスト系の入力

文字を入力する

html
<!-- type="text": 普通のテキスト -->
<input type="text" placeholder="お名前">

<!-- type="email": メールアドレス -->
<!-- スマホでは@キーが表示される -->
<input type="email" placeholder="example@mail.com">

<!-- type="password": パスワード -->
<!-- 入力内容が●●●で隠れる -->
<input type="password" placeholder="パスワード">

<!-- type="tel": 電話番号 -->
<!-- スマホでは数字キーボードが出る -->
<input type="tel" placeholder="090-1234-5678">
プレビュー

数値・日付の入力

数字や日付を専用UIで入力

html
<!-- type="number": 数値(上下ボタン付き) -->
<input type="number" min="0" max="100" value="50">

<!-- type="range": スライダー -->
<input type="range" min="0" max="100" value="50">

<!-- type="date": 日付(カレンダーが出る) -->
<input type="date">

<!-- type="time": 時刻 -->
<input type="time">
プレビュー
数値:
範囲:
日付:

選択系の入力

選択肢から選ぶ

html
<!-- checkbox: 複数選択可能 -->
<p>好きな果物(複数選択可)</p>
<label>
  <input type="checkbox" name="fruits" value="apple"> りんご
</label>
<label>
  <input type="checkbox" name="fruits" value="banana"> バナナ
</label>

<!-- radio: 1つだけ選択 -->
<!-- 同じname属性で「グループ」を作る -->
<p>性別(1つ選択)</p>
<label>
  <input type="radio" name="gender" value="male"> 男性
</label>
<label>
  <input type="radio" name="gender" value="female"> 女性
</label>
プレビュー

好きな果物(複数選択可)

性別(1つ選択)

checkbox と radio の違い
checkbox:複数選べる(「りんごとバナナ両方好き」)
radio:1つだけ選ぶ(「男性か女性か」)
radioは同じnameを付けて「グループ」にする必要がある

その他のフォーム要素

textarea(テキストエリア)

長い文章を入力する欄

html
<!-- textarea: 複数行のテキスト入力 -->
<!-- rows: 表示する行数 -->
<!-- placeholder: 入力前に表示するヒント -->
<textarea
  rows="4"
  placeholder="お問い合わせ内容を入力してください..."
></textarea>
プレビュー

select(セレクトボックス)

ドロップダウンで選択

html
<!-- select: ドロップダウンリスト -->
<!-- option: 選択肢 -->
<!-- value: サーバーに送られる値 -->
<select name="country">
  <option value="">選択してください</option>
  <option value="jp">日本</option>
  <option value="us">アメリカ</option>
  <option value="uk">イギリス</option>
</select>
プレビュー

input と textarea と select の使い分け
input:短い入力(名前、メールなど)
textarea:長い入力(メッセージ、コメント)
select:決まった選択肢から選ぶ(国、カテゴリ)

入力チェック(バリデーション)

バリデーションとは?

ユーザーが正しい形式で入力しているかチェックすること。
例:メールアドレス欄に「abc」と入力 → 「@が必要です」とエラー表示

HTML5のバリデーション属性

属性を付けるだけで自動チェック

html
<!-- required: 必須入力(空欄だと送信できない) -->
<input type="text" required placeholder="必須項目 *">

<!-- minlength/maxlength: 文字数制限 -->
<input type="text" minlength="3" maxlength="20"
       placeholder="3〜20文字">

<!-- min/max: 数値の範囲制限 -->
<input type="number" min="1" max="100"
       placeholder="1〜100の数値">

<!-- pattern: 正規表現でパターン指定 -->
<!-- 例: 郵便番号形式(123-4567) -->
<input type="text" pattern="[0-9]{3}-[0-9]{4}"
       placeholder="123-4567">
プレビュー

完成例:お問い合わせフォーム

実用的なフォーム

学んだ要素を組み合わせる

html
<form action="/contact" method="POST">
  <!-- 名前(必須) -->
  <div>
    <label for="name">お名前 *</label>
    <input type="text" id="name" name="name" required>
  </div>

  <!-- メール(必須、形式チェック) -->
  <div>
    <label for="email">メールアドレス *</label>
    <input type="email" id="email" name="email" required>
  </div>

  <!-- カテゴリ(選択) -->
  <div>
    <label for="category">カテゴリ</label>
    <select id="category" name="category">
      <option value="general">一般</option>
      <option value="support">サポート</option>
      <option value="sales">営業</option>
    </select>
  </div>

  <!-- メッセージ(必須、複数行) -->
  <div>
    <label for="message">メッセージ *</label>
    <textarea id="message" name="message"
              rows="5" required></textarea>
  </div>

  <!-- チェックボックス -->
  <div>
    <label>
      <input type="checkbox" name="newsletter">
      ニュースレターを受け取る
    </label>
  </div>

  <button type="submit">送信</button>
</form>
プレビュー

まとめ

覚えておくこと

  • • formで全体を囲む
  • • labelとinputはfor/idで紐づけ
  • • typeで入力の種類を指定
  • • requiredで必須入力に

よく使うtype

  • • text, email, password
  • • checkbox, radio
  • • number, date
  • • submit(送信ボタン)