ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
script 要素とは
<script> は HTML にJavaScript を埋め込むための要素です。外部の JS ファイルを読み込むこともできれば、要素内に直接コードを書くこともできます。type 属性を module にすると ES Modules として動作します。
基本構文
外部ファイル読み込み
<script src="/js/app.js"></script>
インラインスクリプト
<script>
console.log("hello from inline script");
</script>
主要な属性
| 属性 | 役割 |
|---|---|
src | 外部 JS ファイルの URL |
type | スクリプトの種類。省略 = JS、module = ES Modules、application/json = JSON データブロック |
async | ダウンロードは並行、実行は完了次第すぐ。順序は保証なし |
defer | ダウンロードは並行、実行はHTML パース完了後、複数あれば記述順に実行 |
integrity | SRI(Subresource Integrity)。ファイルの SHA ハッシュ。改ざん検知に使う |
crossorigin | CORS 設定。CDN からの SRI 付き読み込みで必須 |
nonce | CSP インラインスクリプト許可用のワンタイムトークン |
referrerpolicy | Referer 送信ポリシー |
読み込みタイミングの違い
| 属性 | HTML パース | DL タイミング | 実行タイミング | 順序 |
|---|---|---|---|---|
| 属性なし | 止まる | 到達時に同期 DL | DL 完了直後に即実行 | 記述順 |
| async | 続行 | 並行 DL | DL 完了次第すぐ実行(パース中断) | 不定 |
| defer | 続行 | 並行 DL | HTML パース完了後 | 記述順 |
| type="module" | 続行 | 並行 DL | defer 相当 | 記述順 |
具体例
<!-- 同期: ここに来ると HTML パースが止まる。原則使わない -->
<script src="/js/legacy.js"></script>
<!-- defer: 推奨のデフォルト。DOM 完成後に記述順実行 -->
<script defer src="/js/app.js"></script>
<script defer src="/js/main.js"></script>
<!-- async: 解析と独立。広告・分析タグなどで -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXX"></script>
<!-- ES Modules: 自動的に defer 相当、strict mode -->
<script type="module" src="/js/app.mjs"></script>
type="module"(ES Modules)
type="module" を指定すると ES Modules として読み込まれます。以下の特徴があります。
import/export構文が使える- 自動で strict mode
- 自動で defer 相当のタイミング
- スクリプトのスコープがモジュールスコープ(グローバルを汚さない)
- 同じ URL の重複読み込みはキャッシュされる
<script type="module">
import { greet } from "/js/util.mjs";
greet("World");
</script>
type="application/json"(データブロック)
実行されないデータ用のスクリプトブロックです。JSON-LD(構造化データ)や、JS から後で読み出すためのデータ埋め込みに使います。
<script id="initial-data" type="application/json">
{"user":"Alice","count":3}
</script>
<script>
const data = JSON.parse(
document.getElementById("initial-data").textContent
);
console.log(data.user); // "Alice"
</script>
SRI(Subresource Integrity)
CDN から JS を読むとき、ファイル改ざんを検知するためにハッシュを integrity 属性で検証できます。
<script
src="https://cdn.example.com/lib.js"
integrity="sha384-abc123...xyz"
crossorigin="anonymous"
></script>
CSP との関係
Content Security Policy(CSP)で script-src が制限されていると、外部 URL やインラインスクリプトはブロックされます。インラインを許可するには nonce または hash を使います。
<!-- nonce 付きインラインスクリプト -->
<script nonce="aBcD1234">
console.log("CSP 通過");
</script>Content-Security-Policy: script-src 'self' 'nonce-aBcD1234';
script の置き場所
- <head> 内 + defer — 現在の推奨パターン
- </body> 直前 — 古い対処法。defer が使える今はあまり使わない
- <head> 内で属性なし — レンダリングをブロックするので非推奨
セキュリティ上の注意
- untrusted な文字列を innerHTML / document.write しない — XSS
- ユーザー入力を JS リテラルに直挿入しない
- 外部 CDN は SRI + CSP でガード
- 分析タグなど一括埋め込み系はタグマネージャ経由で管理
script の挿入順序とパフォーマンス
ページの表示速度はJavaScript の読み込み戦略で大きく変わります。同期スクリプトは HTML パースを止めてしまうため、First Contentful Paint(FCP)に直撃します。
- クリティカルでない JS は defer — メイン UI の操作を担う JS のデフォルト
- 独立した広告 / 分析タグは async — 失敗してもページに影響しない
- ファーストビューを描画するための最小スクリプトのみインラインで上部に置く
- 大型ライブラリは動的 import() で必要時のみ読み込み(コード分割)
動的に script を追加する
JS から後付けで <script> を挿入することもできます。サードパーティライブラリの遅延読み込みなどで使います。
function loadScript(src) {
return new Promise((resolve, reject) => {
const s = document.createElement("script");
s.src = src;
s.async = true;
s.onload = () => resolve(s);
s.onerror = () => reject(new Error("load failed: " + src));
document.head.appendChild(s);
});
}
// 必要になったタイミングでロード
button.addEventListener("click", async () => {
await loadScript("/js/chart.min.js");
drawChart();
});
よくあるトラブル
| 症状 | 原因と対処 |
|---|---|
| document.querySelector が null を返す | HTML パース前に実行されている。defer を付けるか DOMContentLoaded を待つ |
| import が SyntaxError | type="module" を付けていない |
| CORS error: NetworkError when attempting to fetch resource | module スクリプトは同一オリジン or CORS 許可サーバが必要 |
| Refused to execute inline script (CSP) | CSP の script-src でインラインがブロックされている。nonce / hash を使う |
関連
- JavaScript — ブラウザ用スクリプト言語
- ES Modules — モダンな JS モジュール仕様
- defer / async — 非同期読み込み属性
- SRI / CSP — スクリプトのセキュリティ
- document.write — レガシーな書き出し API(非推奨)
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
同階層のページ
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 2026-06-22 12:19:10
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?