JavaScript | 1 日 90 分 × 7 日アプリ学習:タブ切り替えアプリ(初級編)

JavaScript
スポンサーリンク

6日目のゴールと今日やること

引用元は。なし(本教材はオリジナル解説です)

6日目のテーマは
「タブ切り替えアプリを“データで管理できるアプリ”に進化させる」
ことです。

1〜5日目であなたは、

  • class の付け替えで UI を切り替える
  • active クラスで表示・非表示を管理する
  • 今アクティブなタブだけを外す効率的な方法
  • 関数化でコードを整理する
  • イベント委譲でタブ追加に強い構造を作る

ここまで理解できています。

6日目はここに、

  • タブとページを「データ構造」で管理する
  • JavaScript でタブを動的に生成する
  • 複数画面を“コードだけで増やせる”仕組みを作る
  • アクティブ管理をより抽象化する

という、“アプリとしての拡張性”を加えていきます。


タブ切り替えアプリを「データで管理する」発想

HTML にタブを書き続けるのは限界がある

これまでのタブは、HTML にこう書いていました。

<div class="tab" data-target="page1">タブ1</div>

タブが3つならいいですが、
10個、20個と増えると管理が大変です。

そこで登場するのが
「データ構造でタブを管理する」
という考え方です。


タブ情報を「配列」で持つ

まずはタブの情報を JavaScript に書く

const tabData = [
  { id: "page1", label: "タブ1" },
  { id: "page2", label: "タブ2" },
  { id: "page3", label: "タブ3" }
];
JavaScript

ここで重要なのは、

  • id → 対応するページの ID
  • label → タブに表示する文字

という構造になっていることです。

深掘り:データ構造で管理するメリット

  • タブを増やすとき HTML を触らなくていい
  • データを変更するだけで UI が変わる
  • コードの再利用性が高まる
  • 大規模アプリの基本構造に近づく

UI を「データで管理する」発想は、
React や Vue などのフレームワークにも通じる重要な考え方です。


タブとページを「JavaScript で自動生成」する

HTML を最小限にする

HTML は空のコンテナだけにします。

<div class="tabs"></div>
<div class="pages"></div>

JavaScript でタブを生成する

const tabsContainer = document.querySelector(".tabs");

tabData.forEach(item => {
  const tab = document.createElement("div");
  tab.classList.add("tab");
  tab.dataset.target = item.id;
  tab.textContent = item.label;
  tabsContainer.appendChild(tab);
});
JavaScript

ページも生成する

const pagesContainer = document.querySelector(".pages");

tabData.forEach(item => {
  const page = document.createElement("div");
  page.classList.add("page");
  page.id = item.id;
  page.textContent = `${item.label} の内容です`;
  pagesContainer.appendChild(page);
});
JavaScript

深掘り:createElement の重要性

document.createElement()
「JavaScript で HTML を作る」ための基本技術です。

これを使えるようになると、

  • タブ
  • ページ
  • リスト
  • カード
  • モーダル

など、あらゆる UI を動的に生成できます。


アクティブ管理を「データに基づいて」行う

初期状態を設定する

最初のタブをアクティブにします。

document.querySelector(".tab").classList.add("active");
document.querySelector(".page").classList.add("active");
JavaScript

イベント委譲で切り替え

tabsContainer.addEventListener("click", (e) => {
  const clickedTab = e.target.closest(".tab");
  if (!clickedTab) return;

  switchPage(clickedTab);
});
JavaScript

switchPage は昨日の関数をそのまま使える

function switchPage(tab) {
  const targetId = tab.dataset.target;

  clearActive();
  setActive(tab, targetId);
}
JavaScript

6日目の完成コード(動的生成+データ管理)

JavaScript

const tabData = [
  { id: "page1", label: "タブ1" },
  { id: "page2", label: "タブ2" },
  { id: "page3", label: "タブ3" }
];

const tabsContainer = document.querySelector(".tabs");
const pagesContainer = document.querySelector(".pages");

// タブ生成
tabData.forEach(item => {
  const tab = document.createElement("div");
  tab.classList.add("tab");
  tab.dataset.target = item.id;
  tab.textContent = item.label;
  tabsContainer.appendChild(tab);
});

// ページ生成
tabData.forEach(item => {
  const page = document.createElement("div");
  page.classList.add("page");
  page.id = item.id;
  page.textContent = `${item.label} の内容です`;
  pagesContainer.appendChild(page);
});

// 初期アクティブ
document.querySelector(".tab").classList.add("active");
document.querySelector(".page").classList.add("active");

// イベント委譲
tabsContainer.addEventListener("click", (e) => {
  const clickedTab = e.target.closest(".tab");
  if (!clickedTab) return;

  switchPage(clickedTab);
});

function clearActive() {
  const currentTab = document.querySelector(".tab.active");
  const currentPage = document.querySelector(".page.active");

  if (currentTab) currentTab.classList.remove("active");
  if (currentPage) currentPage.classList.remove("active");
}

function setActive(tab, pageId) {
  tab.classList.add("active");
  const page = document.getElementById(pageId);
  if (page) page.classList.add("active");
}

function switchPage(tab) {
  const targetId = tab.dataset.target;

  clearActive();
  setActive(tab, targetId);
}
JavaScript

今日いちばん深く理解してほしいこと

UI を「データで管理する」発想がアプリ開発の本質

タブ切り替えアプリは、
データ構造(配列)を使うことで、

  • タブ追加が簡単
  • コードが短くなる
  • HTML を汚さない
  • 拡張性が高い

という“アプリらしい構造”になります。

これは、
React / Vue / Svelte などの
モダンフロントエンドの基礎そのものです。

JavaScript で HTML を生成できると世界が広がる

createElement
appendChild
dataset
classList

これらを使いこなせると、
あなたはもう「UI を自分で作れる人」です。


7日目へのつなぎ

7日目は最終日。

  • コード全体を整理して「自分の言葉で説明できる」ようにする
  • コメントをつけて「他人に渡せるコード」にする
  • 自分なりのアレンジ(アイコン、アニメーション、テーマカラー)を追加する

という、“作品として仕上げる”段階に入ります。

ここまで来たあなたは、
もう立派に「UI アプリを作れる人」です。

タイトルとURLをコピーしました