発展HTML

前の資料では、HTMLの基本的なタグを使ってWebページの骨組みを作る方法を学びましたね。今回は、さらに一歩進んで、Webページにもっと豊かな意味を持たせたり、インタラクティブな機能を追加したりするためのHTMLタグを見ていきましょう。

基本的なタグだけでもWebページは作れますが、これから紹介するタグを使いこなすことで、より構造が分かりやすく、ユーザーにとっても、検索エンジン(Googleなど)にとっても、そして開発者自身にとっても「良い」Webページを作ることができるようになります。

1. セマンティックタグ:意味のある構造を作る

HTML5から、ページの各部分が「何を表しているのか」をより明確に示すためのタグがたくさん導入されました。これらを セマンティックタグ と呼びます。「セマンティック」とは「意味の」という意味です。

以前学んだ <div> タグは、単なる「箱」でしかなく、それ自体に意味はありませんでした。セマンティックタグを使うことで、コンピューター(ブラウザや検索エンジン)も「ここがヘッダーだな」「ここがナビゲーションだな」と理解しやすくなります。

代表的なセマンティックタグを見てみましょう。

なぜセマンティックタグが重要?

  1. SEO (検索エンジン最適化) に有利: Googleなどの検索エンジンは、これらのタグを見てページの内容や構造をより正確に理解し、検索結果のランキングに役立てます。
  2. アクセシビリティ向上: スクリーンリーダー(視覚障碍者がWebページを読むためのソフト)などが、ページの構造を理解しやすくなり、より多くの人が情報にアクセスしやすくなります。
  3. コードの可読性向上: <div> だらけのコードよりも、<header>, <nav>, <main> などが使われている方が、開発者自身も後からコードを読んだときに構造を把握しやすくなります。

開発者の視点: 最初は <div> とどう使い分けるか迷うかもしれませんが、「この部分は何のためのエリアか?」を考えて、適切なセマンティックタグを選ぶ癖をつけると良いでしょう。完璧を目指す必要はありませんが、意識することが大切です。

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8" />
    <title>セマンティックなページ</title>
    <style>
      ul {
        list-style: none;
      }
      nav li {
        display: inline;
      }
      nav a{
        display: inline-block;
      }
      article {
        float: left;
        width: 68%;
      }
      aside {
        float: right;
        width: 28%;
      }
      footer {
        text-align: center;
        clear: both;
      }
    </style>
  </head>
  <body>
    <header>
      <h1>サイトタイトル</h1>
      <nav>
        <ul>
          <li><a href="/">ホーム</a></li>
          <li><a href="/about">概要</a></li>
          <li><a href="/contact">お問い合わせ</a></li>
        </ul>
      </nav>
    </header>

    <main>
      <article>
        <h2>記事タイトル</h2>
        <p>記事の本文です。...</p>
        <section>
          <h3>セクション1</h3>
          <p>セクション1の内容です。...</p>
        </section>
        <section>
          <h3>セクション2</h3>
          <p>セクション2の内容です。...</p>
        </section>
      </article>

      <aside>
        <h3>関連リンク</h3>
        <ul>
          <li><a href="#">関連情報1</a></li>
          <li><a href="#">関連情報2</a></li>
        </ul>
      </aside>
    </main>

    <footer>
      <p>&copy; 2025 サイト名</p>
    </footer>
  </body>
</html>

2. フォーム要素の発展:もっとインタラクティブに

基本的な <form>, <input type="text">, <input type="submit"> は前の資料で見ましたが、HTMLにはもっと多様な入力形式や便利なフォーム関連タグがあります。

<input> の様々な type 属性

<input> タグは type 属性を変えるだけで、色々な入力欄を作れます。

<form>
  <label for="email">メール:</label>
  <input type="email" id="email" name="user_email"><br>

  <label for="pass">パスワード:</label>
  <input type="password" id="pass" name="user_password"><br>

  <label for="num">数量:</label>
  <input type="number" id="num" name="quantity" min="1" max="10"><br> <!-- min/maxで範囲指定 -->

  <label for="bday">誕生日:</label>
  <input type="date" id="bday" name="birthday"><br>

  <label for="favcolor">好きな色:</label>
  <input type="color" id="favcolor" name="favorite_color"><br>

  <label for="vol">音量:</label>
  <input type="range" id="vol" name="volume" min="0" max="100"><br> <!-- min/maxで範囲指定 -->

  <p>興味のある分野 (複数選択可):</p>
  <input type="checkbox" id="tech" name="interest" value="technology">
  <label for="tech">技術</label><br>
  <input type="checkbox" id="art" name="interest" value="art">
  <label for="art">芸術</label><br>

  <p>好きな季節 (一つ選択):</p>
  <input type="radio" id="spring" name="season" value="spring">
  <label for="spring">春</label><br>
  <input type="radio" id="summer" name="season" value="summer">
  <label for="summer">夏</label><br>

  <label for="profile_pic">写真:</label>
  <input type="file" id="profile_pic" name="profile_picture"><br>

  <input type="submit" value="送信">
</form>

その他のフォーム関連タグ

<form>
  <fieldset>
    <legend>個人情報</legend>
    <label for="name">名前:</label>
    <input type="text" id="name" name="user_name"><br>

    <label for="message">メッセージ:</label><br>
    <textarea id="message" name="user_message" rows="4" cols="50"></textarea><br>
  </fieldset>

  <fieldset>
    <legend>その他</legend>
    <label for="country">国:</label>
    <select id="country" name="user_country">
      <option value="">選択してください</option>
      <optgroup label="アジア">
        <option value="jp">日本</option>
        <option value="kr">韓国</option>
      </optgroup>
      <optgroup label="ヨーロッパ">
        <option value="fr">フランス</option>
        <option value="de">ドイツ</option>
      </optgroup>
    </select><br>

    <label for="browser">よく使うブラウザ:</label>
    <input list="browsers" id="browser" name="user_browser">
    <datalist id="browsers">
      <option value="Chrome">
      <option value="Firefox">
      <option value="Safari">
      <option value="Edge">
    </datalist><br>
  </fieldset>

  <input type="submit" value="登録">
</form>

フォームバリデーション属性

HTMLだけで簡単な入力チェック(バリデーション)を行うための属性もあります。

<form>
  <label for="username">ユーザー名 (必須, 5文字以上):</label>
  <input type="text" id="username" name="username" required minlength="5"><br>

  <label for="postal_code">郵便番号 (例: 123-4567):</label>
  <input type="text" id="postal_code" name="postal_code" pattern="\d{3}-\d{4}" placeholder="123-4567"><br>

  <input type="submit" value="送信">
</form>

開発者の視点: HTMLのバリデーションは手軽ですが、あくまで補助的なものです。悪意のあるユーザーはこれを簡単に回避できてしまうため、サーバー側でのしっかりとしたバリデーションは別途必須 です。フロントエンド(HTML/JavaScript)のバリデーションは、ユーザーの入力ミスを減らし、使い勝手を良くするためのものと考えましょう。

3. メディア要素:動画と音声の埋め込み

HTML5では、プラグイン(昔はFlashなどが使われていました)なしで動画や音声をWebページに埋め込めるようになりました。

<video> タグ

動画ファイルを埋め込みます。

<!-- コントロール表示あり -->
<video src="movie.mp4" controls width="640" height="360" poster="thumbnail.jpg"></video>

<!-- 自動再生 (ミュート必須の場合が多い), ループ -->
<video src="background.mp4" autoplay muted loop width="100%"></video>

<audio> タグ

音声ファイルを埋め込みます。属性は <video> と似ています。

<!-- コントロール表示あり -->
<audio src="music.mp3" controls></audio>

<!-- 自動再生 (非推奨), ループ -->
<audio src="bgm.ogg" autoplay loop></audio>

<source> タグ

異なるブラウザが対応している動画/音声フォーマットは様々です。<source> タグを使うと、複数のフォーマットのファイルを用意しておき、ブラウザが再生可能なものを自動で選択させることができます。<video> または <audio> タグの中に入れます。

<video controls width="640" height="360" poster="thumbnail.jpg">
  <source src="movie.webm" type="video/webm">
  <source src="movie.mp4" type="video/mp4">
  <!-- 対応ブラウザがない場合のメッセージ -->
  お使いのブラウザは動画再生に対応していません。
</video>

<audio controls>
  <source src="music.opus" type="audio/opus">
  <source src="music.mp3" type="audio/mpeg">
  お使いのブラウザは音声再生に対応していません。
</audio>

<track> タグ

動画や音声に、字幕、キャプション、説明などを追加するためのタグです。Web VTT (.vtt) という形式のファイルでテキストと表示タイミングを指定します。アクセシビリティ向上のために重要です。

<video src="lecture.mp4" controls>
  <track kind="subtitles" src="subtitles_ja.vtt" srclang="ja" label="日本語字幕" default>
  <track kind="captions" src="captions_en.vtt" srclang="en" label="English Captions">
</video>

4. その他の便利なタグ

他にも、特定の目的で役立つタグがあります。

<details><summary>

クリックすると詳細が表示/非表示される、アコーディオンのようなUI(ユーザーインターフェース)を簡単に作れます。<summary> が常に表示されるタイトル部分、<details> の中の <summary> 以外の部分が詳細コンテンツになります。

<details>
  <summary>もっと詳しく見る</summary>
  <p>ここが詳細な内容です。画像やリストなども入れられます。</p>
  <ul>
    <li>項目1</li>
    <li>項目2</li>
  </ul>
</details>

<iframe>

インラインフレーム (Inline Frame) の略で、現在のHTMLページの中に、別のHTMLページを埋め込むことができます。Google マップや YouTube 動画の埋め込みによく使われます。

<!-- Google マップの埋め込み例 -->
<iframe
  src="https://www.google.com/maps/embed?pb=!1m18!1m12!..."
  width="600"
  height="450"
  style="border:0;"
  allowfullscreen=""
  loading="lazy"
  referrerpolicy="no-referrer-when-downgrade">
</iframe>

<!-- YouTube 動画の埋め込み例 -->
<iframe
  width="560"
  height="315"
  src="https://www.youtube.com/embed/VIDEO_ID"
  title="YouTube video player"
  frameborder="0"
  allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
  allowfullscreen>
</iframe>

開発者の視点: <iframe> は便利ですが、セキュリティリスク(クリックジャッキングなど)や、ページの読み込み速度に影響を与える可能性もあります。むやみに使わず、信頼できるコンテンツの埋め込みに限定しましょう。sandbox 属性や allow 属性で、埋め込みコンテンツができることを制限することも検討しましょう。

<figure><figcaption>

図版(画像、図、コード片など)とそのキャプション(説明文)をセットで示すためのタグです。<figure> で図版全体を囲み、<figcaption> でキャプションを記述します。

<figure>
  <img src="chart.png" alt="売上推移グラフ">
  <figcaption>図1: 最近の売上推移を示すグラフ</figcaption>
</figure>

<figure>
  <pre><code>function hello() {
  console.log("Hello, world!");
}</code></pre>
  <figcaption>コード例1: JavaScriptでの挨拶表示</figcaption>
</figure>

<canvas> (概要)

JavaScript と連携して、図形を描画したり、アニメーションを作成したりするための領域を提供します。ゲームやグラフィックツールなど、高度なグラフィック表現に使われますが、HTMLだけでは何も表示されず、JavaScriptでのプログラミングが必須になります。

<canvas id="myCanvas" width="200" height="100" style="border:1px solid #000;"></canvas>
<!-- この後、JavaScriptで描画処理を書く -->

5. まとめ:より豊かな表現力を持つHTMLへ

お疲れ様でした!今回は、基本的なHTMLに加えて、より発展的なタグを見てきました。

これらのタグを適切に使うことで、単なる情報の羅列ではなく、構造化され、意味を持ち、インタラクティブで、豊かな表現力を持つWebページを作成することができます。

もちろん、すべてを一度に覚える必要はありません。「こういうことができるんだな」と知っておき、実際にページを作る際に「あの機能を使いたいな」と思ったら、改めて調べ直してみる、という進め方で大丈夫です。

次の資料では、いよいよCSSの発展的な内容に入っていきます。より高度なセレクタや、Webページに動きや視覚効果を加える方法などを学んでいきましょう!