学習進捗 0%
JAVASCRIPT MASTER COURSE

JavaScriptを
ゼロから極める。

プログラミング未経験者でも始められるように、 基礎文法からDOM、非同期処理、API、Canvas、クラス、 モジュール、実践設計、ミニゲーム、最終制作まで順番に学ぶ 超実践型JavaScript講座。

28 LESSONS
100+ CODE EXAMPLES
∞ 実践して成長
LESSON 01

JavaScriptとは?

Webページに「動き」と「処理」を与えるプログラミング言語。

JavaScriptの役割

HTMLがWebページの「構造」、CSSが「見た目」なら、 JavaScriptは「動作・処理」を担当します。

技術 役割 例
HTML 構造 見出し、ボタン、画像
CSS デザイン 色、サイズ、レイアウト
JavaScript 動作 クリック、計算、通信

最初のJavaScript

hello.js
console.log("Hello, JavaScript!");

console.log()は値をコンソールへ表示します。 開発中の確認に非常によく使います。

▶ 実際に動かしてみよう
実行結果がここに表示されます。
LESSON 02

基本構文

コードを書くための最初のルールを理解しよう。

コメント

// これはコメントです

/*
  複数行コメントも書けます
*/

文

const message = "Hello";
console.log(message);

JavaScriptでは処理を上から順番に実行することが基本です。

💡 セミコロンは必要?

JavaScriptではセミコロンを省略できますが、 コードの意図を明確にするため、この講座では基本的に付けます。

LESSON 03

変数

データに名前を付けて保存する。

const

const name = "Taro";
const age = 20;

console.log(name);
console.log(age);

let

let score = 10;

score = 20;

console.log(score);

基本的には、再代入しない値には const、 再代入する値には let を使います。

Q. 再代入する必要がない変数に適しているのは?
LESSON 04

データ型

JavaScriptが扱うデータの種類。

代表的なデータ型

const text = "Hello";        // string
const number = 123;          // number
const flag = true;           // boolean
const nothing = null;        // null
let unknown;                 // undefined

const array = [1, 2, 3];     // Array
const object = { name:"Taro" }; // Object

typeof

console.log(typeof "Hello");
console.log(typeof 123);
console.log(typeof true);
LESSON 05

演算子

計算や比較、論理を扱う。

算術演算子

console.log(10 + 5);
console.log(10 - 5);
console.log(10 * 5);
console.log(10 / 5);
console.log(10 % 3);

比較演算子

console.log(10 > 5);
console.log(10 < 5);
console.log(10 === 10);
console.log(10 !== 5);

論理演算子

const age = 20;

console.log(age >= 18 && age <= 30);
console.log(age < 18 || age > 60);
console.log(!(age === 20));
LESSON 06

条件分岐

条件によって処理を変える。

if

const age = 20;

if (age >= 18) {
  console.log("成人です");
} else {
  console.log("未成年です");
}

else if

const score = 85;

if (score >= 90) {
  console.log("S");
} else if (score >= 80) {
  console.log("A");
} else if (score >= 70) {
  console.log("B");
} else {
  console.log("C");
}

三項演算子

const age = 20;

const result = age >= 18 ? "成人" : "未成年";

console.log(result);
LESSON 07

繰り返し

同じ処理を何度も実行する。

for

for (let i = 0; i < 5; i++) {
  console.log(i);
}

while

let count = 0;

while (count < 5) {
  console.log(count);
  count++;
}

for...of

const fruits = ["りんご", "バナナ", "みかん"];

for (const fruit of fruits) {
  console.log(fruit);
}
LESSON 08

関数

処理をまとめて再利用する。

基本的な関数

function greet(name) {
  return "こんにちは、" + name + "さん!";
}

console.log(greet("太郎"));

アロー関数

const add = (a, b) => {
  return a + b;
};

console.log(add(10, 20));

省略形

const double = n => n * 2;

console.log(double(5));
LESSON 09

配列

複数のデータをまとめて扱う。

const fruits = [
  "りんご",
  "バナナ",
  "みかん"
];

console.log(fruits[0]);
console.log(fruits.length);

追加

fruits.push("ぶどう");

削除

fruits.pop();

分割代入

const [first, second] = fruits;

console.log(first);
console.log(second);
LESSON 10

オブジェクト

関連するデータをひとつにまとめる。

const user = {
  name: "Taro",
  age: 20,
  city: "Tokyo"
};

console.log(user.name);
console.log(user.age);

プロパティの追加

user.job = "Engineer";

メソッド

const person = {
  name: "Taro",

  greet() {
    console.log("こんにちは!");
  }
};

person.greet();
LESSON 11

配列メソッド

配列を自在に操作する。

map

const numbers = [1, 2, 3];

const doubled = numbers.map(n => n * 2);

console.log(doubled);

filter

const numbers = [1, 2, 3, 4, 5];

const even = numbers.filter(n => n % 2 === 0);

console.log(even);

find

const users = [
  { name: "A", age: 15 },
  { name: "B", age: 22 }
];

const user = users.find(user => user.age >= 18);

console.log(user);

reduce

const numbers = [1, 2, 3, 4];

const total = numbers.reduce(
  (sum, number) => sum + number,
  0
);

console.log(total);
LESSON 12

DOM操作

HTMLをJavaScriptから操作する。

要素を取得する

const title = document.querySelector("h1");

文字を変更

title.textContent = "新しいタイトル";

クラスを操作

title.classList.add("active");
title.classList.remove("active");
title.classList.toggle("active");

HTMLを作る

const p = document.createElement("p");

p.textContent = "新しい文章です";

document.body.appendChild(p);
LESSON 13

イベント

クリックや入力などの操作を検知する。

const button = document.querySelector("#button");

button.addEventListener("click", () => {
  console.log("クリックされました!");
});

よく使うイベント

  • click
  • input
  • change
  • submit
  • keydown
  • keyup
  • mouseover
LESSON 14

フォーム

ユーザーからデータを受け取る。

form.addEventListener("submit", event => {
  event.preventDefault();

  const value = input.value;

  console.log(value);
});
event.preventDefault()

フォーム送信などのブラウザ標準動作を止めたい場合に使います。

LESSON 15

非同期処理

時間のかかる処理を扱う。

console.log("A");

setTimeout(() => {
  console.log("B");
}, 1000);

console.log("C");

出力は通常 A → C → B になります。 JavaScriptでは時間のかかる処理を待っている間にも、 別の処理を進められる仕組みがあります。

LESSON 16

Promise

非同期処理の結果を扱う。

const promise = new Promise((resolve, reject) => {

  const success = true;

  if (success) {
    resolve("成功しました");
  } else {
    reject("失敗しました");
  }

});

promise
  .then(result => {
    console.log(result);
  })
  .catch(error => {
    console.error(error);
  });
LESSON 17

async / await

非同期処理を読みやすく書く。

function wait() {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve("完了");
    }, 1000);
  });
}

async function main() {

  console.log("開始");

  const result = await wait();

  console.log(result);

}

main();
ポイント: awaitはPromiseの結果を待つために使います。
LESSON 18

Fetch API

JavaScriptからネットワーク通信を行う。

async function loadData() {

  const response = await fetch(
    "https://example.com/data.json"
  );

  const data = await response.json();

  console.log(data);
}

loadData();

実際のWebアプリではAPIからデータを取得する処理が非常によく登場します。

LESSON 19

JSON

データ交換で頻繁に使われる形式。

const user = {
  name: "Taro",
  age: 20
};

const json = JSON.stringify(user);

console.log(json);

const restored = JSON.parse(json);

console.log(restored.name);
LESSON 20

LocalStorage

ブラウザにデータを保存する。

localStorage.setItem(
  "username",
  "Taro"
);

const username =
  localStorage.getItem("username");

console.log(username);

localStorage.removeItem("username");

オブジェクトを保存する

const settings = {
  darkMode: true,
  fontSize: 18
};

localStorage.setItem(
  "settings",
  JSON.stringify(settings)
);

const saved =
  JSON.parse(
    localStorage.getItem("settings")
  );
LESSON 21

エラー処理

予期しない問題に対応する。

try {

  const result = dangerousFunction();

  console.log(result);

} catch (error) {

  console.error(
    "エラーが発生しました:",
    error
  );

} finally {

  console.log("処理終了");

}

throw

function divide(a, b) {

  if (b === 0) {
    throw new Error(
      "0では割れません"
    );
  }

  return a / b;
}
LESSON 22

クラス

オブジェクト指向プログラミングの基本。

class User {

  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  greet() {
    return `こんにちは、${this.name}さん`;
  }

}

const user = new User("Taro", 20);

console.log(user.greet());

継承

class Admin extends User {

  deleteUser() {
    console.log("ユーザーを削除しました");
  }

}

const admin =
  new Admin("Admin", 30);

admin.deleteUser();
LESSON 23

モジュール

コードを複数ファイルに分割する。

export

export function add(a, b) {
  return a + b;
}

import

import { add } from "./math.js";

console.log(add(10, 20));

大規模アプリでは、すべてのコードを1ファイルに詰め込むのではなく、 役割ごとにファイルを分割することが重要です。

LESSON 24

Canvas

JavaScriptで図形やゲーム画面を描画する。

const canvas =
  document.querySelector("canvas");

const ctx =
  canvas.getContext("2d");

ctx.fillStyle = "#35d9ff";

ctx.fillRect(
  50,
  50,
  200,
  100
);

Canvasを使えば、ゲーム、グラフ、アニメーションなどを作れます。

LESSON 25

デバッグ

バグを見つけて修正する技術。

console.log

const score = 100;

console.log("score =", score);

console.table

const users = [
  { name:"A", age:20 },
  { name:"B", age:25 }
];

console.table(users);

debugger

const value = 100;

debugger;

console.log(value);

バグを恐れる必要はありません。 「どこで」「何が」「想定と違うのか」 を分解して調べることが重要です。

LESSON 26

実践的な設計

大きなプログラムを壊さず作る考え方。

役割を分ける

// データ
const todos = [];

// データ操作
function addTodo(text) {
  todos.push({
    id: Date.now(),
    text,
    completed: false
  });
}

// 表示
function renderTodos() {
  // DOMを更新
}

// 保存
function saveTodos() {
  localStorage.setItem(
    "todos",
    JSON.stringify(todos)
  );
}

基本原則

  • 1つの関数に仕事を詰め込みすぎない
  • 意味のある名前を付ける
  • 同じコードを何度も書かない
  • データと表示処理をできるだけ分離する
  • 小さい単位で動作確認する
LESSON 27

ミニゲームを作る

ここまでの知識を使ってゲームを作ろう。

🎯 クリックゲーム

10秒以内にできるだけ多くクリックしてください。

0
残り10秒

LESSON 28

最終制作

JavaScriptで自分のWebアプリを完成させる。

🚀 最終課題:Todoアプリ

ここまで学んだ知識をすべて組み合わせて、 実用的なTodoアプリを作りましょう。

✓ DOM操作
✓ イベント
✓ 配列
✓ オブジェクト
✓ map / filter
✓ LocalStorage
✓ 関数
✓ エラー処理

完成形の設計例

const todos = [];

function addTodo(text) {
  const todo = {
    id: Date.now(),
    text: text,
    completed: false
  };

  todos.push(todo);

  saveTodos();
  renderTodos();
}

function toggleTodo(id) {

  const todo =
    todos.find(todo => todo.id === id);

  if (!todo) return;

  todo.completed =
    !todo.completed;

  saveTodos();
  renderTodos();
}

function deleteTodo(id) {

  const index =
    todos.findIndex(
      todo => todo.id === id
    );

  if (index === -1) return;

  todos.splice(index, 1);

  saveTodos();
  renderTodos();
}

function saveTodos() {

  localStorage.setItem(
    "todos",
    JSON.stringify(todos)
  );

}

function loadTodos() {

  const data =
    localStorage.getItem("todos");

  if (!data) return;

  const saved =
    JSON.parse(data);

  todos.push(...saved);

  renderTodos();
}

🎓 卒業条件

自分でTodoアプリを設計し、コードを書き、 バグを直し、LocalStorageに保存できるところまで到達したら、 JavaScriptの基礎を実践に使える段階です。

CHEAT SHEET

JavaScript早見表

目的 書き方
変数 const x = 10;
再代入 let x = 10;
条件 if (x > 10) { }
繰り返し for (...) { }
関数 function test() { }
配列 [1, 2, 3]
オブジェクト { name: "Taro" }
要素取得 document.querySelector()
イベント addEventListener()
保存 localStorage.setItem()
通信 fetch()
JSON化 JSON.stringify()
JSON復元 JSON.parse()
非同期 async / await
クラス class User { }
HTML COMPLETE COURSE

HTML完全攻略

HTMLの基礎から、セマンティックHTML、フォーム、SEO、 アクセシビリティ、JavaScriptとの連携までを一気に学ぶ。

🎯 このコースのゴール

HTMLを「タグを覚えるだけ」で終わらせず、 Webページを自分で設計・構築できるところまで進みます。

HTML基礎 レイアウト フォーム SEO アクセシビリティ JavaScript連携
HTML 01

HTMLとは?

Webページの構造を作るマークアップ言語。

HTMLの役割

HTMLはWebページに「これは見出し」「これは文章」 「これは画像」「これはリンク」といった意味と構造を与えます。

技術 役割
HTML ページの構造・意味
CSS 見た目・レイアウト
JavaScript 動作・処理

最小のHTML

<!DOCTYPE html>
<html lang="ja">

<head>
  <meta charset="UTF-8">
  <title>My Page</title>
</head>

<body>

  <h1>こんにちは!</h1>
  <p>これは私のWebページです。</p>

</body>

</html>
ポイント

HTMLは基本的に「要素」を組み合わせてページを作ります。

HTML 02

HTML文書の基本構造

<!DOCTYPE html>

<html lang="ja">

  <head>
    ページの設定
  </head>

  <body>
    実際に表示される内容
  </body>

</html>

DOCTYPE

HTML5として文書を扱うことをブラウザに伝えます。

html

HTML文書全体を囲みます。

head

タイトル、文字コード、SEO情報などを記述します。

body

ユーザーが実際に見るコンテンツを記述します。

HTML 03

見出しと文章

<h1>一番大きな見出し</h1>

<h2>第2階層</h2>

<h3>第3階層</h3>

<p>
  これは文章です。
</p>

見出しの考え方

見た目の大きさだけで見出しを選ぶのではなく、 文書の階層構造として考えます。

注意

見た目を大きくしたいだけだからという理由で

を何個も並べるような設計は避けましょう。

HTML 04

リンク

<a href="https://example.com">
  Webサイトへ移動
</a>

新しいタブで開く

<a
  href="https://example.com"
  target="_blank"
  rel="noopener"
>
  サイトを開く
</a>

ページ内リンク

<a href="#about">
  Aboutへ移動
</a>

<section id="about">
  <h2>About</h2>
</section>
HTML 05

画像

<img
  src="image.jpg"
  alt="青空と山の写真"
>

alt属性

画像の内容を説明するための重要な属性です。 画像が表示できない場合や支援技術でも利用されます。

サイズ指定

<img
  src="photo.jpg"
  alt="風景写真"
  width="800"
  height="500"
>
HTML 06

リスト

箇条書き

<ul>

  <li>HTML</li>
  <li>CSS</li>
  <li>JavaScript</li>

</ul>

番号付きリスト

<ol>

  <li>HTMLを学ぶ</li>
  <li>CSSを学ぶ</li>
  <li>JavaScriptを学ぶ</li>

</ol>

説明リスト

<dl>

  <dt>HTML</dt>
  <dd>Webページの構造を作る</dd>

  <dt>CSS</dt>
  <dd>Webページを装飾する</dd>

</dl>
HTML 07

divとspan

div

<div class="card">

  <h2>タイトル</h2>
  <p>文章</p>

</div>

複数の要素をまとめるためによく使われます。

span

<p>
  これは
  <span class="highlight">
    重要な文章
  </span>
  です。
</p>

文章の一部分を扱いたい場合に使います。

HTML 08

属性

<input
  type="text"
  id="username"
  class="input"
  placeholder="名前を入力"
>

HTML要素には属性を追加できます。

属性 用途
id 要素を一意に識別
class グループ化・CSS指定
src 読み込むファイル
href リンク先
alt 画像の説明
title 補足情報
HTML 09

テーブル

<table>

  <thead>
    <tr>
      <th>名前</th>
      <th>年齢</th>
    </tr>
  </thead>

  <tbody>

    <tr>
      <td>太郎</td>
      <td>20</td>
    </tr>

    <tr>
      <td>花子</td>
      <td>22</td>
    </tr>

  </tbody>

</table>
ポイント

表形式のデータを表現するために使用します。 ページ全体のレイアウト目的でtableを使う設計は避けます。

HTML 10

フォーム完全攻略

基本

<form>

  <label for="name">
    名前
  </label>

  <input
    id="name"
    name="name"
    type="text"
  >

  <button type="submit">
    送信
  </button>

</form>

inputの種類

<input type="text">

<input type="email">

<input type="password">

<input type="number">

<input type="date">

<input type="checkbox">

<input type="radio">

<input type="file">

<input type="search">

<input type="range">
HTML 11

select・textarea

select

<label for="language">
  言語
</label>

<select id="language" name="language">

  <option value="html">
    HTML
  </option>

  <option value="css">
    CSS
  </option>

  <option value="javascript">
    JavaScript
  </option>

</select>

textarea

<textarea
  name="message"
  rows="8"
  placeholder="メッセージ"
></textarea>
HTML 12

セマンティックHTML

「意味のあるHTML」を書くことを意識しましょう。

<header>
  ヘッダー
</header>

<nav>
  ナビゲーション
</nav>

<main>

  <section>

    <h2>記事一覧</h2>

    <article>
      記事
    </article>

  </section>

</main>

<footer>
  フッター
</footer>

代表的な要素

要素 意味
header ページやセクションのヘッダー
nav 主要なナビゲーション
main ページの主要コンテンツ
section 意味のあるまとまり
article 独立した記事・コンテンツ
aside 補足的なコンテンツ
footer フッター
HTML 13

HTMLとCSSを接続する

外部CSS

<head>

  <link
    rel="stylesheet"
    href="style.css"
  >

</head>

classを使う

<button class="primary-button">
  クリック
</button>

CSS側:

.primary-button {
  background: blue;
  color: white;
  padding: 12px 20px;
}
HTML 14

HTMLとJavaScriptを接続する

<button id="helloButton">
  押してください
</button>

<script>

const button =
  document.querySelector(
    "#helloButton"
  );

button.addEventListener(
  "click",
  () => {

    alert("こんにちは!");

  }
);

</script>
重要: HTMLで「部品」を作り、CSSで「見た目」を作り、 JavaScriptで「動作」を追加します。
HTML 15

metaタグ

<head>

  <meta charset="UTF-8">

  <meta
    name="viewport"
    content="width=device-width, initial-scale=1.0"
  >

  <meta
    name="description"
    content="HTMLを学ぶための講座"
  >

  <title>
    HTML完全攻略
  </title>

</head>

viewport

スマートフォンなどの画面幅に合わせてページを表示するために重要です。

description

ページの内容を説明するメタデータです。

HTML 16

SEOの基本

基本的な考え方

  • ページの内容が分かるtitleを付ける
  • 適切な見出し構造を作る
  • 画像に適切なaltを付ける
  • 意味のあるHTML要素を使う
  • ページの内容を明確にする
<title>
  JavaScript初心者講座 | Web開発入門
</title>

<meta
  name="description"
  content="JavaScriptを基礎から学ぶ講座です。"
>
HTML 17

アクセシビリティ

labelを使う

<label for="email">
  メールアドレス
</label>

<input
  id="email"
  type="email"
>

ボタンにはbutton

<button type="button">
  開く
</button>

クリックできる見た目を作るためだけに divをボタンとして使うより、 本来の意味を持つbutton要素を使う方が適切です。

画像の説明

<img
  src="cat.jpg"
  alt="窓辺で寝ている猫"
>
HTML 18

data属性

<button
  data-id="123"
  data-category="game"
>
  商品を見る
</button>

JavaScriptから取得できます。

const button =
  document.querySelector("button");

console.log(
  button.dataset.id
);

console.log(
  button.dataset.category
);
HTML 19

音声・動画

音声

<audio
  controls
  src="music.mp3"
>
</audio>

動画

<video
  controls
  width="800"
>

  <source
    src="movie.mp4"
    type="video/mp4"
  >

</video>
HTML 20

iframe

<iframe
  src="https://example.com"
  width="600"
  height="400"
  title="Example"
>
</iframe>
注意: 外部サイトを埋め込む場合は、 相手側の設定によって表示できないことがあります。
HTML 21

実践:Webページを設計する

最初に構造を考える

<body>

  <header>

    ロゴ

    <nav>
      メニュー
    </nav>

  </header>

  <main>

    <section>
      ヒーロー
    </section>

    <section>
      サービス紹介
    </section>

    <section>
      お問い合わせ
    </section>

  </main>

  <footer>
    コピーライト
  </footer>

</body>
HTML 22

実践:プロフィールページ

<!DOCTYPE html>
<html lang="ja">

<head>

  <meta charset="UTF-8">

  <meta
    name="viewport"
    content="width=device-width, initial-scale=1.0"
  >

  <title>
    プロフィール
  </title>

</head>

<body>

  <header>

    <h1>
      Taro's Profile
    </h1>

  </header>

  <main>

    <section>

      <h2>
        自己紹介
      </h2>

      <p>
        Web開発を勉強しています。
      </p>

    </section>

    <section>

      <h2>
        スキル
      </h2>

      <ul>
        <li>HTML</li>
        <li>CSS</li>
        <li>JavaScript</li>
      </ul>

    </section>

  </main>

  <footer>
    &copy; 2026 Taro
  </footer>

</body>

</html>
HTML 23

実践:お問い合わせフォーム

<form id="contactForm">

  <div>

    <label for="name">
      お名前
    </label>

    <input
      id="name"
      name="name"
      type="text"
      required
    >

  </div>

  <div>

    <label for="email">
      メールアドレス
    </label>

    <input
      id="email"
      name="email"
      type="email"
      required
    >

  </div>

  <div>

    <label for="message">
      メッセージ
    </label>

    <textarea
      id="message"
      name="message"
      required
    ></textarea>

  </div>

  <button type="submit">
    送信
  </button>

</form>
HTML 24

HTMLとJavaScriptの実践連携

HTML

<button id="counterButton">
  クリック
</button>

<p id="counter">
  0
</p>

JavaScript

const button =
  document.querySelector(
    "#counterButton"
  );

const counter =
  document.querySelector(
    "#counter"
  );

let count = 0;

button.addEventListener(
  "click",
  () => {

    count++;

    counter.textContent =
      count;

  }
);
HTML + JavaScript 実践
実行結果がここに表示されます。
HTML 25

HTML設計チェックリスト

  • DOCTYPEを書いている
  • htmlにlang属性がある
  • 文字コードを指定している
  • viewportを設定している
  • titleがある
  • 見出し構造が自然
  • 画像にaltがある
  • フォームにlabelがある
  • buttonを適切に使っている
  • リンクにはaを使っている
  • ページ構造にsemantic HTMLを使っている
  • CSSとJavaScriptを適切に分離している
HTML FINAL PROJECT

HTML最終制作

HTML・CSS・JavaScriptを組み合わせてWebサイトを完成させる。

🚀 最終課題:自分のWebサイトを作ろう

以下の構成を持つオリジナルWebサイトを制作してください。

✓ ヘッダー
✓ ナビゲーション
✓ メインビジュアル
✓ 自己紹介
✓ サービス・作品紹介
✓ 画像
✓ お問い合わせフォーム
✓ フッター
✓ レスポンシブ対応
✓ JavaScriptによる動作

推奨構造

<body>

  <header>

    <nav>
      ナビゲーション
    </nav>

  </header>

  <main>

    <section id="hero">
      メインビジュアル
    </section>

    <section id="about">
      自己紹介
    </section>

    <section id="works">
      作品
    </section>

    <section id="contact">
      お問い合わせ
    </section>

  </main>

  <footer>
    フッター
  </footer>

</body>

🎓 HTML攻略完了

HTMLは「タグを暗記するゲーム」ではありません。 ページの情報をどう整理し、どういう意味を持たせるか を考えることが重要です。

HTMLで構造を作れるようになったら、 CSSでデザインし、JavaScriptで動きを追加していきましょう。

JavaScript Complete Course

Learn → Code → Debug → Build