本記事にはプロモーション(アフィリエイト広告)を含みます。
この記事で分かること
- scriptタグの基本的な書き方
- head・bodyへの置き方と、実行されるタイミング
- 外部ファイルを読み込む方法
- defer・async・moduleの違いと選び方
- 表示されないときの確認方法と、最小の動作例
この記事は、2026年10月時点のHTML Standard「script要素」とMDN Web Docsの解説に基づいています。対象:HTML Standard(Living Standard)のscript要素。開発者ツールの操作例はデスクトップ版Chromeを対象とし、バージョン固有の違いは扱いません。
JavaScriptをHTMLに組み込むには、scriptタグを使います。どこに置くか、deferやasyncを付けるかによって、読み込みや実行のタイミングが変わります。
Webページに動きや操作を加えるための指示を書く言葉です。
Webページの見出しや文章、ボタンなどを組み立てるための書き方です。
HTMLの中でJavaScriptを動かす場所を示す目印です。JavaScriptをその場に書く方法と、別のファイルを読み込む方法があります。
山かっこで囲んだ記号を使って、ページの部品や役割を示す書き方です。たとえば、
<p> は文章のまとまりを表します。
この記事では、通常のscriptタグと、別ファイルに書いたJavaScriptを読み込む場合を中心に説明します。まず配置場所と実行順を整理し、その後、手元で動かせる例を紹介します。
JavaScriptを学ぶ順番もあわせて確認したい方は、全体の学習ガイドをご覧ください。→ JavaScript ロードマップ|基礎からDOM・イベント・フォーム操作まで体系的に学ぶガイド
scriptタグの基本的な書き方
JavaScriptをHTMLの中に直接書く場合は、開始タグと終了タグの間に記述します。
<script>
document.getElementById("message").textContent = "JavaScriptが動きました";
</script>
この例は、HTML内にid="message"を付けた場所があると、その場所の文章を「JavaScriptが動きました」に変えます。
実行結果:ページにある「message」の場所の文章が、「JavaScriptが動きました」に変わります。ページにその場所がない場合は、文章は変わりません。
ページの部品をJavaScriptから見つけたり変更したりできる仕組みを、DOMといいます。
Webページの見出しや文章、ボタンなどを、JavaScriptから見つけたり変更したりできるようにした仕組みです。
ページの部品がまだ読み込まれていないタイミングで処理すると、対象が見つからずエラーになることがあります。
headとbodyのどちらに置くか
headに置いた通常のscriptタグは、読み込み中にその場所へ来ると、JavaScriptの読み込みと実行が終わるまでHTMLの読み取りを一時停止します。ページ内の部品を使う処理は、部品が読み込まれる前に動くと対象を見つけられません。
ページの題名や設定など、画面に表示する本文以外の情報を書く場所です。
見出し、文章、ボタンなど、ページに表示する内容を書く場所です。
この説明は、async・deferを付けていない通常のscriptタグについてです。外部ファイルを読み込むscriptタグにこれらの指定を付けた場合や、module形式では、動作が異なります。
HTMLとは別に保存して、必要なときに読み込むファイルです。JavaScriptのファイル名は、通常
.jsで終わります。
JavaScriptを別々のファイルに分けて読み込み、組み合わせて使う形式です。scriptタグでは、
type="module" と指定します。
配置方法は、次のように選べます。
- ページの部品を使わない短い処理なら、置き場所に応じた実行タイミングを確認して使います。
- ページの部品を使う処理なら、body内の対象部品より後に置く方法があります。
- 外部ファイルをheadから読み込むなら、通常のscriptではdeferを使う方法があります。
defer・async・moduleの違い
deferとasyncは、外部ファイルを読み込む通常のscriptタグで使う指定です。読み込み中もHTMLの読み取りを続け、JavaScriptを実行するタイミングを変えます。
外部ファイルの読み込みをHTMLの読み取りと並行して進め、HTMLを読み終えた後にJavaScriptを動かす指定です。deferを付けた通常のscriptタグが複数ある場合は、HTMLに書いた順に実行されます。
外部ファイルの読み込みをHTMLの読み取りと並行して進め、読み込みが終わったものから動かす指定です。複数ある場合、HTMLに書いた順に実行されるとは限りません。
どちらも外部ファイルを読み込む場合の指定です。HTML内に直接書いた通常のscriptタグでは、deferやasyncを付けても同じ動作にはなりません。
module形式では、外部ファイルは基本的にHTMLの読み取り後に実行されます。asyncを付けた場合は、読み込みが終わった時点で実行されることがあります。module形式のscriptタグにdeferを付けても、deferによる追加の動作はありません。
| 書き方 | HTML読み取り中の動き | 実行タイミング・順番 |
|---|---|---|
| 通常の外部script | その場所で一時停止 | 読み込み後、すぐ実行 |
| 外部scriptにdefer | 読み取りを続ける | HTMLを読み終えた後。複数あれば記述順 |
| 外部scriptにasync | 読み取りを続ける | 読み込み完了後。複数の実行順は一定しない |
| module形式 | 読み取りを続ける | 基本はHTMLを読み終えた後。asyncを付けると変わる |
ほかのJavaScriptファイルの処理が終わってから動かす必要がある場合は、asyncではなくdeferを検討します。読み込み順に関係しない独立した処理なら、asyncが使える場合があります。
複数のファイルをHTMLに書いた順に実行でき、HTMLの読み取りも止めずに済みます。module形式や、実行順に関係しない処理では条件が異なります。
外部ファイルを読み込む方法
JavaScriptを別のファイルに保存し、scriptタグのsrcにその場所を書けば読み込めます。HTMLとJavaScriptを分けると、どこに何を書くか整理しやすくなります。一方、ファイルを増やすため、保存場所や指定する場所の確認が必要です。
<script src="./main.js" defer></script>
./main.jsは、HTMLファイルと同じ場所にあるmain.jsを指定しています。../main.jsなら、ひとつ上の場所にあるファイルを指定します。
実行結果:ブラウザは、指定した場所からmain.jsを読み込みます。このscriptタグだけでは、ページ上の表示は変わりません。画面に変化が出るかどうかは、読み込むJavaScriptの内容によります。
同じHTMLを別の場所へ移すと、相対パスではJavaScriptファイルを見つけられなくなることがあります。HTMLとJavaScriptファイルの位置関係を確認してください。
ファイルがどこにあるかを示す書き方です。住所をたどって目的の場所を探すように、フォルダーの位置を指定します。
今いるファイルの場所を基準に、目的のファイルまでの位置を書く方法です。
./main.jsや../main.jsが例です。


HTMLとJavaScriptを一緒に動かす
例を試すには、HTMLファイルを作成して保存できるテキストエディターと、HTMLを開けるデスクトップ版ブラウザが必要です。ここではChromeでの確認を例にします。特定のOSやChromeの番号に依存する書き方ではなく、HTML Standardのscript要素の動きを扱います。
文章やコードを書いてファイルに保存するためのアプリです。
コンピューターにしてほしいことを、決められた書き方で並べた指示です。
次の例では、HTMLとJavaScriptを同じフォルダーに保存します。ページを開くと案内文が表示され、ボタンを押すと文章が変わります。
1. HTMLファイルを作る
テキストエディターに次の内容を書き、index.htmlという名前で保存します。
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>scriptタグの練習</title>
<script src="./main.js" defer></script>
</head>
<body>
<p id="message">ボタンを押してください。</p>
<button id="change-button">文章を変える</button>
</body>
</html>
実行結果:この段階ではJavaScriptのファイルをまだ作っていないため、ページを開くと「ボタンを押してください。」という文章と「文章を変える」ボタンが表示されます。ボタンを押しても、JavaScriptファイルを用意するまでは文章は変わりません。
2. JavaScriptファイルを作る
同じフォルダーにmain.jsを作り、次の内容を保存します。
const button = document.getElementById("change-button");
const message = document.getElementById("message");
button.addEventListener("click", function () {
message.textContent = "JavaScriptが動きました。";
});
HTMLを読み終えた後にJavaScriptが動くよう、scriptタグにdeferを付けています。そのため、JavaScriptがボタンや文章を探すときには、HTML内の部品が読み込まれています。
addEventListenerは、ボタンが押されたときに行う処理を登録する書き方です。ここでは、ボタンが押されたら案内文を書き換えます。
実行結果:ページを開いた直後は表示が変わりません。ボタンを押すと、案内文が「JavaScriptが動きました。」に変わります。
3. ブラウザで確認する
index.htmlとmain.jsを同じフォルダーに保存します。index.htmlをChromeで開きます。- 最初に「ボタンを押してください。」と表示されることを確認します。
- 「文章を変える」ボタンを押し、「JavaScriptが動きました。」に変わることを確認します。
実行結果:ページを開いた直後は「ボタンを押してください。」、ボタンを押した後は「JavaScriptが動きました。」と表示されます。
動かないときに確認すること
ボタンを押しても文章が変わらない
まず、HTMLとJavaScriptのファイル名、保存場所、scriptタグのsrcの指定を確認します。例では、両方のファイルが同じフォルダーにあり、指定が./main.jsになっている必要があります。
次に、HTML内のidとJavaScript内の文字が一致しているか確認します。たとえば、HTMLがid="change-button"なら、JavaScriptも"change-button"を探す必要があります。
ページ内の部品を見分けるために付ける名前です。同じページの中で、どの部品を使うか指定するときに役立ちます。
headに置いたコードで対象が見つからない
通常のscriptタグをheadに置き、deferを付けずにページ内の部品を探すと、その部品がまだ読み込まれていないことがあります。scriptタグにdeferを付けるか、対象となる部品の後にscriptタグを移動します。
<head>
<script src="./main.js" defer></script>
</head>
実行結果:deferを付けると、HTMLを読み終えた後に外部ファイルのJavaScriptが実行されます。ページ内の部品を使う処理は、部品が読み込まれてから動きます。
エラーが出た場合は、Chromeの開発者ツールを開き、エラー一覧で内容とファイル名を確認します。ChromeではWindows・Linuxの場合はCtrl+Shift+J、Macの場合はCommand+Option+Jでエラー一覧を開けます。ショートカットが使えない場合は、Chromeのメニューから「その他のツール」→「デベロッパーツール」を選び、「Console」タブを開きます。
エラーの行にファイル名や行番号が表示されていたら、そのファイルを開いて該当する場所を確認します。表示内容はブラウザによって異なるため、エラー文だけでなく、示されたファイルや行も見てください。Chromeのショートカットは、公式のChrome DevToolsのキーボードショートカットでも確認できます。
Webページを作る人が、ページの状態や問題の表示を確認するためのブラウザの機能です。
ページの問題や、プログラムからの知らせが文字で表示される場所です。
複数のファイルの順番が崩れる
asyncを付けた外部ファイルは、読み込みが終わったものから実行されます。先に書いたファイルが先に実行されるとは限りません。前のファイルの処理を使う必要があるときは、deferを使う方法を検討してください。
<script src="./first.js" defer></script>
<script src="./second.js" defer></script>
実行結果:この通常のscriptタグでは、HTMLを読み終えた後にfirst.js、second.jsの順で実行されます。どちらかのファイルが見つからない場合や、ファイル内で使う名前が正しくない場合は、期待した処理にならないことがあります。
各ファイルが存在することと、ファイル内で使う名前が正しく設定されていることも確認してください。
公式資料で仕様を確認する
属性の適用条件や実行タイミングを詳しく確認したい場合は、仕様の説明も参照してください。
タグに追加して、読み込み方などの条件を指定する情報です。たとえば、
src は読み込むファイルの場所を指定します。
- HTML Standard:script要素(HTMLのscriptタグに関する仕様)
- MDN Web Docs:script要素(属性や使用例の説明)
この記事のJavaScript仕様の説明に関連する書籍では、対象としている標準の版が示されている場合があります。紹介している書籍はECMAScript 2023までを対象としています。
JavaScriptの書き方や動きを定めた標準の名前です。ECMAScript 2023は、その標準の2023年版を指します。
記事内の例は、HTML Standardのscript要素の基本的な動きを示しています。ブラウザの操作画面や表示内容は、ブラウザやその版によって異なる場合があります。
JavaScriptを順番に学ぶ
scriptタグの基本を確認したら、外部ファイルの読み込み方や、ページの部品を操作する方法へ進むと理解を深められます。JavaScript基礎ロードマップでは、学ぶ順番に沿って記事を確認できます。
- 基礎の学習順を確認する:JavaScript 基礎ロードマップ|初心者が最短で学ぶためのガイド
JavaScriptを基礎から学びたい方へ PR
scriptタグの使い方に加えて、JavaScriptの文法やページ操作まで順に学びたい人向けの選択肢です。この記事の例だけで必要な知識がそろうわけではないため、より広い範囲を学びたい場合に検討してください。
これからのJavaScriptの教科書
JavaScriptの基本文法から、ページ操作、イベント、非同期処理などを扱う書籍です。掲載情報では、サンプルコードを試しながら幅広い内容を学ぶ構成とされています。
向いている人:JavaScriptを基礎から体系的に学びたい人や、記事で扱う範囲の先へ進みたい人。
注意点:全608ページのため、要点だけを短時間で確認したい人には分量が多い場合があります。対象はECMAScript 2023までです。
scriptタグに関するよくある質問
外部ファイルを読み込むscriptタグに、終了タグは必要ですか?
必要です。外部ファイルを指定する場合も、<script src="..."></script>のように開始タグと終了タグを書きます。
scriptタグにtype=”text/javascript”を書く必要はありますか?
通常のJavaScriptを読み込む場合、必須ではありません。JavaScriptの別ファイルをモジュール形式で使う場合は、type="module"を指定します。
ファイルを直したのに、ページに変更が出ないときはどうすればよいですか?
まず、HTMLとJavaScriptの両方を保存したか確認してから、ページを開き直してください。それでも変わらない場合は、HTMLのsrcが修正したファイルの場所を指しているか確認します。
同じJavaScriptファイルをscriptタグで複数回読み込めますか?
読み込めますが、同じ処理が複数回実行されることがあります。特別な理由がなければ、同じファイルを重ねて読み込んでいないか確認してください。
まとめ
- scriptタグでJavaScriptをHTMLに組み込める
- 通常のscriptをheadに置くと、HTMLの読み取りが一時停止する場合がある
- 外部ファイルのdeferは、HTMLを読み終えた後に実行する
- asyncは読み込みが終わったものから実行され、順番は決まらない
- module形式やHTML内に直接書く場合は、defer・asyncと動作が異なる
- 動かないときは、ファイルの場所、名前、HTML内の部品名を確認する
まずはHTMLとJavaScriptのファイルを同じフォルダーに置き、例を試してみてください。次は外部ファイルの読み込み方と、JavaScript基礎ロードマップを確認しましょう。

