2日目のゴールと今日やること
引用元は。なし(本教材はオリジナル解説です)
2日目のテーマは
「タブ切り替えアプリを“よりアプリらしく”するための基礎強化」
です。
1日目であなたは、
- class の付け替えで見た目を変える
- active クラスで表示・非表示を切り替える
- タブとページを連動させる
という“タブ切り替えの心臓部”を理解しました。
2日目はここに、
- class 操作をより深く理解する
- 表示切替の仕組みを整理する
- 複数画面を扱うときの「管理の考え方」を学ぶ
- アクティブ状態をより安全に扱う
という、アプリとしての“安定性”と“拡張性”を加えていきます。
class 操作をもっと深く理解する
classList は「見た目のスイッチ集」
1日目では classList.add() と classList.remove() を使いました。
今日はさらに、
「classList が何をしているのか」 を深掘りします。
HTML の class は、
「この要素はこういう見た目にするよ」という“ラベル”です。
<div class="tab active">タブ1</div>
この要素は、
- tab という基本デザイン
- active という「選択中デザイン」
の2つを持っています。
JavaScript で class を操作すると、
このラベルを付けたり外したりできます。
classList の主な操作
element.classList.add("active"); // active を追加
element.classList.remove("active"); // active を削除
element.classList.toggle("active"); // active の ON/OFF を切り替え
element.classList.contains("active"); // active を持っているか確認
JavaScript深掘り:toggle が便利な場面
toggle は「ついていなければ付ける、ついていれば外す」という動作です。
例えば、
メニューの開閉やアコーディオン UI などでよく使います。
ただし、タブ切り替えでは
「必ず1つだけ active にする」
というルールがあるため、toggle より add/remove の方が安全です。
表示切替の仕組みを整理する
active クラスが「表示の鍵」になっている
CSS ではこう書いていました。
.page {
display: none;
}
.page.active {
display: block;
}
つまり、
- page だけ → 非表示
- page active → 表示
というルールです。
JavaScript がやっているのは、
「どのページに active をつけるか」 を決めているだけ。
表示切替の本体は CSS です。
深掘り:CSS と JS の役割分担
- CSS → 見た目のルール
- JS → どのルールを適用するか決める
この分担を理解すると、
UI アプリがどう動いているかが一気に分かります。
複数画面を扱うときの「管理の考え方」
すべてのタブとページを“配列として扱う”
1日目ではこう書きました。
const tabs = document.querySelectorAll(".tab");
const pages = document.querySelectorAll(".page");
JavaScriptこれは、
- タブをまとめて扱う
- ページをまとめて扱う
という意味です。
タブが3つでも10個でも、
この書き方なら全部まとめて処理できます。
深掘り:配列として扱うメリット
- タブが増えてもコードを変えなくていい
- ループで一括処理できる
- 管理がシンプルになる
UI アプリでは、
「複数の要素をまとめて扱う」ことがとても重要です。
アクティブ管理をより安全にする
1日目の切り替え処理を振り返る
tabs.forEach(t => t.classList.remove("active"));
pages.forEach(p => p.classList.remove("active"));
clickedTab.classList.add("active");
document.getElementById(targetId).classList.add("active");
JavaScriptこれは正しいのですが、
2日目では「なぜこの順番なのか」を理解しましょう。
深掘り:なぜ“全部外してから付ける”のか?
タブ切り替えでは、
- active が複数ついてはいけない
- active がゼロでもいけない
というルールがあります。
だから、
- まず全部外す(リセット)
- 必要なものだけ付ける(セット)
という順番が安全です。
toggle を使うと、
「複数 active がつく」「active が消える」などの事故が起きます。
2日目の改良版 switchPage を作る
より読みやすく、安全な書き方
function switchPage(targetId, clickedTab) {
// すべてのタブから active を外す
tabs.forEach(tab => {
tab.classList.remove("active");
});
// すべてのページから active を外す
pages.forEach(page => {
page.classList.remove("active");
});
// クリックされたタブに active を付ける
clickedTab.classList.add("active");
// 対応するページに active を付ける
const targetPage = document.getElementById(targetId);
targetPage.classList.add("active");
}
JavaScript深掘り:変数名を丁寧にする理由
- tab
- page
- targetPage
のように、
「何を表しているか」が分かる名前にすると、
コードが読みやすくなります。
プログラミングは「書く」より「読む」時間の方が長いので、
読みやすさはとても大事です。
2日目のミニ完成版コード
HTML(1日目と同じ)
<div class="tabs">
<div class="tab active" data-target="page1">タブ1</div>
<div class="tab" data-target="page2">タブ2</div>
<div class="tab" data-target="page3">タブ3</div>
</div>
<div class="pages">
<div id="page1" class="page active">ページ1の内容</div>
<div id="page2" class="page">ページ2の内容</div>
<div id="page3" class="page">ページ3の内容</div>
</div>
CSS(1日目と同じ)
.tab {
padding: 10px;
cursor: pointer;
display: inline-block;
}
.active {
background-color: #4caf50;
color: white;
}
.page {
display: none;
padding: 20px;
border: 1px solid #ccc;
}
.page.active {
display: block;
}
JavaScript(改良版)
const tabs = document.querySelectorAll(".tab");
const pages = document.querySelectorAll(".page");
tabs.forEach(tab => {
tab.addEventListener("click", () => {
const targetId = tab.dataset.target;
switchPage(targetId, tab);
});
});
function switchPage(targetId, clickedTab) {
tabs.forEach(tab => tab.classList.remove("active"));
pages.forEach(page => page.classList.remove("active"));
clickedTab.classList.add("active");
const targetPage = document.getElementById(targetId);
targetPage.classList.add("active");
}
JavaScript今日いちばん深く理解してほしいこと
class 操作は UI の“言語”
タブ切り替え
モーダル表示
アコーディオン
ドロップダウンメニュー
これらはすべて、
「class を付ける → 見た目が変わる」
という仕組みで動いています。
classList を理解することは、
UI を作るための“基礎言語”を覚えることと同じです。
複数画面は「配列として扱う」
タブやページをまとめて扱うことで、
- 数が増えてもコードを変えなくていい
- 一括処理ができる
- 管理がシンプルになる
というメリットがあります。
3日目へのつなぎ
3日目からは、
- タブのデザインをもっとアプリっぽくする
- アニメーションをつける
- タブの数が増えても自動で動くようにする
- コードを関数化してさらに読みやすくする
という、“アプリとしての完成度”を上げる段階に入ります。
今日の内容は、
タブ切り替えアプリの「安定性と拡張性」を支える基礎です。
ここまで理解できたあなたなら、
もう UI アプリの設計者としての一歩を踏み出しています。


