5日目のゴール
5日目のテーマは
「イベントと id を、“バラバラのテクニック”から“自分で設計できるパターン”にすること」 です。
ここまでであなたは、
id でボタンをつかまえる
click イベントを登録する
押された回数を数える
メッセージを切り替える
といったことを、もう何度も書いてきました。
今日はそれを「型」として整理して、
どんなボタンでも同じ考え方で設計できる状態を目指します。
ボタン+メッセージの「基本パターン」を言語化する
1ボタン1メッセージの型
まずは、いちばん基本の形を“型”としてはっきりさせます。
<button id="helloButton">あいさつ</button>
<p id="message">まだ何も起きていません</p>
<script src="app.js"></script>
const helloButton = document.getElementById("helloButton");
const message = document.getElementById("message");
helloButton.addEventListener("click", function () {
message.textContent = "こんにちは!";
});
JavaScriptこれを日本語で分解すると、こうなります。
HTML で「ボタン」と「表示する場所」に id をつける
JavaScript で、その二つを getElementById でつかまえる
ボタンに click イベントを登録し、その中で表示用の要素を書き換える
この「3ステップ」が、
ボタン+メッセージ系の UI の基本パターンです。
ここまでを、コードを見ずに言葉で説明できるかどうかが、5日目のスタートラインです。
「ボタンの数が増えても同じ型」で考える
3つのボタンでメッセージを切り替える
今度はボタンを 3 つに増やしますが、やることは同じです。
<button id="yesButton">はい</button>
<button id="noButton">いいえ</button>
<button id="maybeButton">どちらとも言えない</button>
<p id="answerMessage">まだ選ばれていません</p>
<script src="app.js"></script>
const yesButton = document.getElementById("yesButton");
const noButton = document.getElementById("noButton");
const maybeButton = document.getElementById("maybeButton");
const answerMessage = document.getElementById("answerMessage");
yesButton.addEventListener("click", function () {
answerMessage.textContent = "あなたの答え:はい";
});
noButton.addEventListener("click", function () {
answerMessage.textContent = "あなたの答え:いいえ";
});
maybeButton.addEventListener("click", function () {
answerMessage.textContent = "あなたの答え:どちらとも言えない";
});
JavaScriptここで意識してほしいのは、「型は変わっていない」ということです。
ボタンに id をつける
表示場所に id をつける
それぞれを getElementById でつかまえる
ボタンごとに click イベントを登録し、メッセージを書き換える
ボタンが 1 個でも 3 個でも、
やっていることはまったく同じです。
「状態を持つボタン」をもう一度、設計目線で見る
ミュートボタン風の ON/OFF
次は、「ミュート/ミュート解除」みたいなボタンを考えます。
<button id="muteButton">ミュートする</button>
<p id="muteStatus">現在:ミュートではありません</p>
<script src="app.js"></script>
const muteButton = document.getElementById("muteButton");
const muteStatus = document.getElementById("muteStatus");
let isMuted = false;
muteButton.addEventListener("click", function () {
if (isMuted) {
isMuted = false;
muteButton.textContent = "ミュートする";
muteStatus.textContent = "現在:ミュートではありません";
} else {
isMuted = true;
muteButton.textContent = "ミュート解除";
muteStatus.textContent = "現在:ミュート中";
}
});
JavaScriptここで深掘りしたいのは、「どこに何の役割を持たせているか」です。
isMuted という変数が「本当の状態」を覚えている
muteButton.textContent は「ボタンの見た目」を変えている
muteStatus.textContent は「状態の説明」を変えている
イベントの中でやっていることは、
「状態を反転させる」+「見た目を状態に合わせる」
この 2 つだけです。
この分解ができると、
「押すたびに変わるボタン」を自分で設計できるようになります。
「押された回数」と「最後に押したボタン」を両方覚える
ちょっとだけ情報量を増やしてみる
次は、「どのボタンを何回押したか」を扱ってみます。
<button id="goodButton">いいね</button>
<button id="badButton">よくないね</button>
<p id="lastMessage">最後の評価:まだありません</p>
<p id="countMessage">合計 0 回押されました</p>
<script src="app.js"></script>
const goodButton = document.getElementById("goodButton");
const badButton = document.getElementById("badButton");
const lastMessage = document.getElementById("lastMessage");
const countMessage = document.getElementById("countMessage");
let totalCount = 0;
function updateCount() {
countMessage.textContent = "合計 " + totalCount + " 回押されました";
}
goodButton.addEventListener("click", function () {
totalCount = totalCount + 1;
lastMessage.textContent = "最後の評価:いいね";
updateCount();
});
badButton.addEventListener("click", function () {
totalCount = totalCount + 1;
lastMessage.textContent = "最後の評価:よくないね";
updateCount();
});
JavaScriptここで重要なのは、「何をどこに覚えさせているか」です。
totalCount は「押された回数」という状態
lastMessage は「最後に押したボタンの種類」
countMessage は「状態を人間向けの文章にしたもの」
イベントの中では、
状態を更新する(totalCount を増やす)
状態に応じて表示を更新する(lastMessage, countMessage)
という流れになっています。
「状態」と「表示」を分けて考える癖がつくと、
アプリが複雑になっても整理しやすくなります。
「イベントの登録部分」と「処理の中身」をきれいに分ける
5日目で一度、ちゃんと整理して書いてみる
ここまでの考え方を使って、
ボタン 3 つ+メッセージ 1 つを、少し“設計っぽく”書いてみます。
<button id="smallButton">小</button>
<button id="mediumButton">中</button>
<button id="largeButton">大</button>
<p id="sizeMessage">サイズは未選択です</p>
<script src="app.js"></script>
const smallButton = document.getElementById("smallButton");
const mediumButton = document.getElementById("mediumButton");
const largeButton = document.getElementById("largeButton");
const sizeMessage = document.getElementById("sizeMessage");
function setSize(sizeText) {
sizeMessage.textContent = "選択されたサイズ:" + sizeText;
}
function onSmallClick() {
setSize("小");
}
function onMediumClick() {
setSize("中");
}
function onLargeClick() {
setSize("大");
}
smallButton.addEventListener("click", onSmallClick);
mediumButton.addEventListener("click", onMediumClick);
largeButton.addEventListener("click", onLargeClick);
JavaScriptここで注目してほしいのは、「どこを見れば何が分かるか」です。
上のほう(addEventListener の部分)を見ると、
「どのボタンが、どの処理につながっているか」が一目で分かる
下のほう(関数の中身)を見ると、
「サイズをどう表示しているか」が分かる
イベント登録部分は「配線図」、
関数の中身は「機械の中身」
というイメージで分けておくと、読みやすさが一気に変わります。
5日目のまとめ 「ボタンの動きを自分で設計できる」
今日つかんでほしいのは、次の感覚です。
id は HTML のラベルで、getElementById で「リモコン」を手に入れる
イベントは「きっかけ」で、その中で「状態の更新」と「表示の更新」を行う
状態(変数)と表示(textContent)を分けて考えると、頭の中が整理される
ボタンが何個あっても、「id → 取得 → click 登録」の型は変わらない
イベント登録部分と処理の中身を関数で分けると、「配線図」と「中身」が見やすくなる
ここまで来たあなたは、
「ボタンを押すと何かが起きる」を“なんとなく”ではなく、
「こういう型で設計する」と言葉にできるレベル にいます。
この土台の上に、
次は「文字の書き換え」「入力の取得」「条件分岐」「カウンター」などを
少しずつ積み上げていけば、もう立派なミニアプリが作れます。

