TL

JavaScript(ブラウザの動的処理)

ブラウザの中で動き、ページを“動的”にする言語。クリックや入力に反応し、DOM を書き換え、サーバと通信する。Web を静止画から動くアプリに変える。

基礎JavaScriptWebDOMブラウザ最終更新: 2026-06-04
TL;DR要点だけ先に
  • 1.JavaScript はブラウザに最初から積まれている言語。HTML(構造)/ CSS(見た目)に対して、JS は“動き・反応”を担当する。
  • 2.ユーザー操作(イベント)を受け取り、DOM を書き換えてページを更新し、必要なら fetch でサーバと通信する、が基本の流れ。
  • 3.1スレッドで動くがブロックしない。イベントループと非同期(Promise / async-await)で“待ち”をさばくのが要。

なぜ JavaScript が要るのか

HTML と CSS だけでも、文章・画像・リンクの「見えるページ」は作れます。でもそれは最初に表示された姿のままで、ユーザーの操作で中身を変えることはできません。

  • ボタンを押したら数字が増える / メニューが開く
  • 入力フォームを送信前にチェックする(バリデーション)
  • ページを再読み込みせずに新しいデータを取ってきて差し替える

こうした 「読み込んだ後に、その場でページを変化させる」 ためにブラウザが用意している言語が JavaScript です。サーバを介さずブラウザ側(クライアントサイド)で動くので、反応が速いのが特徴です。

JavaScript と Java は別物

名前が似ていますが、JavaScript と Java はまったくの別言語です。歴史的な事情で名前を寄せただけで、文法も用途も違います。「JS」と略すのが安全です。

言語としての基本(変数・関数)

文法は他の言語と同じ発想です。値に名前を付ける変数と、処理をまとめる関数が土台になります。

// 変数: const(再代入しない)/ let(する)。var は古いので原則使わない
const name = "Tech";
let count = 0;
count = count + 1;

// 関数: 入力を受け取り、処理して、結果を返す
function double(n) {
  return n * 2;
}

// アロー関数(短い書き方)。コールバックで多用する
const triple = (n) => n * 3;

console.log(double(10)); // 20 (ブラウザの開発者ツールに出る)

const / let / var は宣言の仕方が3種類ありますが、現在は使い分けがはっきりしています。

宣言再代入スコープいつ使う
const不可ブロック { } 単位基本これ(変えない値)
letブロック { } 単位あとで変わる値(カウンタ等)
var関数単位(巻き上げあり)原則使わない(古い書き方)

DOM 操作(ページを書き換える)

ブラウザは読み込んだ HTML を、DOM(Document Object Model) という木構造のオブジェクトに変換して持っています。JavaScript はこの DOM をたどって、要素を取得 → 中身や属性を書き換える ことで画面を更新します。詳しくは DOM の解説へ。

<button id="btn">押して</button>
<p id="out">0</p>
// 要素を取得する
const btn = document.getElementById("btn");
const out = document.querySelector("#out"); // CSSセレクタでも取れる

// テキストを書き換える
out.textContent = "こんにちは";

「ボタンを押したら段落の中身が変わる」を実現するには、イベントと組み合わせます。

イベント(操作に反応する)

ユーザーの操作(クリック・入力・スクロール…)はブラウザがイベントとして通知します。JavaScript は「このイベントが起きたら、この関数を実行して」とイベントリスナーを登録しておき、操作されたら呼ばれます。これを イベント駆動 と呼びます。

const btn = document.getElementById("btn");
const out = document.getElementById("out");
let count = 0;

// click イベントを待ち受け、起きたらコールバックが走る
btn.addEventListener("click", () => {
  count = count + 1;
  out.textContent = count; // DOM を書き換えて画面更新
});
onclick 属性より addEventListener

HTML に onclick="..." と JavaScript を直接書く方法もありますが、addEventListener を推奨します。1つの要素に複数の処理を登録でき、HTML(構造)と振る舞いを分離できるためです。インラインの onclick は管理が崩れやすく、CSP(セキュリティ設定)とも相性が悪くなります。

非同期処理(通信と“待ち”)

JavaScript は 1つのスレッドで動く(一度に1つの処理しか実行しない)言語です。にもかかわらずブラウザが固まらないのは、イベントループという仕組みで「時間のかかる処理」を脇に逃がし、終わったら結果を受け取るからです。これが非同期処理で、考え方は同期処理と非同期処理で詳しく解説しています。

代表例がサーバとの通信です。fetch でデータを取りに行き、返ってくるのを待たずに先へ進み、届いたら処理します。

// async/await: 非同期を“同期っぽく”読み書きできる
async function loadUser() {
  const res = await fetch("/api/user");   // 返事が来るまで“この関数の中だけ”待つ
  if (!res.ok) throw new Error("失敗");    // HTTPステータスを確認
  const user = await res.json();          // ボディをJSONとして読む
  document.getElementById("name").textContent = user.name;
}

loadUser();

このように画面を再読み込みせずデータだけ差し替える手法を Ajax と呼びます。やり取りの土台は HTTP で、相手が別ドメインのときは CORS の制約がかかります。

入力をそのまま innerHTML に入れない(XSS)

ユーザーが入力した文字列やサーバから来たデータを element.innerHTML = ... でそのまま埋め込むと、<script> などが実行され XSS(クロスサイトスクリプティング) の穴になります。テキストとして入れるなら textContent を使い、HTML として埋め込む必要があるときはサニタイズしてください。

ES モジュール(ファイル分割)

コードが増えると1ファイルでは破綻します。ES Modules(ESM) を使うと、ファイルごとに機能を分け、export で公開し import で取り込めます。名前の衝突を防ぎ、必要なものだけ読み込めます。

// math.js ── 機能を公開する
export function add(a, b) {
  return a + b;
}
// main.js ── 必要なものだけ取り込む
import { add } from "./math.js";
console.log(add(1, 2)); // 3
<!-- ブラウザで ESM を使うには type="module" を付ける -->
<script type="module" src="main.js"></script>
type="module" は普通の script と挙動が違う

type="module" のスクリプトは自動で遅延実行defer 相当でDOM構築後に走る)になり、変数がグローバルを汚さない(モジュールスコープ)、自動で strict モードになります。素の <script> とは前提が変わる点に注意。

どこで動く?(実行される場所の違い)

「JavaScript」と一口に言っても、動く場所で前提が変わります。混同しやすいので整理しておきます。

実行場所できることできないこと
ブラウザ(クライアント)DOM操作・イベント・fetch・画面更新ファイルシステム直接操作など(サンドボックス内)
Node.js(サーバ/ツール)ファイル読み書き・HTTPサーバ・CLIDOM操作(document が無い)

同じ言語でも、ブラウザには documentwindow があり、Node.js には無い、という違いです。本記事が扱うのは前者の ブラウザの中の JavaScript です。

まとめ

JavaScript は 「イベントを受け取り → DOM を書き換え → 必要ならサーバと通信」 を繰り返して、ページを動的にする言語です。

  • HTML / CSS / JS は役割分担。JS は「動き・反応」担当
  • DOM を介してページを書き換え、イベントで操作に反応する
  • 1スレッド + 非同期(Promise / async-await) で“待ち”をさばく
  • innerHTML への生データ埋め込み(XSS)に注意

次は土台となる DOM や、ブラウザが HTML/CSS/JS をどう画面にするかを追う ブラウザのレンダリング もあわせてどうぞ。

Web/フロントエンド Article

JavaScript(ブラウザの動的処理)を実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

JavaScript

比較で見る軸

難易度: basic / カテゴリ: Web/フロントエンド / タグ数: 4

導入後に効く点

ユーザー操作(イベント)を受け取り、DOM を書き換えてページを更新し、必要なら fetch でサーバと通信する、が基本の流れ。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
basic
カテゴリ
Web/フロントエンド
タグ数
4

判断チェックリスト

  • 自社の用途が「JavaScript / Web」に近いか確認する。
  • 強みである「JavaScript はブラウザに最初から積まれている言語。HTML(構造)/ CSS(見た目)に対して、JS は“動き・反応”を担当する。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

JavaScriptWebDOMブラウザJavaScriptWebDOMブラウザ
参考: 公式情報