Insight / 速くて快適なサイト
HTML-first という選択肢 — Astro と Islands
読了目安 8 分
この記事の結論
サイトが遅くなる大きな原因は、ページ全体に行き渡った過剰な JavaScript です。これに対する答えが 「HTML-first」という考え方。静的 HTML を土台にし、検索ボックスやカルーセルなど本当に動く必要のある部分だけを「島(Island)」として動かします。Astro はこの発想を実装するフレームワークで、JavaScript の読み込みタイミングを部分ごとに指定できます。「何 % 速い」と数値で語る話ではなく、JavaScript をゼロから始める構造的な有利さの話です。
1. 遅さの根に「過剰な JavaScript」がある
サイトが遅い・操作がもたつく、その原因を掘り下げると、多くは「JavaScript の量と実行コスト」に行き着きます。Web Almanac 2025 では、メインスレッドがふさがる総量を示す TBT が前年比 58% 増。Web 全体で JavaScript が増え続けています。
問題は、その JavaScript の多くが「実は動かす必要のない部分」にまで載っていることです。会社案内の本文や見出しは、本来ただ表示されればよく、JavaScript で動かす理由はありません。それでも従来型の作り方では、ページ全体に JavaScript が行き渡ってしまいます。
ここから生まれた発想が「そもそも JavaScript をゼロから始め、必要な部分にだけ足す」というアプローチです。これが HTML-first であり、Islands Architecture の出発点です。
2. Islands Architecture という発想
Islands Architecture(アイランド・アーキテクチャ)は、ページを「動かない静的な海」と「動く小さな島」に分けて考える設計の考え方です。土台になるのは、クライアント側で JavaScript を一切動かさない静的 HTML。これが海です。
その上に、検索ボックス・画像のカルーセル・開閉するメニューといった、インタラクティブな部分だけを「島」として配置します。島はそれぞれ独立して動き、島ごとに必要な JavaScript だけが読み込まれます。
従来型のように「ページ全体を JavaScript で組み立て直す」のではなく、「ほぼ完成した HTML に、動く部品だけを後から差し込む」。この切り分けによって、読み込む JavaScript の総量を構造的に小さく保てます。
3. Astro の「HTML-first」とは
Astro は、この Islands の発想を実際のサイト制作に落とし込むための Web フレームワークです。公式が掲げるスローガンが 「HTML-first, JavaScript when necessary」—「まず HTML、JavaScript は必要なときだけ」。
Astro でページを作ると、基本は静的 HTML として書き出されます。本文も見出しもレイアウトも、JavaScript を伴わない素の HTML です。そこにインタラクティブな部品を置きたいときだけ、その部品を「島」として明示的に指定します。
つまり Astro は「JavaScript を載せる」のではなく「載せないのが既定で、載せたいときに宣言する」設計です。デフォルトが軽い側にあるため、作っているうちに自然と JavaScript が膨らむ事故が起きにくくなります。
4. ハイドレーションのタイミング制御
島に JavaScript を読み込ませて「動く状態」にすることを、ハイドレーション(hydration)と呼びます。Astro の特徴は、このハイドレーションのタイミングを島ごとに指定できることです。
指定は client:load(すぐ読み込む)、client:idle(ブラウザが手すきになってから)、client:visible(その島が画面に入ってから)など。たとえばページ下部のカルーセルは、スクロールして見えてから初めて JavaScript を読めば十分です。
この「いつ動かすか」を部品単位で決められることで、最初の表示に必要な JavaScript をさらに絞れます。すぐ必要なものだけ先に、後でいいものは後で。これがハイドレーション制御の実用的な価値です。
5. 中小企業サイトでの現実的な使いどころ
誠実にお伝えすると、Astro や Islands は中小企業サイトに必須のものではありません。動きの少ない会社案内やサービス紹介なら、そもそも素朴な静的 HTML で十分なことも多くあります。
また「Astro は React 比で何 % 速い」といった定量的な比較は、測定条件によって大きく変わるため、ここでは数値での断定はしません。確実に言えるのは、JavaScript をゼロから始めて必要な部分にだけ足す構造は、全体に配る構造より有利だという定性的な事実です。
大切なのはツール名ではなく考え方です。「このページのこの部品は、本当に JavaScript で動かす必要があるか」と一つずつ問う。Islands の発想は、どの作り方を選んでも JavaScript を最小限に保つための指針として役立ちます。
6. 【Top 4】HTML-first を活かす判断
ツールを導入するかどうかにかかわらず、HTML-first の発想を自社サイトに活かすための判断ポイントです。
「動く必要のある部品」を数え上げる — 検索・カルーセル・開閉メニューなど、本当にインタラクティブな部分だけをリスト化する。それ以外は静的 HTML でよい。
JavaScript を「既定でオフ」にする — 載せるのが当たり前ではなく、載せたいときに理由を持って載せる。Astro はこの規律をツール側で支えてくれる。
急がない部品は後で動かす — ページ下部や初回表示に不要な部品は、画面に入ってから・手すきになってから動かす。最初の表示を軽くできる。
ツールありきで考えない — Astro を使うこと自体が目的ではない。動きの少ないサイトなら素の静的 HTML でも目的は達成できる。発想を借りて、手段は身の丈で選ぶ。
HTML-first は「流行のツール」ではなく「規律」です。ページに不要な JavaScript を載せない、という規律を持てば、どの作り方でも速いサイトに近づきます。T.C.HARTON は全ページの JavaScript 量と Core Web Vitals を実測し、方法論ページで公開しています。まずは現状サイトに「不要な JavaScript」がないかを確認することから始められます。
よくある質問
- Islands Architecture とは何ですか?
- Islands Architecture は、クライアント側で JavaScript を動かさない静的 HTML をページの土台にし、検索ボックスやカルーセルなどインタラクティブな部分だけを「島」として個別に動かす設計の考え方です。ページ全体に JavaScript を行き渡らせる従来型と違い、動く必要のある部分にだけ JavaScript を限定します。
- Astro とはどんなツールですか?
- Astro は「HTML-first, JavaScript when necessary(まず HTML、JavaScript は必要なときだけ)」を掲げる Web フレームワークです。ページを静的 HTML として書き出し、インタラクティブな部分には client:load・client:idle・client:visible といった指示で、JavaScript を読み込むタイミングを部分ごとに制御できます。
- Astro は従来の作り方より速いのですか?
- 「何パーセント速い」という定量的な比較は測定条件に左右されるため断定はできません。ただし Astro や Islands Architecture は、JavaScript をゼロの状態から始めて必要な部分にだけ足していく構造のため、ページ全体に JavaScript を配る従来型より、表示や応答性の面で構造的に有利です。
- 中小企業のサイトに Astro は必要ですか?
- 必須ではありません。重要なのはツール名ではなく「ページに不要な JavaScript を載せない」という考え方です。会社案内やサービス紹介のように動きの少ないページなら、そもそも静的 HTML で十分なこともあります。Islands の発想は、どの作り方を選んでも JavaScript を最小限に保つ指針として役立ちます。
関連記事
出典
- patterns.dev, Islands Architecture — patterns.dev/vanilla/islands-architecture
- Astro 公式サイト — astro.build
- Web Almanac 2025, Performance — almanac.httparchive.org/en/2025/performance
- web.dev, Web Vitals — web.dev/articles/vitals
Free Diagnosis
あなたのサイトに、不要な JavaScript はありませんか
無料診断では、現状サイトの JavaScript 量と Core Web Vitals を実測し、削れる余地をお見せします。発注前に「成功の基準」を一緒に決めます。診断だけで終わっても費用は一切かかりません。
1 分で無料診断を申し込む