JavaScriptを
ゼロから極める。
プログラミング未経験者でも始められるように、 基礎文法からDOM、非同期処理、API、Canvas、クラス、 モジュール、実践設計、ミニゲーム、最終制作まで順番に学ぶ 超実践型JavaScript講座。
JavaScriptとは?
Webページに「動き」と「処理」を与えるプログラミング言語。
JavaScriptの役割
HTMLがWebページの「構造」、CSSが「見た目」なら、 JavaScriptは「動作・処理」を担当します。
| 技術 | 役割 | 例 |
|---|---|---|
| HTML | 構造 | 見出し、ボタン、画像 |
| CSS | デザイン | 色、サイズ、レイアウト |
| JavaScript | 動作 | クリック、計算、通信 |
最初のJavaScript
console.log("Hello, JavaScript!");
console.log()は値をコンソールへ表示します。
開発中の確認に非常によく使います。
基本構文
コードを書くための最初のルールを理解しよう。
コメント
// これはコメントです
/*
複数行コメントも書けます
*/
文
const message = "Hello";
console.log(message);
JavaScriptでは処理を上から順番に実行することが基本です。
💡 セミコロンは必要?
JavaScriptではセミコロンを省略できますが、 コードの意図を明確にするため、この講座では基本的に付けます。
変数
データに名前を付けて保存する。
const
const name = "Taro";
const age = 20;
console.log(name);
console.log(age);
let
let score = 10;
score = 20;
console.log(score);
基本的には、再代入しない値には const、
再代入する値には let を使います。
データ型
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);
演算子
計算や比較、論理を扱う。
算術演算子
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));
条件分岐
条件によって処理を変える。
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);
繰り返し
同じ処理を何度も実行する。
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);
}
関数
処理をまとめて再利用する。
基本的な関数
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));
配列
複数のデータをまとめて扱う。
const fruits = [
"りんご",
"バナナ",
"みかん"
];
console.log(fruits[0]);
console.log(fruits.length);
追加
fruits.push("ぶどう");
削除
fruits.pop();
分割代入
const [first, second] = fruits;
console.log(first);
console.log(second);
オブジェクト
関連するデータをひとつにまとめる。
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();
配列メソッド
配列を自在に操作する。
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);
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);
イベント
クリックや入力などの操作を検知する。
const button = document.querySelector("#button");
button.addEventListener("click", () => {
console.log("クリックされました!");
});
よく使うイベント
clickinputchangesubmitkeydownkeyupmouseover
フォーム
ユーザーからデータを受け取る。
form.addEventListener("submit", event => {
event.preventDefault();
const value = input.value;
console.log(value);
});
フォーム送信などのブラウザ標準動作を止めたい場合に使います。
非同期処理
時間のかかる処理を扱う。
console.log("A");
setTimeout(() => {
console.log("B");
}, 1000);
console.log("C");
出力は通常 A → C → B になります。 JavaScriptでは時間のかかる処理を待っている間にも、 別の処理を進められる仕組みがあります。
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);
});
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の結果を待つために使います。
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からデータを取得する処理が非常によく登場します。
JSON
データ交換で頻繁に使われる形式。
const user = {
name: "Taro",
age: 20
};
const json = JSON.stringify(user);
console.log(json);
const restored = JSON.parse(json);
console.log(restored.name);
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")
);
エラー処理
予期しない問題に対応する。
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;
}
クラス
オブジェクト指向プログラミングの基本。
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();
モジュール
コードを複数ファイルに分割する。
export
export function add(a, b) {
return a + b;
}
import
import { add } from "./math.js";
console.log(add(10, 20));
大規模アプリでは、すべてのコードを1ファイルに詰め込むのではなく、 役割ごとにファイルを分割することが重要です。
Canvas
JavaScriptで図形やゲーム画面を描画する。
const canvas =
document.querySelector("canvas");
const ctx =
canvas.getContext("2d");
ctx.fillStyle = "#35d9ff";
ctx.fillRect(
50,
50,
200,
100
);
Canvasを使えば、ゲーム、グラフ、アニメーションなどを作れます。
デバッグ
バグを見つけて修正する技術。
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);
バグを恐れる必要はありません。 「どこで」「何が」「想定と違うのか」 を分解して調べることが重要です。
実践的な設計
大きなプログラムを壊さず作る考え方。
役割を分ける
// データ
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つの関数に仕事を詰め込みすぎない
- 意味のある名前を付ける
- 同じコードを何度も書かない
- データと表示処理をできるだけ分離する
- 小さい単位で動作確認する
ミニゲームを作る
ここまでの知識を使ってゲームを作ろう。
🎯 クリックゲーム
10秒以内にできるだけ多くクリックしてください。
最終制作
JavaScriptで自分のWebアプリを完成させる。
🚀 最終課題:Todoアプリ
ここまで学んだ知識をすべて組み合わせて、 実用的なTodoアプリを作りましょう。
完成形の設計例
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の基礎を実践に使える段階です。
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完全攻略
HTMLの基礎から、セマンティックHTML、フォーム、SEO、 アクセシビリティ、JavaScriptとの連携までを一気に学ぶ。
🎯 このコースのゴール
HTMLを「タグを覚えるだけ」で終わらせず、 Webページを自分で設計・構築できるところまで進みます。
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文書の基本構造
<!DOCTYPE html>
<html lang="ja">
<head>
ページの設定
</head>
<body>
実際に表示される内容
</body>
</html>
DOCTYPE
HTML5として文書を扱うことをブラウザに伝えます。
html
HTML文書全体を囲みます。
head
タイトル、文字コード、SEO情報などを記述します。
body
ユーザーが実際に見るコンテンツを記述します。
見出しと文章
<h1>一番大きな見出し</h1>
<h2>第2階層</h2>
<h3>第3階層</h3>
<p>
これは文章です。
</p>
見出しの考え方
見た目の大きさだけで見出しを選ぶのではなく、 文書の階層構造として考えます。
見た目を大きくしたいだけだからという理由で
を何個も並べるような設計は避けましょう。
リンク
<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>
画像
<img
src="image.jpg"
alt="青空と山の写真"
>
alt属性
画像の内容を説明するための重要な属性です。 画像が表示できない場合や支援技術でも利用されます。
サイズ指定
<img
src="photo.jpg"
alt="風景写真"
width="800"
height="500"
>
リスト
箇条書き
<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>
divとspan
div
<div class="card">
<h2>タイトル</h2>
<p>文章</p>
</div>
複数の要素をまとめるためによく使われます。
span
<p>
これは
<span class="highlight">
重要な文章
</span>
です。
</p>
文章の一部分を扱いたい場合に使います。
属性
<input
type="text"
id="username"
class="input"
placeholder="名前を入力"
>
HTML要素には属性を追加できます。
| 属性 | 用途 |
|---|---|
| id | 要素を一意に識別 |
| class | グループ化・CSS指定 |
| src | 読み込むファイル |
| href | リンク先 |
| alt | 画像の説明 |
| title | 補足情報 |
テーブル
<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を使う設計は避けます。
フォーム完全攻略
基本
<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">
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
「意味のあるHTML」を書くことを意識しましょう。
<header>
ヘッダー
</header>
<nav>
ナビゲーション
</nav>
<main>
<section>
<h2>記事一覧</h2>
<article>
記事
</article>
</section>
</main>
<footer>
フッター
</footer>
代表的な要素
| 要素 | 意味 |
|---|---|
| header | ページやセクションのヘッダー |
| nav | 主要なナビゲーション |
| main | ページの主要コンテンツ |
| section | 意味のあるまとまり |
| article | 独立した記事・コンテンツ |
| aside | 補足的なコンテンツ |
| footer | フッター |
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とJavaScriptを接続する
<button id="helloButton">
押してください
</button>
<script>
const button =
document.querySelector(
"#helloButton"
);
button.addEventListener(
"click",
() => {
alert("こんにちは!");
}
);
</script>
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
ページの内容を説明するメタデータです。
SEOの基本
基本的な考え方
- ページの内容が分かるtitleを付ける
- 適切な見出し構造を作る
- 画像に適切なaltを付ける
- 意味のあるHTML要素を使う
- ページの内容を明確にする
<title>
JavaScript初心者講座 | Web開発入門
</title>
<meta
name="description"
content="JavaScriptを基礎から学ぶ講座です。"
>
アクセシビリティ
labelを使う
<label for="email">
メールアドレス
</label>
<input
id="email"
type="email"
>
ボタンにはbutton
<button type="button">
開く
</button>
クリックできる見た目を作るためだけに divをボタンとして使うより、 本来の意味を持つbutton要素を使う方が適切です。
画像の説明
<img
src="cat.jpg"
alt="窓辺で寝ている猫"
>
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
);
音声・動画
音声
<audio
controls
src="music.mp3"
>
</audio>
動画
<video
controls
width="800"
>
<source
src="movie.mp4"
type="video/mp4"
>
</video>
iframe
<iframe
src="https://example.com"
width="600"
height="400"
title="Example"
>
</iframe>
実践:Webページを設計する
最初に構造を考える
<body>
<header>
ロゴ
<nav>
メニュー
</nav>
</header>
<main>
<section>
ヒーロー
</section>
<section>
サービス紹介
</section>
<section>
お問い合わせ
</section>
</main>
<footer>
コピーライト
</footer>
</body>
実践:プロフィールページ
<!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>
© 2026 Taro
</footer>
</body>
</html>
実践:お問い合わせフォーム
<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と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設計チェックリスト
- DOCTYPEを書いている
- htmlにlang属性がある
- 文字コードを指定している
- viewportを設定している
- titleがある
- 見出し構造が自然
- 画像にaltがある
- フォームにlabelがある
- buttonを適切に使っている
- リンクにはaを使っている
- ページ構造にsemantic HTMLを使っている
- CSSとJavaScriptを適切に分離している
HTML最終制作
HTML・CSS・JavaScriptを組み合わせてWebサイトを完成させる。
🚀 最終課題:自分のWebサイトを作ろう
以下の構成を持つオリジナルWebサイトを制作してください。
推奨構造
<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