コース一覧
JavaScriptでWebページを動かす
DOM とは何か

JavaScriptでWebページを動かす

DOM から要素を取得・更新・追加し、クリック・入力・フォーム送信に反応する処理を作る全 20 レッスン(411 分)のコースです。タイマーと localStorage も使い、最後は入力を保存できるひとことメモを仕上げます。用意された HTML/CSS を使うため、学習の中心は JavaScript です。

1
DOM のきほん
0. DOM とは何か15分
1. 要素を取得する20分
2. テキストを書き換える20分
3. class を付け外しする20分
4. 要素を作って追加する20分
5. 配列から一覧を描画する25分
6. つくる ギャラリーをデータ駆動にする30分
7. 第1章まとめクイズ10分
2
イベント処理
0. クリックに反応する18分
1. event オブジェクト20分
2. 入力欄の値を取る18分
3. フォーム送信を制御する20分
4. つくる ダークモード切替25分
5. つくる フォームの入力チェック25分
6. 第2章まとめクイズ10分
3
タイマーと総合制作
0. setTimeout と setInterval20分
1. localStorage で保存する20分
2. つくる ひとことメモウィジェット30分
3. 自由拡張30分
4. 完成と次のステップ15分

JavaScriptでWebページを動かす

01DOM とは何か
02要素を取得する
03テキストを書き換える
04class を付け外しする
05要素を作って追加する
06配列から一覧を描画する
07つくる ギャラリーをデータ駆動にする
08第1章まとめクイズ
09クリックに反応する
10event オブジェクト
11入力欄の値を取る
12フォーム送信を制御する
13つくる ダークモード切替
14つくる フォームの入力チェック
15第2章まとめクイズ
16setTimeout と setInterval
17localStorage で保存する
18つくる ひとことメモウィジェット
19自由拡張
20完成と次のステップ

JavaScriptでWebページを動かす

DOM とは何か

解説

このレッスンで分かること

  • ブラウザは HTML の文字列をオブジェクトの木に組み直してから、画面を描いています
  • JavaScript が書きかえるのはその木であって、HTML ファイルではありません

コンソールにしか結果を出せなかった

ここまで書いてきた JavaScript は、文字と数と配列とオブジェクトを組み立てるだけのものでした。結果は console.log でコンソールに並びます。ページを開いた人には何も見えません。

第8章からは違います。書いた JavaScript が、目の前のページそのものを書きかえます。肩書きの文字が変わり、作品カードが増え、枠の色が変わります。そのために最初に知っておきたいのが「JavaScript から HTML がどう見えているのか」です。ここを飛ばして書き方だけ覚えると、うまく動かないときに何を疑えばよいのか分からなくなります。

ブラウザは HTML を文字のまま持っていない

ブラウザがサーバーから受け取るのは、ただの長い文字列です。

JavaScript

'<h1>山田 太郎</h1><p class="tagline">Web エンジニアを目指しています</p>'

ブラウザはこれを先頭から読み、タグの開きと閉じを見て、どれが誰の中に入っているかを組み立てます。この作業をパースと呼び、できあがったものが DOM です。Document Object Model の頭文字で、日本語にすると「書類をオブジェクトとして表したもの」になります。

diagram (will load when visible)

大事なのは矢印の向きです。画面は DOM から描かれ、JavaScript が触るのも DOM です。だから JavaScript が DOM を変えれば、画面もそれに合わせて描き直されます。

DOM は入れ子のとおりに親と子の関係を持ちます。プロフィールサイトの上のほうを字下げで表すと、次のような形です。

プレーンテキスト

document └ html ├ head └ body ├ header.site-header │ ├ h1 │ ├ p.tagline │ └ nav.site-nav └ main.site-main

木の一つひとつの節をノードと呼びます。いちばん上にいるのが document で、ページ 1 枚ぶん全体を表します。ブラウザがあらかじめ用意しているので、console.log と同じで、書けばそこにあります。タグ 1 つぶんの要素ノードは、第7章で書いたオブジェクトとよく似ています。プロパティを持っていて、ドットでつなげば読み書きできます。違うのは、値を書きかえた瞬間にブラウザが画面を描き直してくれるところです。つまり、これまで練習してきたオブジェクトの読み書きが、そのまま画面の操作になります。

書きかえたのに、再読み込みで元に戻る

JavaScript が DOM を変えても、index.html の中身は 1 文字も変わりません。ページを読み込み直せば、元の HTML から DOM が組み直され、変えたぶんは消えます。ここを取り違えると「動いたはずなのに残らない」と悩むことになります。

この違いは、検証ツールで実物を見るといちばん早く飲み込めます。手順は次のとおりです。

  1. プロフィールサイトをブラウザで開き、どこかを右クリックして「検証」を選ぶ (Mac は Command + Option + I、Windows は F12 でも開きます)
  2. Elements タブを開き、<body> の左にある三角形をクリックして中を開く
  3. <header class="site-header"> を開き、<h1> と <p class="tagline"> が並んでいるのを確かめる
  4. <h1> の行にマウスを乗せると、画面の名前の部分が青く光る。木の 1 行が画面のどこなのかが分かる
  5. #works の中の <div class="work-list"> を開き、<article class="work-card"> が 3 つ並んでいるのを数える

この 3 枚のカードが、これから JavaScript で増やしたり作り直したりする相手です。

解説

Elements タブの上では、タグや文字をその場で書きかえられます。書きかえると画面がすぐ変わります。これは手で DOM を触っているのと同じことで、再読み込みすれば元に戻るので、こわがらずに試して大丈夫です。

よくある間違い

  • ソース表示と Elements タブを同じものだと思う — 「ページのソースを表示」に出るのは、サーバーから届いた元の HTML です。JavaScript で足した要素はそこに出てきません。動いているかどうかは、必ず Elements タブのほうで確かめます
  • document を自分でつくる — const document = {}; と書くと、ブラウザが用意したものを上書きしてしまい、以降の操作が全部おかしくなります。window や history も同じ理由で、自分の変数名には使いません

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • ブラウザユーザーから見たWebのクライアント
  • HTMLHyperText Markup Languageの略。
  • オブジェクトキーと値のペアで構造を作るデータ
  • JavaScriptWeb で動的な振る舞いを担う言語
  • 配列サイズ固定の同型データの集まり
  • サーバークライアント(ブラウザなど)がリクエストを送り、サーバーがレスポンスを返す。
  • DOMHTML を JS から触るためのツリー構造
  • プロパティメソッドを属性のようにアクセスできるようにするデコレータ。
生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/08/05·更新 2026/08/26

関連レッスン

  • 要素を取得する

    querySelector と querySelectorAll で、DOM からほしい要素を掴みます。CSS で書いてきたセレクタがそのまま使えます。

  • テキストを書き換える

    textContent で表示されている文字を差し替えます。innerHTML との違いと、外から来た文字列を入れる危なさもここで押さえます。

  • class を付け外しする

    classList の add と remove と toggle と contains で、CSS に用意した見た目を付け外しします。作品カードを 1 枚だけ強調します。

  • 要素を作って追加する

    createElement で新しい要素をつくり、append で DOM の木に足します。HTML に書いていない作品カードが 1 枚増えます。

分からないところは Tap (AI先生) に質問できます

24 時間いつでも、あなたのレベルに合わせて日本語で答えます。

復習ミニクイズ

ブラウザで JavaScript が `document.querySelector("h1").textContent = "変更"` を実行しました。このあと「ページのソースを表示」で見える HTML はどうなっていますか