パスワードの代わりになるパスキー、普及の実態と導入の見極めどころ

つくば市のホームページ制作会社

ログイン画面からパスワード入力欄が消えていく流れが、ここ数年で少しずつ現実味を帯びてきた。指紋や顔認証、あるいは端末の画面ロックだけでサインインできるパスキーという仕組みが、主要なブラウザとプラットフォームにひととおり行き渡ったからだ。ただ、身の回りの中小企業サイトを見渡すと、まだパスワード入力欄が主役のままという現場も多い。実際のところ、どこまで広がっているのか。制作者として知っておきたい現状と、導入をどう見極めるかを整理してみたい。

パスワードをやめる話が、ようやく形になってきた

パスキーは、FIDO Allianceとブラウザ標準のWebAuthnを土台にした認証方式だ。端末の中に秘密鍵を保管し、サーバーには公開鍵だけを預ける。ログイン時にはその鍵ペアで署名をやり取りするので、パスワードのように入力した文字列が盗まれたり、偽サイトに打ち込んでしまったりする余地がない。フィッシングに強いと言われるのはこのためだ。

振り返れば、パスワードの弱さを補う工夫はずっと続いてきた。SMSで送る確認コードや、認証アプリが表示する使い捨ての番号を組み合わせる二要素認証がその代表だ。ただ、これらは入力の手間が増えるうえ、SMSは横取りされる危険が指摘され、偽サイトに確認コードごと打ち込んでしまう事故も後を絶たなかった。パスキーは、そもそも打ち込む秘密を作らないという発想で、この積み重なった課題を根本から解こうとしている点が違う。

考え方そのものは2022年ごろから提唱されていたが、規格や運用の裏付けが整ってきたのはここ最近のことだ。米国のNIST(米国立標準技術研究所)は2025年7月に認証基準の改訂版であるSP 800-63-4を確定させ、パスキーを一定の保証レベルを満たす認証手段として正式に位置づけた。規制やガイドラインの側からも後押しが加わり、単なる新機能ではなく、標準的な選択肢のひとつとして扱われ始めている。

主要プラットフォームが出そろった

普及を支えているのは、利用者が特別な準備をしなくても使える環境が整った点だ。AppleのiCloudキーチェーン、GoogleのGoogleパスワードマネージャー、MicrosoftのEntra IDが、いずれも標準でパスキーに対応している。加えて1PasswordやBitwardenといったパスワード管理ソフトも受け皿になり、端末をまたいで鍵を同期できるようになった。

数年前までは、鍵を作った端末を失くしたらどうするのかという不安が導入の足かせだった。クラウド同期が当たり前になったことで、その懸念はかなり薄れている。利用者から見れば、スマートフォンの生体認証でそのままウェブサービスにログインできる感覚に近い。土台が広く共有されたことが、これまでとの大きな違いだ。

実際にどこまで広がっているのか

では、世の中のサイトはどれくらい採用しているのか。ここに興味深い調査がある。2026年のPAM(受動・能動測定)会議で発表された「State of Passkey Authentication in the Wild」という論文だ。研究チームはFidentikitという計測用のクローラーを作り、UI要素やDOM構造、WebAuthnの呼び出し、通信パターンなど43の判定基準を用意して、アクセス数上位10万サイトを一斉に調べた。

結果はどうだったか。調査対象のうち11.3%がパスキーに対応していたという。これは、人手でまとめた既存の対応サイト一覧と比べて62倍という数字で、実際の普及は想像以上に進んでいたことになる。ただし手放しでは喜べない。対応が確認できたのはアクセス数の多い人気サイトに偏っており、しかも自前で実装するのではなく、外部のIDプロバイダー経由で提供しているケースが目立った。裾野が広がったというより、大手が先行しているという構図が見えてくる。

この偏りは、制作の現場感覚とも重なる。大手のように専任の担当者や潤沢な予算があれば、外部のIDプロバイダーを組み込んだり、独自にWebAuthnを実装したりする余力がある。一方で、少人数で運用する会社サイトや小さな会員制サービスでは、既存のログイン機構に手を入れること自体が負担になりやすい。技術が広く使える状態になっても、実際に運用へ載せるかどうかは、体制や優先順位に左右される。数字の裏側には、こうした現場ごとの事情がにじんでいる。

普及を測りにくくしている「見えなさ」

この調査からもうひとつ読み取れるのは、パスキーが外から見えにくい形で埋め込まれているという事実だ。論文によれば、パスキー対応の82.3%は、JavaScriptを実行してAPIの動きを観測しないと検出できなかった。静的なHTMLを眺めるだけでは対応の有無すら判別できない、というわけだ。

実装の仕方もばらばらだ。「パスキーでサインイン」というボタンをはっきり見せるサイトもあれば、複数の手順の奥に隠しているサイト、入力欄に候補を出す条件付きの方式に頼るサイトもある。標準化された案内の入り口が存在しないため、利用者にとっても、どこでパスキーが使えるのか一目では分からない。制作の現場から見ると、この不統一さこそが、パスキーがまだ日常に溶け込みきっていない理由のひとつに思える。使える技術と、使いやすい体験は別物だということだ。

サーバーと端末のズレをそろえるSignal API

実装のつまずきどころとしてよく話題になるのが、サーバー側の登録情報と、端末やパスワード管理ソフトが覚えている鍵情報のズレだ。利用者が管理画面で鍵を削除しても、手元のパスワード管理ソフトには古い鍵が残り、ログイン画面で使えない候補が出てきてしまう。地味だが、迷わせる原因になる。

これを解消するために用意されたのがWebAuthn Signal APIだ。Chromeではバージョン132以降のデスクトップとAndroidで使える。サーバー側の状態を鍵の保管側に伝えるための仕組みで、大きく三つの手段がある。無効になった鍵を知らせるsignalUnknownCredential、有効な鍵の一覧をまとめて送るsignalAllAcceptedCredentials、そして利用者名や表示名の更新を伝えるsignalCurrentUserDetailsだ。これらを使えば、Googleパスワードマネージャーのような対応済みの保管側が、実体に合わせて古い候補を消したり整えたりできる。地味な機能だが、こうした細部の詰めが、実際の使い勝手を左右する。

中小企業サイトはどう構えるか

では、規模の大きくないサイトを預かる制作者はどう向き合えばよいか。まず、いますぐ全面移行を迫られる話ではない、というのが率直なところだ。調査が示すとおり、先行しているのは大手であり、一般的な会員サイトや小規模なサービスでは、パスワードと併用しながら段階的に取り入れる形が現実的だろう。

取り入れる場合のコツも見えてきている。既存のパスワードでログインした直後に「パスキーを作りませんか」と促す自動移行の流れを用意すると、利用者はほとんど手間を感じずに登録できる。導入例では、こうした案内がなめらかなサイトで、半年のうちに5割から7割の利用者が自発的にパスキーへ切り替えたという報告もある。押しつけずに、自然な導線として置くことが鍵になる。

RESONIXでもウェブ制作の現場で認証まわりの相談を受けることがあるが、パスキーはまだ「知っておくべき次の選択肢」という段階だと感じている。無理に急ぐ必要はない一方で、大手サービスで当たり前になれば、利用者の期待値も追いついてくる。仕組みの成り立ちと、いまの普及の偏り、そして実装の細かな落とし穴をおさえておけば、いざ必要になったときに落ち着いて向き合える。パスワードのない世界は、まだ地平線の向こうにあるが、確実に近づいてきている。

命名規則に頼らずCSSの適用範囲を限定できる@scopeが全ブラウザ対応

つくば市のホームページ制作会社

CSSを書いていて、あるコンポーネントに当てたはずのスタイルが思わぬ場所まで波及してしまった経験は、制作に携わる人なら一度はあるはずです。ページ全体に効くというCSSの性質は便利な反面、扱う要素が増えるほど管理を難しくします。この課題に正面から向き合う@scopeという仕組みが、Firefox 146の対応で主要ブラウザに出そろい、Baselineの新しく使える機能に加わりました。

これまでのCSS管理が抱えていた悩み

ウェブサイトのスタイルは、原則としてページ全体に対して効きます。あるボタンの色を変えたつもりが、別の場所にある似た要素まで巻き込んでしまう。ページ数が少ないうちは目視で追えますが、扱う画面が増え、複数人で長く運用するようになると、どこに何が効いているのかを把握しきれなくなっていきます。

こうした事故を避けるため、制作現場では長らく命名規則という工夫が使われてきました。BEMのように、クラス名へ役割や階層を細かく書き込む方式です。名前が重複しなければスタイルも衝突しない、という考え方で、多くの現場を支えてきた実績があります。

ただ、この方法はクラス名が長くなりがちで、書き手によって命名の揺れも生まれます。CSSの設計を保つために、人間の側が規律を守り続ける必要がありました。過去にはShadow DOMのように構造ごと分離する手段もありましたが、導入のハードルは低くありません。@scopeは、この範囲を区切るという役割を、CSSの標準機能そのもので肩代わりしようという発想です。

@scopeが実際にどう書けるのか

基本の形はシンプルです。適用範囲の起点となる要素を指定し、その内側だけにスタイルを効かせます。たとえば@scope (.card) { img { border-radius: 8px; } }と書けば、.cardの内側にある画像だけに角丸が当たります。同じimgでも、カードの外にある画像には影響しません。セレクタを.card imgのように長く連ねなくても、範囲を宣言するだけで意図が伝わります。どの要素にどのスタイルが効くのかが宣言の形からそのまま読み取れるため、後から見返したときの分かりやすさにもつながります。

この範囲の起点を、スコープの上限と呼びます。範囲の中で使える:scopeという擬似クラスは、その起点そのものを指し示すものです。囲った領域全体の背景や余白をまとめて整えたいときなど、起点の要素自体にスタイルを当てたい場面で役立ちます。

下限を決めて入れ子の穴をつくる

@scopeのもう一つの特徴は、範囲の下限も指定できる点です。起点と終点の二つを書くと、その間にある要素だけが対象になります。@scope (.card) to (.card__body) { ... }のように書けば、.cardから.card__bodyの手前までが範囲になります。

カードの中にさらに別のコンポーネントが入れ子になっている場面を思い浮かべてください。外側のカード用のスタイルが、内側に置いた小さな部品まで無用に踏み込んでしまうと、見た目が崩れます。下限を切っておけば、その内側は範囲の外として扱われ、影響を受けません。中央に穴が空いたドーナツになぞらえて、ドーナツスコープと呼ばれることもあります。ニュース一覧の中に埋め込みカードが混ざるような、実際のサイトでよくある構造で効いてくる機能です。

制作現場で使うときに知っておきたいこと

便利な一方で、優先度の扱いには注意が必要です。@scopeで囲んでも、セレクタ自体の詳細度が下がるわけではありません。範囲を絞ったから既存のスタイルに必ず勝てる、とは限らない点は押さえておきたいところです。既存のCSSと併用するときは、どちらが優先されるかを確かめながら進めると安全です。

もう一つ、範囲内で複数の起点が競合したときは、DOM上でより近い起点のスタイルが優先されます。この近さによる判定は従来のCSSにない考え方なので、頭で覚えるより、小さなサンプルで実際に挙動を確かめておくほうが早く馴染めます。

命名規則や大掛かりな設計手法に頼らずに、必要な範囲だけへスタイルを届けられる。少人数で長く手を入れていく中小企業のサイトほど、この素直さは効いてきます。既存のCSSをいきなり書き換える必要はありません。まずは新しく作るコンポーネントの一部で、小さく試すところから始めてみてはいかがでしょうか。

文字を箱の幅にぴったり収めるCSSの新しいプロパティ

つくば市のホームページ制作会社

見出しやキャッチコピーの文字を、置いた箱の幅ぴったりに収めたい。制作の現場では誰もが一度は悩む場面だが、これまではJavaScriptで幅を測って調整したり、文字数を数えてフォントサイズを手で決めたりと、面倒な手当てが必要だった。専用の小さなライブラリを読み込んで文字を伸縮させたり、どうしても揃わない箇所はテキストを画像にして逃げたりと、割り切りを迫られることも多かった。この地味な悩みに、CSSだけで答える新しいプロパティが登場した。

Chromeの開発者向けドキュメントによると、2026年6月30日に安定版となったChrome 150で text-fit プロパティが使えるようになった。テキストノードのフォントサイズを、それを包む箱の幅に合わせて自動で拡大縮小してくれる仕組みだという。文字が短ければ大きく、長ければ小さく、箱の横幅を埋めるようにブラウザ側が調整する。開発者が文字数を数えて刻む必要も、スクリプトで幅を測る必要もなくなるというわけだ。

可変長のテキストで効いてくる

この機能が生きるのは、入る文字の長さが事前に読めない場面だ。CMSで運用しているサイトの見出し、商品名やキャンペーン名のように毎回長さが変わるテキスト、複数言語で文字量が大きく違うページ。こうした箇所でフォントサイズを一定に保つと、短い文字はスカスカに見え、長い文字ははみ出してしまう。text-fit を当てておけば、どんな文字数でも横幅が揃い、ページ全体の見た目が安定する。

似たことを狙う手段として、これまでは clamp() やビューポート単位でフォントサイズを画面幅に連動させる書き方が使われてきた。ただしそれらはあくまで画面の広さに比例させるもので、実際に入っている文字の量には反応しない。text-fit は箱に収まる文字そのものを見て縮尺を決める点が違い、狙いがより素直だ。中小企業のサイトでも、トップのヒーロー見出しやバナーのコピーは案件ごとに長さがまちまちで、運用の途中で文言が差し替わると崩れやすい。ブラウザが幅に合わせてくれるなら、こうした崩れの心配が減り、入稿の自由度も上がる。

ただし今のところ対応しているのはChromeが先行している段階で、ほかのブラウザはこれからだ。すぐに全環境で頼るのではなく、対応していないブラウザでは通常のフォントサイズで表示されるよう土台を整えたうえで、対応環境だけ恩恵を受ける形で足すのが現実的だろう。導入する際も、極端に長い文言を入れたときに文字が小さくなりすぎて読みにくくならないか、想定される最大の長さで一度確認しておくと安心だ。閲覧者の環境によって見え方が変わる機能なので、主要な組み合わせでざっと表示を見ておく手間はかけておきたい。長らくJavaScriptに任せていた処理が、また一つ標準機能に取り込まれていく流れの一つとして覚えておきたい。

パッチ公開後に攻撃が急増したメール送信プラグインの脆弱性

つくば市のホームページ制作会社

ウェブサイトのお問い合わせフォームや会員登録の通知メールを確実に届けるために使われるのが、メール送信系のプラグインです。今回、その代表的なひとつであるGravity SMTPに、設定情報がまるごと外部から読み取れてしまう脆弱性が見つかり、世界中で攻撃が観測されました。約10万サイトが利用していたこと、そして修正版が出た後に攻撃が急増したことから、更新を後回しにしているサイトにとって他人事ではない事例になっています。

ひとつのリクエストで設定情報が丸見えになる仕組み

問題の脆弱性はCVE-2026-4020として公開されました。深刻度は中程度とされていますが、実際の影響は小さくありません。原因は、プラグインが用意していたREST APIの入り口にありました。本来は管理者だけがアクセスできるべきテスト用のエンドポイントが、アクセス権のチェックを常に許可で返す設定になっていたのです。

その結果、ログインしていない誰でも特定のURLを叩くだけで、サイトの設定内容をまとめた診断レポートを受け取れてしまいました。レポートには、メール配信サービスと連携するためのAPIキーやシークレット、OAuthトークンといった、本来は決して外に出してはいけない資格情報が含まれていました。攻撃者から見れば、鍵の束が置かれた扉が開けっ放しになっていたようなものです。しかも返ってくるレポートは数百キロバイトに及ぶ大きなもので、そこに並ぶ項目を眺めるだけで、どこを突けばよいかがひと目で分かってしまいます。

漏れるのはメールの設定だけではない

今回の脆弱性で特に厄介なのは、露出する情報がそのサイトの中だけにとどまらない点です。Gravity SMTPはAmazon SESやGoogle、Mailjet、Resend、Zohoなど外部のメール配信サービスと連携します。つまり漏れた資格情報は、そうした外部サービスのアカウントを操作するための鍵でもあります。

これを手に入れた攻撃者は、正規のサイトになりすまして大量のメールを送りつけたり、迷惑メールの踏み台にしたりできます。送信元が本物のドメインなので受け取った側は見抜きにくく、ブランドの信用にも傷がつきます。診断レポートには利用中のプラグインやテーマ、各種バージョン情報も含まれるため、次の攻撃の下調べにも使われます。ひとつの穴が連鎖的に別の被害へつながっていく構図です。

修正版が出た後に攻撃が急増した

見逃せないのは時間の流れです。開発元はこの問題を修正したバージョン2.1.5を3月に公開していました。ところが攻撃が本格化したのは、それから2か月以上たった5月末から6月にかけてでした。セキュリティ企業のWordfenceは、この脆弱性を狙った攻撃を合計で1700万件以上ブロックしたと報告しています。

なぜ修正後に攻撃が増えるのか。脆弱性の詳細が公開されると、その情報をもとに攻撃を自動化するツールが作られ、更新していないサイトを一斉に探し始めるからです。パッチが出た瞬間が安全の到達点ではなく、むしろ攻撃者にとっての号砲になることもあります。この順序は、規模の大小を問わずすべてのサイト運営者が意識しておきたいところです。

中小規模のサイトが取るべき現実的な対応

まず基本は、プラグインを最新版に保つことです。自動更新を有効にしておけば、修正版が出てから狙われるまでの時間差をかなり縮められます。管理画面を毎日見られない運用でも、更新だけは自動に任せる価値があります。

そして今回のように資格情報が漏れうる脆弱性では、更新だけでは不十分です。すでに露出していた可能性がある以上、連携先サービスのAPIキーやトークンを作り直す、いわゆる再発行が欠かせません。古い鍵を無効にして初めて、盗まれた情報が使えなくなります。地方の制作現場でクライアントのサイトを預かっている場合は、この鍵の入れ替えまでを一連の作業として案内できると安心です。

もう少し長い目で見れば、プラグインを選ぶ段階での目配りも効いてきます。更新の頻度や、脆弱性が報告されたときの対応の速さは、公開されている更新履歴からある程度読み取れます。必要以上に多機能なプラグインを詰め込まないこと、使わなくなったものはこまめに削除することも、攻撃の入り口を減らす地道な守りになります。あわせて、被害に早く気づく備えも役立ちます。連携先サービスの送信履歴や請求額に不自然な急増がないかを時々見ておくと、万一鍵が悪用された場合でも初動を早められます。RESONIXでもサイトを預かる際は、動かすことと同じくらい、こうした更新と権限の設計を大切にしています。

グリッドとフレックスの隙間を線で飾るCSSの新機能

つくば市のホームページ制作会社

ウェブサイトのレイアウトをグリッドやフレックスボックスで組んだあと、要素と要素のあいだに区切り線を入れたくなる場面は多い。カード一覧の列のあいだに細い罫線を引く、料金表のセルを線で仕切る、といった演出だ。ところがこれまでのCSSには、こうした隙間そのものに線を引く手段が用意されていなかった。Chrome と Edge の149で使えるようになった gap decorations は、その長年の空白を埋める機能になる。

これまでは擬似要素や枠線で工夫していた

グリッドやフレックスボックスの gap プロパティは、要素のあいだに余白を作れるが、その余白に色や線を付けることはできない。そのため制作現場では、各セルに border を付けて重なりを調整したり、::before や ::after の擬似要素で線を描いたり、背景にグラデーションを敷いて線に見せかけたりといった回り道をしてきた。

どの方法も、セルの数が変わったり折り返しが起きたりすると崩れやすい。線を引きたいだけなのに、レイアウトの計算まで巻き込んでしまうのが悩みどころだった。gap decorations は、この作業を余白側の仕事として切り出してくれる。

column-rule と row-rule で隙間に線を引く

マルチカラムレイアウトには以前から column-rule というプロパティがあり、段組みの段のあいだに線を引けた。新機能は、この column-rule をグリッドとフレックスボックスでも使えるように広げ、さらに横方向の隙間を担当する row-rule を新たに加えたものだ。

書き方は border とよく似ている。線の太さ、線種、色をそれぞれ column-rule-width、column-rule-style、column-rule-color で指定し、まとめて column-rule として一行で書くこともできる。row-rule も同じ構成だ。

.cards {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
  column-rule: 1px solid #ccc;
  row-rule: 1px solid #ccc;
}

大事なのは、これらの線が純粋に見た目だけの装飾で、余白の幅やレイアウトには一切影響しない点だ。線を足しても要素の位置がずれないので、あとから飾りを差し込む使い方に向いている。

フレックスボックスで要素が複数行に折り返すレイアウトでも、行と行のあいだに row-rule の線がきれいに収まる。列数や行数が中身に応じて変わる動的なレイアウトほど、擬似要素で線を管理する手間から解放される効果は大きい。

repeat()で線のパターンを作る

column-rule-width などには、グリッドのトラック指定でおなじみの repeat() が使える。これを使うと、隙間ごとに太さや色を変えたパターンを短い記述で作れる。たとえば数独の盤面のように、細い線を並べつつ何本かおきに太い線を挟む、といった表現だ。

column-rule-width: repeat(2, 1px) 4px repeat(2, 1px) 4px repeat(2, 1px);

線の位置を隙間の中央から少しずらす column-rule-inset のようなプロパティや、どの隙間に線を引くかを選ぶ仕組みも用意されている。縦の線と横の線が交わる交点の見せ方も細かく制御でき、交点で線を途切れさせるか、そのまま突き抜けさせるか、描画の重なり順をどうするかまで指定できる。単なる区切り線にとどまらず、表やカレンダー、価格表といった格子状のデザインを、擬似要素なしで組み立てられるようになる。

使えるブラウザと取り入れ方

gap decorations が正式に使えるのは、いまのところ Chrome と Edge の149からで、2026年6月に登場した。ほかのブラウザではまだ対応が追いついていないため、現時点では装飾の上乗せとして使うのが無難だ。

幸い、この機能は線を描くだけでレイアウトを動かさない。対応していないブラウザでは線が表示されないだけで、要素の並びや余白は保たれる。つまり、線があれば少し見やすく、なくても困らない、という段階的な取り入れ方ができる。地方の制作現場でも、まずは社内サイトや実験的なページで感触を確かめてから、対応ブラウザの広がりに合わせて本番へ持ち込むのが手堅い進め方になるだろう。

CSSだけで条件分岐や連番を扱えるようになった新しい関数たち

つくば市のホームページ制作会社

これまでCSSでは表現しきれず、JavaScriptやSassのような前処理ツールに任せてきた処理がいくつもありました。要素が並びの中で何番目かを数えたり、条件によって値を出し分けたりといった、いわば「ロジック」にあたる部分です。ここ最近、その領域をCSSの標準機能として扱えるようにする新しい関数がブラウザに入り始めています。中小企業サイトの制作でも、外部ライブラリを一つ減らせる余地が広がってきました。今回はそうした関数を並べて紹介します。

並びの順番を数える sibling-index() と sibling-count()

sibling-index() はその要素が兄弟要素の中で何番目かを返し、sibling-count() は兄弟要素の総数を返します。これまで各要素に少しずつ違う値を割り当てるには、:nth-child() を項目の数だけ書き並べるか、JavaScriptで番号を振るしかありませんでした。

この二つを calc() と組み合わせると、リストの各項目に段階的な遅延を与えるアニメーションが一行で書けます。たとえば animation-delay: calc(sibling-index() * 0.08s) と書けば、項目が5個でも500個でも同じ記述で順番にずれて動きます。ナビゲーションのメニューやカードの一覧を、順に浮かび上がらせるといった演出が、余分なマークアップなしで表現できるわけです。

遅延だけでなく、要素の位置に応じた大きさや透明度の調整、リストへの連番の割り当てなど、数式で表せる装飾なら幅広く応用できます。項目の増減があっても記述を書き直さずに済むため、更新頻度の高いお知らせ一覧や商品の並びといった、中身が動くコンテンツと相性がよい機能です。

値そのものを出し分ける if() 関数

if() は、スタイルクエリやメディアクエリ、機能クエリの結果に応じて、プロパティの値そのものを分岐させる関数です。これまで同じことをするには、状態ごとにクラスを付け替えたり、カスタムプロパティを何段も重ねて条件を組み立てたりする必要がありました。

if() を使うと、たとえばカスタムプロパティの値を見て背景色を切り替える、といった書き分けが一つのプロパティの中で完結します。分岐のたびにセレクタを増やさずに済むため、コンポーネントのスタイルが見通しよく保てます。テーマの切り替えやボタンの種類ごとの装飾など、これまで冗長になりがちだった部分を短く書ける関数です。

たとえば明るい配色と暗い配色を切り替えるサイトで、ボタンや枠線の色を状態に合わせて出し分ける、といった使い方が考えられます。従来はそのためにクラス名の組み合わせが増えていきがちでしたが、値の分岐を一箇所にまとめられると、後から見返したときの読みやすさが変わってきます。

導入時に押さえておきたいブラウザ対応

便利な一方で、対応状況にはまだ差があります。sibling-index() と sibling-count() はChromeが先行して対応し、Safariも追随、Firefoxは実装が進んでいる段階です。if() はさらに新しく、現時点ではChromiumを基盤とするブラウザが中心で、SafariやFirefoxはこれからという位置づけです。

つまり、いますぐ全ての利用者に届く機能とは言い切れません。本番のサイトでは @supports で対応ブラウザを見分け、未対応の環境には従来どおりの書き方を残しておくのが安全です。長くウェブ制作に携わってきた立場からも、こうした新機能は「安全な既定値を先に書き、その上に重ねる」という進め方を勧めたいところです。派手さはありませんが、この順序を守ることで、新しい表現を取り入れつつ表示崩れを避けられます。手元の小さなコンポーネントから試して、感触を確かめてみるのがよさそうです。

ページ遷移を先読みで速くする投機的読み込みの設計と注意点

つくば市のホームページ制作会社

ページを開いた瞬間に次の画面が表示される。そんな体験を、JavaScriptのライブラリを足さずにブラウザの標準機能だけで実現する動きが広がっている。投機的読み込み(speculative loading)と呼ばれる仕組みで、Chromeを中心に実装が進み、WordPressにも標準機能として組み込まれた。表示速度は検索評価にも使い勝手にも直結する話なので、地方の制作現場でも知っておいて損はない。

ただ、この仕組みは入れれば速くなるという単純なものではない。先に読み込むという性質上、アクセス解析の数値が狂ったりサーバーの負荷が増えたりといった副作用がある。今回は投機的読み込みの考え方と、実務で使うときに気をつけたい点を整理してみる。

投機的読み込みとは何か

投機的読み込みは、利用者が次に開きそうなページを、実際にクリックする前にブラウザが裏側で先に取得しておく仕組みだ。土台になっているのがSpeculation Rules APIで、どのURLをどのタイミングで先読みするかをルールとして宣言できる。従来もlink要素によるprefetchのような先読み手段はあったが、Speculation Rules APIはより細かく、より積極的な制御ができる点が違う。

先読みの積極度はeagernessという段階で指定する。控えめな設定はリンクを押した瞬間に動き、中間の設定はリンクにカーソルを合わせたりタップしかけた段階で動く。さらに積極的な設定にすれば、リンクが画面に入った時点で先読みを始める。押してから読み込むのではなく、押しそうな気配を見て先に動くという発想だ。

この気配の読み方はスマートフォンでも工夫が進んでいる。最近のChromeでは、リンクが画面内に入ってから短い時間を置いて先読みを始める挙動が入り、指がまだリンクに触れていない段階でも準備を進められるようになった。マウスのホバーがないタッチ環境では、こうした画面内に入ったという合図が先読みのきっかけとして重みを持つ。

プリフェッチとプリレンダーの違い

投機的読み込みには大きく二つのモードがある。プリフェッチ(prefetch)は次のページのHTMLなど主要な資源を先に取得しておくだけで、ページの組み立ては利用者が実際に移動してから行う。取得済みのぶん移動が速くなるが、効果は限定的だ。

もう一つのプリレンダー(prerender)は、資源の取得だけでなくページの描画まで裏側で済ませてしまう。利用者が移動した瞬間には完成した画面を差し出すだけになるので、体感はほぼ一瞬になる。表示速度の指標で言えばLCPやINPが大きく改善し、ほぼ瞬時と呼べる速さが出る。

効果が大きいぶん、プリレンダーは踏み込んだ挙動になる。描画までするということは、そのページのJavaScriptが裏側で実際に走るということでもある。ここが後述する副作用の入り口になる。

WordPressに標準搭載された投機的読み込み

この仕組みは、WordPress 6.8でコアに取り込まれた。もともとは実験的なプラグインとして提供され、多くのサイトで検証を重ねたうえで安定版に昇格し、コア標準機能になったという経緯がある。特別なプラグインを入れなくても、きれいなパーマリンクを使っているサイトなら初期状態で先読みが働くようになっている。

ただしコアの初期設定は安全側に振ってある。ログインしていない訪問者に対して、控えめな積極度でプリフェッチだけを行う。描画まで踏み込むプリレンダーや、より積極的な設定は初期状態では有効にならない。より強い効果を求める場合は、公式のSpeculative Loadingプラグインを入れると、設定画面からモードや積極度を選べる。プラグイン側の初期値はプリレンダーの中間設定で、コアより一歩踏み込んだ構成になっている。

使いどころとして向いているのは、複数ページを続けて見てもらう性質のサイトだ。ブログや事例紹介、ドキュメント、商品一覧などは相性がよい。一方でカート内や決済の流れのように、先に走らせると困る処理を含むページはプリレンダーの対象から外すのが定石になっている。

先読みが引き起こす副作用

投機的読み込み、とくにプリレンダーで注意したいのがアクセス解析への影響だ。プリレンダーはページのJavaScriptを先に走らせるため、ページ表示を記録する計測タグが、利用者がまだ移動していない段階で発火してしまうことがある。結果として、実際には見られていない訪問がアクセス解析に記録される。

実際にWordPress 6.8の投機的読み込みで、GA4などに幻の訪問が計上される事例が報告されている。数字が水増しされれば、直帰率や滞在時間といった指標の読み方が狂い、サイト改善の判断を誤りかねない。対策として、主要な計測ツールの一部は、ページが実際に表示される瞬間まで計測を保留する仕組みを持っている。導入するなら、使っている計測ツールが先読みに対応しているかを確かめておきたい。

ブラウザ側でも副作用を抑える改良が進んでいる。最近のChromeには、プリレンダー中に最初の外部スクリプトの手前で処理をいったん止め、CSSや画像、フォントの先読みは進めつつ計測タグなどの実行だけを保留する挙動が加わった。裏側で読み込みは進めても、実際に表示されるまで余計な処理を走らせないという方向で、先読みと計測の食い違いを和らげる狙いがある。

もう一つはサーバーへの負荷だ。訪問者が実際に開くより多くのページを先に取得させるので、そのぶんアクセスが増える。多くの閲覧者を抱えるサイトや、動的にページを組み立てる構成では、キャッシュの整備なしに踏み込むと負荷が読みにくくなる。ログイン利用者にまで先読みを広げるかどうかは、サーバーが耐えられるかを見てから決めるのが安全だ。

対応ブラウザの現実

効果の大きい仕組みだが、すべてのブラウザで使えるわけではない点も押さえておきたい。Speculation Rules APIはChromeやEdge、OperaといったChromium系ブラウザで実装されている一方、SafariやFirefoxは現時点で対応していない。対応していないブラウザは、書かれた先読みのルールを単に無視するだけなので、表示が壊れるわけではない。

つまり投機的読み込みは、対応ブラウザの利用者だけが速さの恩恵を受け、それ以外の利用者はこれまで通りという上乗せ型の改善になる。壊れないという安心感がある半面、全員に効く施策ではないので、これ一本で表示速度を語るのは早い。土台となるページ自体の軽さや画像の最適化といった基本があってこそ効いてくる。

中小企業サイトでの取り入れ方

では現場でどう扱うか。まず、WordPressで運用していてきれいなパーマリンクを使っているなら、コアの控えめな先読みはすでに働いている可能性が高い。ここは特別な作業なしに得られている速さなので、まず現状を把握するところから始めるとよい。

そのうえでもう一段速くしたい場合は、プリレンダーへの引き上げを検討する。ただし前述のとおり、アクセス解析の数値と決済まわりの挙動は必ず先に確認する。小さく試して、計測の数字が乱れないか、サーバーの負荷が跳ねないかを見ながら広げるのが現実的だ。ChromeのDevToolsには先読みの挙動を確認する機能があるので、想定通りに動いているかを目で確かめられる。

投機的読み込みは、派手さはないが体感速度をはっきり押し上げる技術だ。ブラウザ標準の仕組みに寄せることで、重いライブラリを足さずに使い勝手を上げられる方向は、限られた予算でサイトを育てる中小の制作現場と相性がよい。副作用を理解したうえで、小さく取り入れていく価値はある。

開閉するUIをブラウザ標準で作る、open擬似クラスが揃える最後のピース

つくば市のホームページ制作会社

ウェブサイトで何かを開いたり閉じたりする操作は、どんなサイトにもあります。ハンバーガーメニューの開閉、問い合わせ前に表示するモーダル、よくある質問のアコーディオン、小さなツールチップ。こうした開閉パーツは長らくJavaScriptのライブラリで組むのが当たり前でした。ところが2026年に入り、ブラウザ標準の機能だけで同じことができる場面がぐっと増えています。

節目になったのが、2026年5月に公開されたSafari 26.5です。ここでopen擬似クラス(:open)が実装され、ChromeやFirefoxと足並みがそろいました。地味な追加に見えますが、標準機能だけで開閉UIを組む流れを後押しする一歩です。詳しくはWebKitの公式ブログでも解説されています。

open擬似クラスが開いた状態をまとめて扱う

:openは、要素が開いている状態にスタイルを当てるための擬似クラスです。対象はdetails要素やdialog要素、それにselect要素や、日付や色を選ぶinput要素のピッカーが開いたときまで含みます。開閉する部品を、種類を問わず同じ書き方で整えられるのが利点です。矢印の向きを変える、背景色を切り替えるといった見た目の調整を、状態ごとにCSSの中で完結させられます。

これまでは[open]属性セレクタで開閉状態を拾っていました。ただしこの書き方が効くのはdetails要素とdialog要素だけで、select要素やinput要素には使えませんでした。細かな差に見えますが、開閉するあらゆる要素を一貫した書き方で扱えるようになった意味は小さくありません。要素の種類ごとに別々のセレクタを覚える負担が減り、スタイルの見通しも良くなります。詳しい対応状況はMDNで確認できます。

標準タグだけで組める開閉パーツ

開閉UIの部品は、ここ数年でブラウザ側にそろってきました。モーダルはdialog要素のshowModalで開けます。背景を暗くする処理やフォーカスの閉じ込め、Escキーで閉じる動きまで、ブラウザがはじめから面倒をみてくれます。ちょっとしたメニューや吹き出しは、HTMLにpopover属性を足すだけで開閉できます。Popover APIは2025年4月に主要ブラウザで安定して使えるようになり、いまでは前提として組み込める土台になりました。popover属性を付けた要素は、外側をクリックしたりEscキーを押したりすると自動的に閉じます。いわゆるライトディスミスの挙動を、自分で書かなくてもブラウザが用意してくれます。

よくある質問のアコーディオンは、details要素とsummary要素だけで作れます。開いたときの見た目は:openで整えれば、開閉の状態管理をJavaScriptで書く必要はありません。ポップオーバーが表示中かどうかは:popover-openでも拾えます。Safari 26.5では、どの要素がポップオーバーを開いたかを知るための仕組みも加わり、複数の開閉部品が絡む画面でも扱いやすくなりました。ボタンを押すと候補が開くドロップダウンのような部品も、こうした標準機能の組み合わせで素直に表現できます。素朴なHTMLの積み重ねで、これまで外部ライブラリに任せていた動きの多くがまかなえます。

制作現場にとっての意味

標準機能に寄せる利点は、まずコードが軽くなることです。開閉のためだけに読み込んでいた外部ライブラリを減らせば、ページの表示は速くなり、保守の手間も下がります。加えて見落としがちなのがアクセシビリティです。dialog要素やpopover属性は、キーボード操作やスクリーンリーダーへの対応がはじめから組み込まれています。自前で作った開閉UIにありがちな、フォーカスが迷子になる、Escキーで閉じないといった不具合を避けやすくなります。ブラウザ標準の挙動に乗るぶん、環境による見え方や操作感のばらつきも抑えやすくなります。

中小企業のサイトでも、問い合わせ導線のモーダルやFAQのアコーディオンなど、使いどころは多いはずです。たとえば、以前はプラグイン頼みで組んでいたFAQの開閉を、details要素と:openだけに置き換えれば、依存が減って動作も安定します。ただし現状では、古いブラウザ向けのフォールバックや、凝ったアニメーションでのCSSとの併用など、細かい調整が要る場面は残ります。それでも、開閉UIの土台をブラウザ任せにできる範囲は着実に広がっています。新しく組むときは、まず標準機能だけで足りるかを出発点に考える価値が出てきました。手が込んだ実装に進むのは、それで届かないところを見極めてからでも遅くありません。