ライブラリの棚卸しにBaselineを使うという発想

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

一度入れた外部ライブラリを、あとから見直すことはあまりない。動いているし、テストも通っているし、あえて触る理由がない。ただ、その間にもブラウザ側は動いていて、いま package.json に並んでいるもののうち何割かは、すでにブラウザが自前で持っている機能と重なっている。Smashing Magazine に出た依存関係の棚卸しの記事が、その重なりを具体的な数字で示していて面白かった。

入れたきりの依存が積み上がっていく

記事によると、中規模のJavaScriptアプリでは、圧縮後でおよそ60KBから90KB分の依存が、いまやブラウザ側で代替できる範囲に入っているという。日付や数値の書式、HTTP通信、モーダル、ツールチップ、オブジェクトの複製、配列のグループ化。数年前までは確かに穴だった領域が、順に埋まってきた結果だ。

それでもライブラリが残り続けるのは、怠慢だからではないと筆者は書いている。セキュリティの観点で npm audit は回していても、「このライブラリは今もブラウザにできないことをやっているのか」という問いを立てる機会が、そもそも運用の中に組み込まれていない。だから入れたまま何年も過ぎる。複数サイトの保守を抱えている制作の現場だと、この感覚は身に覚えがあるのではないかと思う。

Baselineという安全度の目盛り

棚卸しの物差しとして使われているのが Baseline だ。WebDX Community Group による指標で、ある機能が主要ブラウザ(Chrome、Edge、Firefox、Safari)でどこまで安全に使えるかを三段階で示す。全エンジンには載っていない「限定的な利用可能性」、出そろった直後の「新しく利用可能」、出そろってから30か月が経った「広く利用可能」という並びになっている。

この30か月の差が、棚卸しでは効いてくる。広く利用可能なものは、基本的に今日そのまま置き換えを検討できる。新しく利用可能な段階のものは、自分のサイトの訪問者層を確かめてから決める話になる。状態は webstatus.dev や、MDN の各機能ページに付いているバッジで引ける。

消す前に通しておきたい三つの問い

「ブラウザができるようになった」と読んで、すぐ削り始めないほうがいい、というのが記事の立場だ。紙の上では無料に見える置き換えが、一部の利用者の環境を静かに壊すことがあるし、気づかずに頼っていた機能を落とすこともある。そこで、削る前に三つ確認する。

ひとつめは、代替となる機能が自分の利用者にとって安全かどうか。一般論としてのBaselineではなく、アクセス解析や browserslist の設定と突き合わせて判断する。社内向けの管理画面と、古い端末からの流入が長く続く一般向けサイトでは、答えが変わる。

ふたつめは、置き換えの費用。ブラウザ側の対応が足りずポリフィルを足すことになり、それが外したライブラリより重ければ、容量は増えている。

みっつめは、ブラウザの機能が実際の使い方をカバーしているか。ライブラリは見た目の似た標準機能より多くの仕事をしていることが多い。記事が挙げているのが axios で、fetch に置き換えると、404や500で拒否されない、共通処理を差し込むインターセプタがない、自動再試行がない、アップロードの進捗が取れない、といった差が出る。実際にどこまで使っているかを見てから決める、という順番になる。

置き換えが効きやすいのは書式と画面部品まわり

記事はライブラリを一個ずつではなく、かたまりで見ていく。いちばん取りやすいのが国際化まわりで、相対時間、数値や通貨の書式、複数形、配列を文章に連結する処理は、ブラウザの Intl 系で大半が置き換えられる。この一群でおよそ14KBという計算だ。ただし継続時間の書式は主要エンジンに出そろったのが2025年3月で、広く利用可能になるのは2027年の見込みとされている。

もうひとつ大きいのが画面部品で、こちらはツールチップやポップオーバーのライブラリまで含めて合計およそ24KB。このうちモーダル用のライブラリ、フォーカスを閉じ込める処理、背景のスクロールを止める処理が、dialog要素とCSSの一行にまとまる。showModal で開けば、フォーカスが中に移り、背後が操作できなくなり、Escapeで閉じ、閉じたあとは元の要素にフォーカスが戻る。重なり順もブラウザが面倒を見るので、z-index と格闘しなくてよくなる。手書きの実装より結果的に読み上げ環境への配慮が行き届く、という指摘もうなずける。

通信まわりも同じ見方ができる。よく使われるHTTPクライアントは圧縮後で17KBから19KBほどあり、単純な取得や送信であれば fetch と中断用の仕組みで足りる。タイムアウトも標準の指定で書ける。ここは前述のみっつめの問いが効く場所で、共通処理や再試行に頼っているなら、外した分を自分で書き直すことになる。

配列やオブジェクトの操作も、グループ化や深い複製、集合の和や積は標準側に入った。一方で debounce と throttle には今も標準の代わりがないので、そこは残す。全部捨てるという話ではなく、ブラウザがすでに持っている部分を二重に配らない、という整理だ。

今は手放さないという判断も同じ枠組みから出る

この記事の良いところは、置き換えない例をきちんと入れているところだ。JavaScriptの日付処理を置き換える Temporal は、2026年3月に仕様策定の最終段階に達し、Firefox と Chrome には載ったが、Safari の安定版にはまだ来ていない。全ブラウザで使うにはポリフィルが要る。

そこで数字を並べると、軽量な日付ライブラリが圧縮後3KB程度なのに対し、公式のポリフィルは44KB前後ある。今すぐ乗り換えると容量は減るどころか増える。三つの問いに通すと、機能の良さでは勝っていても、利用者の範囲と費用で落ちる。だから今は現状維持で、Safari が対応してBaselineに入った時点でもう一度見る。判断を「保留」として記録しておける枠組みは、実務では地味に効く。

ブラウザ側の受け皿は今も増えている

置き換え先が増え続けているのも事実で、Chrome 150では、矢印キーでの移動やフォーカス位置の記憶を属性の指定だけで賄える focusgroup が入った。従来は tabindex を書き換える手書きのスクリプトで実現していた部分だ。文字を枠幅に合わせて拡縮する text-fit や、border-image の回り道なしでグラデーションの枠線を描ける background-clip の新しい値も同じ流れにある。

続く Chrome 151 のベータでは、コンポーネントの内側にある要素を aria-labelledby などから参照できる仕組みや、複合的な部品の中の補助的な操作を支援技術に伝える aria-actions が挙がっている。手書きのJavaScriptで補っていた振る舞いが、少しずつ宣言的な記述に移っていく。

中小企業向けのサイトだと、そもそも巨大な依存を抱えていないことも多い。それでも、テーマやプラグインが読み込んでいるものを一度数えてみる価値はある。四半期に一度、本番に出ている依存だけを並べ、それぞれが実際のビルドでどれだけ容量を占めているかを解析ツールで測り、代わりになる機能のBaselineの状態を確かめる。そのうえで先ほどの三つの問いに通し、いま標準になっているものを返していく。それだけで表示は軽くなり、更新を追いかける対象も減る。まずは一つの分野だけ選んで手元の設定ファイルを開いてみる、という始め方が現実的だと思う。

読み込み直さない画面切り替えの速さをChromeが測れるようになった

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

サイトの表示速度を測る指標として、Core Web Vitalsはすっかり定着しました。ところが、この指標には長らく穴があると言われてきました。ページを読み込み直さずに中身だけを差し替える作りのサイトでは、最初の一回しか計測されないという問題です。Chromeの最新版で、この部分をブラウザ側で測る仕組みが正式に使えるようになりました。

Chromeの開発者向け資料によると、Soft Navigations APIと呼ばれるこの機能は、試験運用の期間を経て、2026年7月に公開された版から設定を切り替えずに利用できるようになりました。名前のとおり、ソフトナビゲーション、つまり読み込み直さない画面遷移を計測の対象にするものです。

これまで測れていなかった部分

従来のCore Web Vitalsは、ブラウザがURLを開いて新しい文書を読み込む、いわゆる通常の遷移を前提に設計されています。表示までの時間を示すLCP、レイアウトのずれを示すCLS、操作への反応を示すINPは、どれもそのページが開かれた時点を起点に集計されます。

JavaScriptで画面を組み立てる作りのサイトでは、二画面目以降はURLだけが書き換わり、文書の読み込みは起きません。ブラウザから見れば一枚のページがずっと開かれたままなので、二画面目の表示がどれだけ遅くても、最初の一枚の数字に埋もれてしまいます。逆に、最初の表示さえ速ければ全体が良好に見えてしまうこともありました。計測ツール側で独自に区切りを入れる回避策はありましたが、実装ごとに基準が違い、横に並べて比べられる数字にはなりにくい状態でした。

ブラウザはどこで区切りを判断するのか

新しい仕組みでは、ブラウザ自身が三つの条件をもとに画面の切り替わりを見分けます。利用者の操作がきっかけになっていること、利用者から見えるURLの変化を伴うこと、そしてその結果として実際に画面が描き直されること。この三つがそろったときに、ひとつの区切りとして扱われます。

あくまで推測にもとづく判定なので、公式の説明でも、サイトの作り方によっては拾いすぎたり拾いそこねたりすることがあると断っています。それでも、判定の基準がブラウザ側に統一されたこと自体に意味があります。計測ツールを乗り換えても、同じ考え方で区切られた数字が並ぶからです。

計測する側で増えたもの

開発者から見ると、パフォーマンス情報を受け取る仕組みに新しい種類の記録が追加された形になります。切り替わりそのものを表す記録と、切り替わったあとの主要な描画を表す記録が加わり、既存の各種タイミング情報にも何番目の遷移かを示す値が付くようになりました。これで、ひとつの記録がどの画面のものかを判別できます。

ただし、これらを直接扱うのはそれなりに骨が折れます。読み込み直さない遷移では最初の応答までの時間がゼロとして扱われるなど、通常の遷移とは数字の意味が変わる場面もあるためです。Googleが公開している計測用のライブラリweb-vitalsは、新しい版でこのあたりを内部で吸収するようになっており、URLの対応付けや数値のリセットを任せられます。自前で計測基盤を持っているところ以外は、ライブラリの更新に乗るほうが現実的でしょう。

今すぐ効いてくる話ではない

注意しておきたいのは、この計測結果が検索での評価にそのまま反映されるわけではない点です。実利用者のデータを集めたChrome User Experience Reportにも読み込み直さない遷移の分を加えることは目指されていますが、どのような形で反映されるかは未定とされています。対応もChromium系のブラウザに限られます。つまり現時点では、自分たちで測って改善に使うための道具という位置づけになります。

WordPressで作られた一般的な企業サイトのように、リンクを踏むたびにページを読み込み直す作りであれば、直接の影響はほとんどありません。関わってくるのは、予約や検索の絞り込み、会員向けの管理画面など、画面の一部だけを差し替える作りを取り入れている場合です。最近はView Transitionsのように、通常の遷移でもアプリらしい見せ方ができる手段が増えており、境目は少しずつ曖昧になっています。

数字が見えるようになると、これまで感覚で語られていた二画面目が重いという話を、根拠を持って共有できるようになります。制作側と運用側で改善の優先順位を決めるとき、この差は思ったより大きいはずです。

地域ごとの週の始まりや暦をブラウザ標準で引ける仕組み

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

日付まわりの表示は、サイトを作っていればどこかで必ず触ることになります。予約フォームのカレンダー、記事の投稿日、営業日の一覧。一見どれも単純ですが、対象の地域が変わると前提そのものが変わります。週の始まりは日曜なのか月曜なのか、週末はどの曜日にあたるのか、どの暦を併記するのか。こうした知識は、これまでブラウザの外から持ってくるしかありませんでした。

2026年7月、JavaScriptの国際化機能であるIntl.Localeに加わった一連のメソッドが、主要ブラウザすべてで使える状態になりました。web.devの月次まとめによると、Firefox 153が対応したことで、Baselineの「新しく利用可能」に入ったとされています。地味な機能ですが、カレンダー部品を自作したことがある人ほど、ありがたみが分かる種類の追加です。

これまでは辞書を自前で抱えていた

「この地域では週が月曜から始まる」といった知識は、CLDRという国際的なデータベースにまとめられています。ただ、ブラウザからその中身を直接引く手段が長らくなく、カレンダーの見た目を自分で組む場合は、データの一部を写し取ったライブラリを読み込むのが普通でした。週の初日を表す値ひとつのために、数十キロバイトの追加読み込みが発生することも珍しくありません。

Intl自体はかなり前からあり、Intl.DateTimeFormatを使えば日付を地域の書式に整えることはできました。ただしそれは整形済みの文字列が返ってくるだけで、UIを自分で組み立てるために必要な素の情報、たとえば曜日を並べる順番の起点までは取り出せません。今回埋まったのは、ちょうどこの隙間にあたる部分です。

Intl.Localeから引けるようになった情報

書き方は素直で、ロケールを表すオブジェクトを作ってメソッドを呼ぶだけです。new Intl.Locale("ja-JP").getWeekInfo() のように書くと、週の始まりの曜日、週末にあたる曜日、その年の最初の週とみなすための最小日数がまとめて返ってきます。曜日は1が月曜、7が日曜という決まりになっています。

同じ要領で、その地域で使われる暦の一覧を返す getCalendars()、時刻を12時間制と24時間制のどちらで扱うかを返す getHourCycles()、文字を左から右に並べるか右から左に並べるかを返す getTextInfo()、地域に結び付いたタイムゾーンの一覧を返す getTimeZones() が用意されています。ほかに数字の表記体系や並べ替えの規則を返すものもあり、いずれも MDNのIntl.Localeのページに一覧があります。

返ってくるのは配列や小さなオブジェクトなので、そのまま画面に出すというより、自分のUIの初期値として使う性格のものです。

日本語のサイトで効いてくる場面

日本のロケールで getCalendars() を呼ぶと、グレゴリオ暦と和暦の識別子が返ってきます。行政関連の書類を扱うサイトや、年号の併記が求められる申込フォームでは、この結果を起点にIntl.DateTimeFormatへ和暦を指定する、という流れが自然に組めます。和暦を出すかどうかを地域の慣習として扱えるので、判定を自前のif文で書き分けずに済みます。

週の始まりも実務的です。日本語圏では日曜始まり、英国では月曜始まりというように、カレンダーの見た目は地域で割れます。多言語対応のサイトで同じカレンダー部品を使い回すとき、対応表を自分で抱えなくてよくなるのは負担が減るところです。予約カレンダーや営業日の表示は、中小企業のサイトでも決して珍しい要素ではありません。

使う前に確認しておきたいところ

Baselineの「新しく利用可能」は、主要ブラウザの最新版で動くという意味であって、少し前の端末まで含めて安全という意味ではありません。企業サイトの訪問者には更新の止まった端末も混ざりますから、メソッドがあるかどうかを確かめて、無ければ従来どおりの既定値を使う、という組み方が現実的です。値が取れなくても表示が壊れないようにしておけば十分です。

もう一点、以前の実装ではメソッドではなくプロパティとして提供されていた時期があります。古い解説記事のコードをそのまま持ってくると動かないことがあるので、参照する情報の新しさには注意しておきたいところです。

外部ライブラリに頼っていた小さな機能が標準側に移ると、依存パッケージがひとつ減り、更新の手間もその分軽くなります。派手さはありませんが、次にカレンダーまわりを触る機会があれば、置き換えられる部分がないか見ておく価値はありそうです。

JavaScriptで組んでいた部品がHTML側に移りつつある

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

ウェブ制作の現場で長く続いてきた作業のひとつが、ブラウザに足りない機能をJavaScriptで補うことでした。開閉するパネル、画面全体に出るダイアログ、装飾された選択メニュー。本来はただの部品なのに、ライブラリを読み込み、初期化のコードを書き、キーボード操作や読み上げの面倒まで見て、数年後の保守で頭を抱える。制作に関わっていれば、たいてい心当たりのある流れだと思います。

ここ数年、その前提が少しずつ変わってきています。7月28日に安定版が出たChromeの最新版の変更点を眺めると、方向がかなりはっきり見えます。カメラとマイクの扱い、Shadow DOMの組み立て、画面切り替えの計測。どれもこれまではJavaScriptの領分だったものが、HTMLの要素や属性、あるいはブラウザ標準の計測項目として整理されつつあります。今回はこの流れを、直近のブラウザ各社の動きと並べて眺めてみます。

カメラとマイクの入口がHTMLの要素になる

目を引くのは usermedia という新しい要素です。ブラウザが用意した操作部品として画面に置かれ、そこからカメラやマイクの利用が始まります。Chromeの開発者向けブログによると、利用者の意図をはっきりさせた上で許可を求め、映像や音声のストリームを受け取るところまでを、この要素が受け持つとされています。

従来はJavaScriptから取得用の関数を呼ぶと、いきなりブラウザの許可ダイアログが出る作りでした。押した覚えのないタイミングで「カメラを使いますか」と聞かれれば、多くの人はまず拒否します。そして一度拒否されると、設定から手で戻してもらうしかない。許可の取りこぼしは技術の問題ではなく導線の設計の問題で、その導線をブラウザ側に寄せるという判断は理にかなっています。

使いどころとしては、オンライン相談の受付ページ、採用ページで応募者に短い動画を録ってもらう仕組み、業務用の写真アップロードなどが考えられます。ただし現時点ではChromeだけの機能なので、これ抜きでも成立する作りにした上で、対応ブラウザでは体験が良くなる、という積み方が現実的です。

影の中の差し込み口も属性で書ける

同じ版では、template 要素に shadowrootslotassignment という属性が加わりました。Shadow DOMの中で、どの中身をどの差し込み口に入れるかを手動で割り当てる指定です。これまでは JavaScript から Shadow DOM を作るときにオプションで渡すしかなく、スクリプトが動くまで組み立てが完了しませんでした。

地味な変更に見えますが、意味は小さくありません。サーバー側が吐き出したHTMLだけで部品が完成するなら、最初の表示が崩れて後から整うという、あの落ち着かない一瞬が減ります。PHPでHTMLを組み立てるWordPressのような環境とも相性が良く、ブロックやテーマの作り込みで恩恵を受ける場面はありそうです。

見た目の調整からスクリプトが抜けていく

この半年ほどの各ブラウザの更新を並べると、同じ傾向がもっと広い範囲で起きていることが分かります。グリッドやフレックスの隙間に線を引く指定、箱の幅に合わせて文字の大きさを自動調整する指定、入力欄が中身の量に応じて伸縮する指定。最後のものはFirefoxが対応したことで、主要なブラウザエンジンすべてで使える状態になりました。矢印キーでの移動先をまとめて宣言できる属性も加わっています。

どれも、かつては手で書いていた処理です。文字幅を測って収まるまで縮めるコード、入力のたびに高さを再計算するコード、キーボード操作を自前で組み立てるコード。案件ごとにコピーして、少しずつ挙動が違う状態で増えていく類のものでした。それが数行のCSSや属性ひとつに置き換わるなら、書く量が減るだけでなく、動作の説明もしやすくなります。

制作者側の実利は、たぶん「新しい表現ができる」よりも「消せるコードが増える」ところにあります。納品後に触る人が読む量が減るのは、それ自体が品質です。

足並みがそろわない例もある

とはいえ、宣言的に書ける方向へ一直線に進んでいるわけではありません。分かりやすい例が、選択メニューの見た目を自由に整えられる仕組みです。Chromeでは去年のうちに安定版に入り、Safariは開発者向けの先行版で確認できる段階、Firefoxは試験版でフラグを立てて試す段階。MDNの解説でも、広く使われるブラウザの一部で動かないため安定して使える状態には達していない、という位置づけになっています。

ブラウザごとの歩幅の違いも、この7月にそのまま表れました。Chromeが新しい要素を入れた前日にはSafariの更新版が出ていますが、こちらはWebAssemblyまわりの小さな追加と、CSSや通信の不具合修正が中心です。文字の大きさの単位が拡大表示でずれる問題や、要素の配置指定が意図した位置に戻らない問題が直されています。新機能を並べる回もあれば、土台を固める回もある、というだけの話ですが、対応状況を「だいたい揃った」で済ませられない理由ではあります。

ブラウザ間の差を埋める取り組みとしては、Apple、Google、Igalia、Microsoft、Mozillaが共同で進めるInterop(相互運用性)のプロジェクトがあります。今年の重点領域は二十近く挙げられており、テストの通過率がダッシュボードで公開されているので、気になる機能の足並みを自分で確かめられます。営業資料に「最新の書き方に対応」と書く前に、こういう一次情報で裏を取る癖をつけておくと安全です。

体感速度の測り方も追いついてきた

もうひとつ、Chromeの最新版には計測まわりの追加があります。画面を読み込み直さずに表示を切り替える作りで、その切り替えを一区切りとして扱い、操作をきっかけに描かれた主要な内容が出るまでを測れるようになりました。

これは長く空いていた穴です。表示速度の指標は最初の一画面に強い一方、その後の画面遷移は測りにくく、「最初は速いのに使い始めると重い」という感想を数字で示せませんでした。予約フォーム、商品の絞り込み、地図の切り替えなど、中小企業のサイトでも読み込みを挟まず描き替える作りは増えています。改善の順番を決めるときに、体感に近い数字が手元にあるかどうかは大きな差になります。

もっとも、指標が増えれば追う手間も増えます。全部を見るのではなく、その画面で一番使われる操作をひとつ決めて、その前後だけ測るくらいでも十分に判断材料になります。

どこから取り入れるか

実務での見極めは、三つに分けて考えると迷いません。まず、主要なブラウザすべてで使える状態になったものは、素直に置き換えの候補にできます。入力欄の伸縮や要素同士を結びつける配置指定はこの段階です。次に、特定のブラウザだけで動くものは、無くても成立する上乗せとして扱う。カメラの新しい要素は今のところここに入ります。最後に、置き換えによって読み込んでいるライブラリやプラグインを一つ減らせるかどうかを見る。減らせるなら優先度は上がります。

この最後の観点が、長く運用するサイトでは一番効きます。数年前に選んだライブラリの更新が止まり、依存関係の警告だけが増えていくという話は珍しくありません。ブラウザに入った機能は簡単には消えないので、同じことができるなら標準の側に寄せておくほうが、後々の手間は少なくて済みます。

新機能の一覧を追いかけるのは楽しい作業ですが、実利という意味では逆向きの棚卸しのほうが効くのかもしれません。いま抱えているJavaScriptのうち、どれがすでにHTMLやCSSで書けるようになっているのか。手元の案件をひとつ開いて、読み込んでいるファイルを上から見ていくだけでも、消せる候補はいくつか見つかるはずです。

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

インストール済みPWAをドメイン変更後も引き継ぐ新しい仕組み

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

ウェブアプリをスマートフォンのホーム画面に追加できるPWA(プログレッシブウェブアプリ)の普及が進むなか、制作現場での課題のひとつが「ドメインやURLを変えると既存のインストールが引き継げない」問題だった。リブランディングや技術的な再構成でオリジンが変わると、それまでインストールしてもらったユーザーは古いアプリを手動でアンインストールして新しいURLから再インストールするしかなく、この一手間がユーザー離れにつながることも珍しくなかった。

Chrome 150(2026年6月にベータ版公開)では、この問題を解消するPWA Origin Migrationという仕組みが新たに導入された。Chrome for Developersの公式ブログによると、新しいオリジンのウェブアプリマニフェストに migrate_from フィールドを追加することで、既存のインストール済みアプリをシームレスに移行できるようになる。ユーザー側には通常のアプリ更新と似たダイアログが表示され、ワンクリックで古いアプリがアンインストールされ、新しいURLのアプリが即座にインストール・起動される。

この機能を利用するには、新しいオリジン側のマニフェストに migrate_from を記述するだけでなく、移行元となる旧ドメイン側にも明示的な承認が必要になる。具体的には、旧ドメインの .well-known/web-app-origin-association というファイルに移行先のURLと allow_migration の許可を記載する仕組みだ。このふたつの設定を両側で行うことで、第三者が無断で他社のPWAを乗っ取るリスクを排除している。現時点では移行先は同じeTLD+1(たとえば同じドメイン内のサブドメイン変更やパス変更など)に限られており、まったく別の組織のドメインへの移行には対応していない。移行の強制度は suggest(通知のみで継続も選べる)と force(ダイアログで必ず選択が必要)の二段階から選べるため、サービスの状況に応じた移行体験を設計できる。

これまでPWAをインストールしてもらったユーザーは、ドメイン変更という技術的な事情に関係なくアプリを使い続けられるのが理想だった。一方で開発者にとっては「新しいインストールへ誘導する手立てがない」という制約が長く続いており、URLの変更をためらう原因のひとつにもなっていた。今回の仕組みはその制約を取り除くもので、PWAを実運用しているチームにとっては歓迎される変化だろう。

制作現場でPWAを手がけている場合、特にサブドメイン変更や構成の整理を予定しているプロジェクトでは、Chrome 150の正式リリース後に対応を確認しておきたい。現在はChrome限定の機能だが、こうした移行の仕組みをウェブ標準の場で議論し整備していくことで、PWAをより長期的に安定して使える基盤が育っていく。

Document Picture-in-Picture APIが制作現場を変える、新時代のマルチタスク体験を作る仕組み

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

ウェブ制作の世界で新しい風が吹いています。これまで<video>要素でしか利用できなかったピクチャー・イン・ピクチャー機能が、任意のHTML要素を扱えるDocument Picture-in-Picture APIによって大きく進化しました。Firefox 151がこのAPIをデスクトップで正式サポートしたことで、主要ブラウザでの実用段階が近づいています。制作者にとって、これまで不可能だった新しいユーザー体験を構築できる転換点になるかもしれません。

従来の制限を超える新しい可能性

これまでのPicture-in-Picture APIは<video>要素に限定されており、カスタムコントロールやインタラクティブな要素の追加が困難でした。Document Picture-in-Picture APIは、任意のHTML要素を常に最前面に表示される独立したウィンドウに配置できる画期的な機能です。

ビデオ会議でのカスタムコントロール、動画プレーヤーでの詳細設定など、これまでブラウザタブを切り替える必要があった作業を、メインコンテンツを見ながら並行して実行できます。ウェブアプリケーションの利用体験が根本的に変わる可能性を秘めています。

ブラウザサポートの現状と実装の注意点

Chrome 116から既に実装されており、Firefox 151でデスクトップサポートが追加されました。ただし、全ての主要ブラウザで利用可能ではない段階のため、実装時には機能検出とフォールバック機能の準備が必要です。

APIの利用方法は比較的シンプルで、documentPictureInPicture.requestWindow()を呼び出して独立したウィンドウを作成し、そこに任意のHTML要素を配置できます。ブラウザサポートの確認とフォールバック機能の実装が重要で、対応していない環境では別のUI体験を提供する必要があります。

制作現場での活用事例と実践

実際の制作現場では、様々な場面で活用できる可能性があります。ビデオ会議中に他の作業をする際の参加者表示、コード学習プラットフォームでの結果プレビュー表示、生産性アプリでのタイマーやメモ機能など、ユーザーのマルチタスクを支援する機能として威力を発揮します。

実装時には、元のページのCSSスタイルシートを適切にコピーして、一貫した見た目を保つことが重要です。また、CSS display mode media featureのpicture-in-picture値を使用して、ピクチャー・イン・ピクチャーモード専用のスタイルを適用できます。

将来への展望と制作者への影響

このAPIの普及により、ウェブアプリケーションの設計思想が変化する可能性があります。従来のシングルウィンドウ前提の設計から、マルチウィンドウを活用した新しいユーザー体験の設計へのシフトが期待されます。

プログレッシブ・エンハンスメントの観点から、対応ブラウザでは新機能を提供し、非対応環境では従来通りの機能を維持するアプローチが現実的です。制作者にとっては、新しい技術を段階的に導入しながら、幅広いユーザーへの配慮を両立できる良い例といえるでしょう。

Document Picture-in-Picture APIは、ウェブ制作におけるユーザー体験設計の新しい選択肢を提供します。現時点では限定的なブラウザサポートですが、将来的には標準的な機能として定着する可能性があり、制作者が注目すべき技術の一つです。

CSS scroll-triggered animations機能がChrome 145で実用化、スクロールベース新時代の動きが制作現場へ

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

Chrome 145でscroll-triggered animations機能がリリースされ、スクロール時に特定の位置でトリガーされる時間ベースアニメーションが可能になりました。これまでIntersectionObserver APIで実装していた効果を、CSSだけで宣言的に記述できます。

Animation Timeline APIの対応状況は現在約85%に達しており、Firefoxでも完全実装済みでフラグ付きで利用可能です。この新機能により、従来のanimation-timelineプロパティに加えてanimation-triggerプロパティが利用でき、アニメーション実行のタイミングをスクロールイベントで制御する仕組みが標準化されます。

設定方法は直感的で、通常のCSS animationにanimation-trigger: --t play-forwards play-backwardsを追加し、timeline-triggerプロパティでトリガー名と参照するtimelineを定義します。これまでのscroll-driven animationがスクロール量に応じて進行割合が変化する連続的なアニメーションだったのに対し、scroll-triggered animationは特定のスクロール位置で開始・終了する従来型のアニメーションです。

制作現場に与える実用的変化

これまでGSAPやScrollMagicのような大型ライブラリが必要だった複雑なスクロール連動インタラクションが、ネイティブCSSだけで実現可能になります。パフォーマンスが向上するだけでなく、スタイル処理がスタイルシートに集約されることで開発体験も改善されます。

CSSベースの実装により処理がコンポジタースレッドに移行され、メインスレッドでの重い処理によるレイアウト計算の影響を受けずにスムーズなアニメーションが維持できます。JavaScriptのscrollイベントリスナーで頻発していた「カクつき」問題が根本的に解決される点は、ウェブサイトの体感品質向上に直結します。

さらに、animation-rangeプロパティにより、エントリー、退出、カバーなどのキーワードとパーセンテージオフセットを組み合わせて、要素がビューポートの特定位置に達したタイミングを精密に制御できます。これにより映画的な演出表現や複雑なストーリーテリングが実装しやすくなります。

制作現場では、従来のJavaScript依存から脱却しCSS中心のワークフローに移行することで、デザイナーとエンジニアの協業がよりスムーズになることも期待されます。現時点でサポートしていないブラウザ向けには、IntersectionObserverを使用したフォールバック実装を併用することで段階的な導入が可能です。

Navigation APIが遂に実用段階へ。シングルページアプリ開発が劇的に変わる

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

2026年初頭、ウェブ制作の現場に大きな変化をもたらすNavigation APIがBaselineの「Newly Available」ステータスを獲得し、主要ブラウザ全体で利用可能になりました。これまでシングルページアプリ(SPA)の開発において、開発者が頭を悩ませてきたルーティング処理が、このAPIの登場により根本的に改善されます。

従来のHistory APIを使ったSPA開発では、複数のイベントリスナーと手動でのDOM更新を組み合わせる複雑な実装が必要でした。開発者は、リンクのクリックイベントをグローバルに監視し、preventDefault()を呼び出し、手動でhistory.pushState()を実行し、DOMを更新し、さらに別途popstateイベントを監視してブラウザの戻るボタンに対応する必要がありました。これは、まさにパズルのピースを組み合わせるような作業で、エラーが起きやすく保守性も低いものでした。

Navigation APIが解決する従来の課題

Navigation APIは、これらの複雑な処理を一本化します。単一の中央集約されたNavigateEventで、ユーザーがリンクをクリックする、フォームを送信する、戻るボタンを押す、またはコードでnavigation.navigate()を呼び出すといった、あらゆるナビゲーションを統一的に処理できるようになります。

event.intercept()関数が重要な処理を自動化します。アドレスバーと履歴スタックの更新、フォーカス管理などのアクセシビリティ機能の自動処理、戻るボタンとクリックイベントの統一的な処理など、これまで開発者が個別に実装していた機能が、APIレベルで提供されるようになりました。

具体的なコード例を見ると、その簡潔さは一目瞭然です。従来なら数十行にわたって書いていたルーティング処理が、Navigation APIでは中心となるイベントリスナー一つで済みます。navigateイベントは、同一文書内のフォーム送信も自動的にキャッチし、NavigateEvent.formDataプロパティでデータにアクセス可能になるため、フォーム処理の実装もシンプルになります。

開発体験とパフォーマンスの向上

Navigation APIの恩恵は、単にコードがシンプルになることだけではありません。このAPIはSPAの特別な要求に特化して設計されており、従来のHistory APIやwindow.locationの欠点を解決します。SPAでは、ページテンプレートは使用中も同じ状態を保ち、ユーザーが異なるページや機能を訪問する際にコンテンツが動的に書き換えられる特性があります。

従来のHistory APIでは、この動的な性質に対応するのが困難でした。しかし、Navigation APIは最初からSPAの動作パターンを想定して設計されています。現在のブラウジングコンテキストで作成され、現在のページと同じオリジンを持つ履歴エントリのみを公開し、アプリケーション専用の正確な過去の履歴エントリリストを提供します。これにより、履歴の移動が従来のHistory APIよりもはるかに堅牢になります。

また、navigateイベントによって、SPAフレームワークのルーティング機能に理想的な、すべてのページナビゲーションを一つの中央から制御できます。これはHistory APIでは困難だった、すべてのナビゲーションの検出と応答が可能になるという大きなメリットもあります。

実際の制作現場への影響

この変化は、ウェブ制作の現場にどのような影響をもたらすでしょうか。まず、SPAフレームワークの選定において、Navigation API対応が重要な判断基準になります。React、Vue.js、Angularなどの主要フレームワークは、すでにこのAPIを活用したルーティングソリューションの開発を進めており、2026年後半には多くのプロジェクトで恩恵を受けることになるでしょう。

中小企業や地方の制作会社にとっても、これは朗報です。複雑なルーティングロジックに頭を悩ませることなく、より直感的でメンテナンスしやすいSPAを構築できるようになります。特に、既存のサイトをSPA化するリニューアル案件では、Navigation APIの恩恵を実感しやすいはずです。

バグの発生しやすい複数のイベントハンドリングから解放されることで、開発者はより本質的な機能開発に集中できます。また、アクセシビリティ対応が自動化される点も、制作現場にとって大きなメリットです。フォーカス管理などの細かな配慮が、API側で処理されることで、品質の高いアプリケーションをより効率的に構築できるようになります。

2026年のウェブ制作を見据えた準備

Navigation APIのBaseline入りは、ウェブ制作技術の標準化が進む大きな流れの一部です。同時期に、ビュートランジション用の:active-view-transition CSSセレクタもBaseline入りしており、開発者がドキュメントのルート要素を、ビュートランジションの進行中に限定してスタイル設定できるようになっています。これは、トランジションオーバーレイの背景色変更や、特定のレイヤーのz-index調整など、よりスムーズな視覚効果の実現に役立ちます。

また、Service Workerでも、すべての主要ブラウザエンジンでJavaScriptモジュールがサポートされ、navigator.serviceWorker.register()でtype: ‘module’オプションを設定することで、標準的なimport/export文を利用できるようになっています。

これらの技術進歩は相互に関連しており、より統合された開発体験を提供します。Navigation APIでスムーズなページ遷移を実現し、ビュートランジションで視覚的な連続性を保ち、モジュール対応Service Workerでオフライン対応を強化するといった組み合わせが、標準的な実装パターンになっていくでしょう。つくばのような地方都市の制作現場でも、これらの最新技術を活用することで、大手制作会社に劣らない品質のウェブアプリケーションを提供できる時代が到来しています。

「一部のJavascriptファイルは縮小されていないようです」の解決方法

Wordpress

All in One SEOのSEO分析で「一部のJavascriptファイルは縮小されていないようです」と表示された場合の解決方法です。

これを解決するのはWordpressのプラグインの「Autoptimize」が便利です。
WordPressにAutoptimizeを追加して以下のように設定します。

AutoptimizeのJavaScript オプション
AutoptimizeのCSS オプション
AutoptimizeのHTML オプション

上記の設定が完了すると

すべてのJavaScriptファイルが縮小されているようです。

警告が解除されます。