この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:18
ページ更新者:ぼうず
更新日時:2026-06-11 07:12:00

タイトル: JavaScript
SEOタイトル: JavaScript 入門 — ECMAScript / ES6+ の機能・ブラウザと Node.js・エコシステム

この記事の要点
  • JavaScript は Web ブラウザで動く唯一のスクリプト言語として 1995 年に誕生。現在は ECMAScript 仕様で標準化
  • 実行環境は 2 系統: ブラウザ JS(DOM 操作、Fetch API)と Node.js(サーバーサイド、ファイル I/O)
  • ES6(2015)以降のモダン構文: let / const / アロー関数 / Promise / async-await / Class / Module(import/export)
  • TypeScript は JavaScript の上位互換(静的型付け)。大規模開発では事実上の標準
  • エコシステム: パッケージマネージャ (npm / yarn / pnpm)、フレームワーク (React / Vue / Angular / Svelte)、ビルドツール (Vite / Webpack / esbuild)

JavaScript とは

JavaScript (JS) は、Web ブラウザの動的な挙動を実現するために 1995 年に Brendan Eich が Netscape Navigator 向けに 10 日間で開発した言語です。当初は Java の人気にあやかった命名で、Java とは無関係です。

現在は ECMA InternationalECMAScript として標準化し、毎年 6 月に新バージョン(ES2015、ES2016...)がリリースされます。Node.js の登場以降、サーバーサイド・モバイル・デスクトップアプリ(Electron)まで広がる汎用言語となりました。

ECMAScript のバージョン進化

バージョン主な追加機能
ES52009strict mode、JSON、Array.forEach/map
ES6 (ES2015)2015let/const、アロー関数、Class、Promise、Module、Map/Set、テンプレートリテラル
ES20162016Array.includes** 演算子
ES20172017async / await、Object.values/entries
ES20182018spread/rest for objects、非同期 iteration
ES20192019Array.flat、Object.fromEntries、try-catch optional binding
ES20202020?.(optional chaining)、??(nullish coalescing)、BigInt
ES20212021String.replaceAll、Promise.any、論理代入演算子
ES20222022top-level await、Class fields、at()
ES20232023Array.findLast、配列の non-mutating メソッド

モダン構文(ES6+)の例

// let / const(var は使わない)
const PI = 3.14;
let count = 0;
count++;

// テンプレートリテラル
const name = "JavaScript";
console.log(`Hello, ${name}!`);

// アロー関数
const add = (a, b) => a + b;
const square = x => x * x;

// 分割代入
const user = { name: "Alice", age: 30 };
const { name: userName, age } = user;
const [first, second, ...rest] = [1, 2, 3, 4, 5];

// スプレッド構文
const arr1 = [1, 2, 3];
const arr2 = [...arr1, 4, 5];
const merged = { ...user, role: "admin" };

// クラス
class Animal {
    constructor(name) { this.name = name; }
    speak() { return `${this.name} makes a sound`; }
}
class Dog extends Animal {
    speak() { return `${this.name} barks`; }
}

// Promise / async-await
async function fetchUser(id) {
    try {
        const res = await fetch(`/api/users/${id}`);
        if (!res.ok) throw new Error("Network error");
        return await res.json();
    } catch (err) {
        console.error(err);
    }
}

// Optional chaining と Nullish coalescing
const city = user?.address?.city ?? "Unknown";

// 配列メソッド(イミュータブル)
const nums = [1, 2, 3, 4, 5];
const doubled = nums.map(n => n * 2);
const evens = nums.filter(n => n % 2 === 0);
const sum = nums.reduce((acc, n) => acc + n, 0);

// モジュール(ESM)
// utils.js
export const greet = name => `Hello ${name}`;
export default function add(a, b) { return a + b; }

// main.js
import add, { greet } from './utils.js';

ブラウザ JS と Node.js

項目ブラウザ JSNode.js
実行環境Chrome / Firefox / Safari 等のブラウザサーバー(V8 エンジン上で動作)
グローバルオブジェクトwindow / documentglobal / process
I/Ofetch、DOM APIfshttpnet
モジュールESM(<script type="module">CommonJS(require)/ ESM
用途UI、SPA、PWAAPI サーバー、CLI、ツール

DOM 操作の基礎

// 要素の取得
const btn = document.getElementById("myBtn");
const items = document.querySelectorAll(".item");
const first = document.querySelector(".item:first-child");

// イベント
btn.addEventListener("click", (e) => {
    console.log("Clicked!", e.target);
});

// 要素の作成・追加
const div = document.createElement("div");
div.textContent = "Hello";
div.classList.add("greeting");
document.body.appendChild(div);

// 属性とスタイル
btn.setAttribute("disabled", "");
btn.style.color = "red";
btn.classList.toggle("active");

// Fetch API でデータ取得
fetch("/api/data")
    .then(res => res.json())
    .then(data => console.log(data))
    .catch(err => console.error(err));

TypeScript との関係

TypeScript (TS) は Microsoft 製のJavaScript の上位互換言語。静的型付け、インターフェース、Generics 等を追加し、コンパイル時に JavaScript に変換されます。大規模アプリでは TS が事実上の標準です。

// TypeScript の例
interface User {
    id: number;
    name: string;
    email?: string;  // optional
}

function getUser(id: number): Promise<User> {
    return fetch(`/api/users/${id}`).then(res => res.json());
}

const users: User[] = [
    { id: 1, name: "Alice" },
    { id: 2, name: "Bob", email: "bob@example.com" }
];

エコシステム

カテゴリ代表ツール
パッケージマネージャnpm(標準)、yarn(高速)、pnpm(省ディスク)
UI フレームワークReact(Meta)、VueAngular(Google)、SvelteSolid
SSR / メタフレームワークNext.js(React)、Nuxt(Vue)、RemixAstro
ビルドツールVite(高速)、WebpackesbuildRollupParcel
テストJestVitestPlaywrightCypress
Lint / FormatESLintPrettierBiome
Node.js ランタイムNode.jsDenoBun

Hello World と簡単な動作確認

# Node.js インストール(macOS)
brew install node
node --version    # v20.x
npm --version

# 1 行実行
node -e "console.log('Hello, JavaScript!')"

# ファイル実行
echo "console.log('Hello')" > hello.js
node hello.js

# npm でプロジェクト初期化
mkdir my-app && cd my-app
npm init -y
npm install express

FAQ

Q: JavaScript と Java の関係は?
A: 全く別物。1995 年当時の Java ブームに便乗した命名というだけで、文法も思想も異なります。

Q: var / let / const どれを使う?
A: const をデフォルト、再代入が必要なときだけ letvar は変数の巻き上げ・関数スコープの罠があり使わないこと。

Q: jQuery はまだ必要?
A: ES6+ で多くの jQuery の機能(querySelectorfetchclassList)がネイティブ実装されました。新規プロジェクトでは不要

Q: TypeScript を学ぶべき?
A: 規模が大きくなる予定があるなら必須。型による補完・リファクタリング支援は強力。React + TS が現在の Web 開発標準です。

📸 参考画像

※ 旧バージョンから引き継いだ参考画像です。手順・図解の補助としてご覧ください。

参考画像