JavaScript - 記述場所と読み込み方法
JavaScript は HTML ファイル内に直接書くか、外部ファイルに書いて読み込みます。JavaScript をブラウザで動かすために、 <script> 要素で HTML に読み込む方法を学びましょう。
ウェブページで JavaScript を使うには?
ウェブページに動きをつけるために JavaScript を使う場合、JavaScript だけでは何も動作しません。ウェブページの土台となる HTML に、JavaScript を追加する必要があります。そのために使うのが、<script>
要素です。
今回は、JavaScript の記述場所を2つ紹介し、<script>
要素で HTML に読み込む方法を解説します。
<script> 要素とは?
<script>
要素は、ウェブページに JavaScript を追加するために使う HTML 要素です。<script>
タグを使うことで、HTML に JavaScript コードを埋め込んだり、外部の JavaScript ファイルを指定して読み込むことができるようになります。
これは、HTML に JavaScript コードを埋め込むために <script>
タグを使う書き方です。
<script>
// <script>タグの間にJavaScriptコードを書く
</script>
これは、外部の JavaScript ファイルを指定して HTML に読み込むために<script>
タグを使う書き方です。
<!-- src属性で外部ファイルを指定する -->
<script src="script.js"></script>
JavaScript はどこに記述する?
HTML に JavaScript を追加するための書き方は2つあります。
- HTML ファイル内に直接書く
- 外部の JavaScript ファイルに書く
どちらに書くかによって、<script>
要素の書き方も変わってきます。それぞれの場合を詳しく見ていきましょう。
1. HTML ファイル内に直接書く
まずは、HTML ファイル内に直接 JavaScript を書く方法です。HTML 内に JavaScript を埋め込むために <script>
タグを使います。この方法は、ほんの少しのコードしか書かないときに便利です。
以下は <script>
要素の例です。HTML ファイルに、<script>
タグで囲んで JavaScript コードを書きます。
<!-- ページを読み込んだときの現在日時をメッセージで表示するコード -->
<script>
let d = new Date();
alert(d);
</script>
<script>
要素を書く場所は、<head>
要素の中、または <body>
要素の中です。<head>
要素の中に書く場合は、次のようになります。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>現在の日時</title>
<!-- <head>要素内にJavaScriptコードを埋め込む -->
<script>
let d = new Date();
alert(d);
</script>
</head>
<body>
</body>
</html>
このプログラムの場合は、以下のように <body>
要素の中に書いても同じように動作します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>現在の日時</title>
</head>
<body>
<!-- <body>要素内にJavaScriptコードを埋め込む -->
<script>
let d = new Date();
alert(d);
</script>
</body>
</html>
プログラムの内容によっては、<script>
要素を書く場所に注意が必要です。詳しくは、この後の「エラーになる <script> 要素の書き方」以降で説明します。
2. 外部の JavaScript ファイルに書く
次に、外部ファイルに JavaScript を書く方法です。HTML ファイルとは別に JavaScript ファイルを作成します。<script>
タグは、HTML に JavaScript ファイルを読み込むために使います。
この方法は、HTML と別で JavaScript を書くので、管理がしやすいというメリットがあります。ウェブ開発をする際は、こちらの書き方が一般的です。
まず最初に、HTML と同じフォルダ内に JavaScript ファイルを作成します。ここでは script.js
としていますが、ファイル名は任意です(ファイル名.js
)。
JavaScript ファイルに JavaScript コードを書きます。ここには、<script>
タグは書きません。
// ページを読み込んだときの現在日時をメッセージで表示するコード
let d = new Date();
alert(d);
JavaScript を読み込むための <script>
要素は、次のように書きます。読み込みたい JavaScript ファイル名を src
属性で指定します。終了タグ </script>
を書き忘れないようにしてくださいね。
<script>
要素を書く場所は、HTML ファイルの <head>
要素の中、または <body>
要素の中です。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>現在の日時</title>
<!-- <head>要素内でJavaScriptファイルを読み込む -->
<script src="script.js"></script>
</head>
<body>
</body>
</html>
先ほども述べた通り、プログラムの内容によっては、<script>
要素を書く場所に注意が必要です。次のセクションからは、 <script>
要素の書き方をより詳しく説明していきます。
エラーになる <script> 要素の書き方
<script>
要素は、どこでも好きなところに書けばいいわけではありません。プログラムの内容によって、JavaScript を読み込むタイミングを考える必要があるからです。
例えば、ボタンをクリックしたときにボタンの色を変えたい場合。適切なタイミングで JavaScript が読み込まれていれば、下のような動きになります。ボタンをクリックしてみてください。ボタンの色が変わりますよ。
See the Pen JavaScript - Change Button Color on Click by Pyxofy (@pyxofy) on CodePen.
このようなプログラムの場合は、下のように、<script>
要素を <head>
要素の中に書くとエラーになります。ボタンをクリックしても色は変わりません。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>ボタンの色を変える</title>
<!-- このJavaScriptコードはエラーになって動かない -->
<script>
let btn = document.querySelector("button");
btn.addEventListener("click", () => btn.style.backgroundColor = "red");
</script>
</head>
<body>
<!-- JavaScriptで操作したい<button>要素 -->
<button type="button">ボタン</button>
</body>
</html>
JavaScript のコードは間違っていないのに、なぜエラーになってしまうのでしょうか。理由は次のとおりです。
- ブラウザは HTML を上から読み込んでいきます。
- まだ読み込まれていない HTML は、JavaScript で操作することはできません。
- このプログラムの場合、JavaScript で動きをつけたいのは、ボタン
<button>
要素です。 - そのため、
<button>
要素が読み込まれた後に、JavaScript を読み込む必要があります。 - 正しく動作させるためには、
<button>
要素より下に<script>
要素を書かなければいけません。
このように、<script>
要素を書くときは、JavaScript を読み込むタイミングに注意しなければいけないのです。
<script> 要素の適切な書き方
適切なタイミングで JavaScript を読み込むためには、<script>
要素をどのように書けば良いのでしょうか。その具体的な解決策を2つ見てみましょう。
1. <body> 要素の下部に書く
解決策のひとつは、HTML の</body>
終了タグの直前に <script>
要素を書くことです。こうすることで、全ての HTML が読み込まれた後に JavaScript が読み込まれます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>ボタンの色を変える</title>
</head>
<body>
<button type="button">ボタン</button>
<!-- </body>終了タグの直前にscript要素を書く -->
<script>
let btn = document.querySelector("button");
btn.addEventListener("click", () => btn.style.backgroundColor = "red");
</script>
</body>
</html>
しかし、これでは完全な解決策にならない場合もあります。現在、最も信頼できるとされているのが、次に紹介する方法です。
2. defer、async を使う
適切なタイミングで JavaScript を読み込むための、もうひとつの解決策は、 <script>
要素 にdefer
属性、または、async
属性を使うことです。この方法は、外部ファイルから JavaScript を読み込むときにのみ適用されます。HTML に直接 JavaScript を埋め込む場合は使えません。
外部ファイル script.js
に JavaScript コードを書きます。
let btn = document.querySelector('button');
btn.addEventListener('click', () => btn.style.backgroundColor = 'red');
HTML に <script>
要素を書き、外部ファイル script.js
を読み込みます。defer
属性は <script>
開始タグの中に書きます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>ボタンの色を変える</title>
</head>
<body>
<button type="button">ボタン</button>
<!-- <script>要素にdefer属性を使う -->
<script src="script.js" defer></script>
</body>
</html>
defer
属性を使うと、HTML の読み込みが完了しているかどうかを確認してから JavaScript が実行されるようになります。また、これらの属性を使う場合は、</body>
終了タグの直前に <script>
要素を書く必要はありません。HTML に CSS を追加するときと同様に、<head>
要素の中に書くのが良いとされています。
<head>
要素の中に <script>
要素を書くと、次のようになります。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>ボタンの色を変える</title>
<!-- <head>要素内に<script>要素を書く -->
<script src="script.js" defer></script>
</head>
<body>
<button type="button">ボタン</button>
</body>
</html>
まとめ
今回は、JavaScript の記述場所と、HTML に JavaScript を読み込む方法を紹介しました。
JavaScriptをウェブページで使えるようにするためには、HTML に直接コードを書く場合も、外部ファイルに書く場合も、どちらも <script>
要素が必要になります。JavaScript を適切なタイミングで読み込むための <script>
要素の書き方は覚えておきましょう。
最後まで読んでいただき、ありがとうございます。記事に関するコメントはこちらにお寄せください。Twitter @pyxofy・LinkedIn・Mastodon・Facebook
この記事をシェアしてくれると嬉しいです!