投稿者アーカイブ

Prop For That、CSSで動的プロパティを扱う新ライブラリの全容

Prop For That、CSSで動的プロパティを扱う新ライブラリの全容

CSS-Tricksで紹介された「Prop For That」は、これまでのCSS設計の常識を塗り替える可能性を持つライブラリだ。ブラウザが本来CSS単体では取得できない情報、例えばマウスカーソルの座標やページのスクロール速度、現在時刻などを、あたかもネイティブのカスタムプロパティであるかのように扱えるようにする。開発者はライブラリを読み込み、対象のHTML要素に専用のデータ属性を付与するだけで、これらの動的な値を直接スタイルシートから参照できる。

CSS-Tricksの記事によれば、このライブラリの最大の魅力は、JavaScriptのロジックを意識せずに済む点にある。従来はイベントリスナーで値の変化を監視し、DOMのスタイルを逐次更新するスクリプトが必要だった。Prop For Thatを使えば、宣言的にCSSを記述する感覚のまま、高度なインタラクションを実装できる。本記事では、この新しいアプローチの仕組みや具体的な活用方法、そして現場への影響を掘り下げていく。

Prop For Thatが解決する根本的な課題

Prop For Thatが解決する根本的な課題

CSSは本来、ページが読み込まれた時点の静的なスタイルを定義する仕組みであり、ユーザーの操作に応じて刻一刻と変化するブラウザの内部状態を直接知覚できない。マウスポインターの位置、ページのどこまでスクロールしたか、特定のフォーム要素が今フォーカスを持っているかといった情報は、すべてJavaScriptの領分だった。この断絶が、アニメーションやインタラクションを実装する際のボトルネックになっていた。

従来のアプローチ(Before)
JavaScriptでイベントを監視し、スタイルを都度書き換える必要があった
開発者 JSで状態取得 DOMのstyleプロパティ書き換え
課題ロジックとスタイルの分離が難しく、コードの見通しが悪くなる
Prop For Thatのアプローチ(After)
HTML属性を付与するだけで、CSSカスタムプロパティとして値を参照できる
開発者 data-props-for属性を付与 Prop For That CSS変数を自動更新
効果スタイルシート内で完結し、コードの凝集度が高まる

このデモが示すように、Prop For ThatはHTMLとCSSだけの世界観を維持したまま、動的な値を扱える設計思想を持つ。これは単なるユーティリティの追加ではなく、スタイリングの責務をCSSに取り戻すパラダイムシフトだ。

主要なライブプロパティとその仕組み

ポインタートラッキングで実現する追従型インタラクション

マウスカーソルの動きをCSSだけで捉えられると、ボタンのホバーエフェクトや視差効果の表現力が格段に上がる。Prop For Thatでは、data-props-for="pointer"という属性を設定した要素に対して、--live-pointer-x--live-pointer-yという2つのカスタムプロパティが動的に注入される。

<div class="mover" data-props-for="pointer">...</div>
ポインター追従の概念
data-props-for=”pointer” –live-pointer-x –live-pointer-y
使用例 要素の位置をカーソルに追従させる
left: calc(var(--live-pointer-x, 0) * 1px);
top: calc(var(--live-pointer-y, 0) * 1px);

これらの値はリアルタイムに更新されるため、要素をposition: absoluteで配置しておけば、CSSの計算式だけで物体がカーソルを追いかける動きを表現できる。マウスの速度に応じてスタイルを変化させるなど、従来は複雑なスクリプトが必要だった演出が、数行のスタイル宣言で完結する。

スクロールベロシティと現在時刻の活用

スクロールの勢いを表すベロシティ(速度)や、刻々と変化する現在時刻も、ライブプロパティとして取得できる。これらを活用すれば、ユーザーがページを勢いよくスクロールしているときだけ特定のアニメーションを発動させたり、時刻に応じて配色を動的に切り替えるといった演出が、CSSの範囲内で実装可能になる。

/* スクロール速度に応じて要素の透明度を変化させる例 */
.scroll-aware {
  opacity: calc(var(--live-scroll-velocity, 0) * 0.01);
  transition: opacity 0.3s ease;
}
スクロールベロシティ
–live-scroll-velocity スクロールの勢い(px/frame)
用途勢いのあるスクロール時だけ要素を強調表示する
現在時刻
–live-time-seconds 秒単位の現在時刻
用途時間帯に応じたダークモードへの自動切り替え

CSS-Tricksの記事で特に評価されていたのは、スクロールにモメンタム(慣性)の概念を持ち込める点だ。ユーザーの操作に物理的な手応えを感じさせる、いわゆる「気持ちいいインタラクション」の実装ハードルが大きく下がる。

実装のポイントとコード例

実装のポイントとコード例

基本的なセットアップ手順

導入は極めてシンプルだ。ライブラリをプロジェクトに読み込んだあと、動的な値を取得したい要素にdata-props-for属性を追加する。あとは通常のCSSカスタムプロパティと同じ感覚で、var()関数を使って値を参照すればよい。

<!-- HTML側 -->
<div class="tracker" data-props-for="pointer">
  この要素がカーソルを追跡する
</div>

/* CSS側 */
.tracker {
  position: absolute;
  width: 60px;
  height: 60px;
  background: #3498db;
  border-radius: 50%;

  /* ライブプロパティを参照して位置を動的に計算 */
  left: calc(var(--live-pointer-x, 0) * 1px - 30px);
  top: calc(var(--live-pointer-y, 0) * 1px - 30px);

  /* スムーズな追従のためのトランジション */
  transition: left 0.1s ease-out, top 0.1s ease-out;
}
設定フロー(After)
STEP 1 ライブラリをimportする
STEP 2 HTML要素にdata-props-for属性を追加
STEP 3 CSSでvar()を使ってライブプロパティを参照

このコード例では、カーソルを追いかける円形の要素を定義している。注意すべきは、var()の第2引数でフォールバック値(ここでは0)を指定している点だ。ライブラリが読み込まれる前や、何らかの理由でプロパティが未定義の場合でも、要素が想定外の位置に飛ぶのを防げる。

パフォーマンス上の配慮

ライブプロパティは高頻度で更新されるため、lefttopのようなレイアウトを再計算させるプロパティの変更は、パフォーマンスの観点から注意が必要だ。可能であればtransformプロパティで位置を制御するほうが、ブラウザの合成処理に乗り、再描画コストを抑えられる。

/* パフォーマンスを考慮した書き方 */
.optimized-tracker {
  position: absolute;
  width: 60px;
  height: 60px;
  background: #e74c3c;
  border-radius: 50%;

  /* transformを使えばGPU合成で高速に描画される */
  transform: translate(
    calc(var(--live-pointer-x, 0) * 1px - 50%),
    calc(var(--live-pointer-y, 0) * 1px - 50%)
  );
}

このtransformによる制御は、特に多数の要素を同時に動かす場合や、モバイル端末での動作を考慮する際に有効だ。CSS-Tricksの紹介するデモ群でも、このベストプラクティスが採用されている。

Web制作の現場に与える影響

Web制作の現場に与える影響

JavaScriptとCSSの新たな役割分担

Prop For Thatの登場は、フロントエンド開発におけるJavaScriptとCSSの役割分担を見直す契機になる。従来は「動的なものはJavaScript、静的なものはCSS」という暗黙の線引きがあった。しかし、このライブラリが示す方向性は、表示やスタイルの変化はCSSに寄せるという考え方だ。

従来の役割分担(Before)
JavaScript 動的なスタイル変更を一手に担う
CSS 静的なスタイル定義のみ
これからの役割分担(After)
JavaScript データの取得や状態管理に専念
CSS 動的なスタイル変更も含めて表示の責務を担当

これは単なる書き方の変化ではない。コードの凝集度が高まり、スタイルに関するロジックがCSSファイルに集約されることで、メンテナンス性が向上する。特に、複数人で開発する大規模プロジェクトや、インタラクションの多いランディングページの制作では、このメリットが顕著に現れる。

プロトタイピングスピードの加速

CSS-Tricksの記事が高く評価していたもう一つの側面は、プロトタイピングの速さだ。アイデアを思いついてから、実際にブラウザ上で動くモックアップを作るまでの時間が大幅に短縮される。複雑なJavaScriptの設定なしに、HTMLとCSSだけでリッチなインタラクションを試せることは、クリエイティブな探求の敷居を大きく下げる。

この手軽さは、デザイナーがコーディングに踏み出すきっかけとしても機能するだろう。また、クライアントワークの現場では、「この動きを実装するのにどれだけの工数がかかるか」という見積もりの精度も変わってくる。これまでスクリプトの作成で1日かかっていた表現が、数時間のコーディングで実現できる可能性があるからだ。

この記事のポイント

  • Prop For Thatは、マウス位置やスクロール速度などブラウザの動的情報をCSSカスタムプロパティとして参照できるライブラリである
  • 導入はライブラリの読み込みとHTML属性の追加のみで、JavaScriptの記述を必要としない
  • ポインタートラッキング、スクロールベロシティ、現在時刻など、多彩なライブプロパティが用意されている
  • パフォーマンスを考慮する場合は、lefttopではなくtransformで位置制御するのが推奨される
  • JavaScriptとCSSの役割分担を見直し、スタイルの責務をCSSに集約する設計思想が背景にある
  • プロトタイピングの高速化や、インタラクション実装の工数削減といった実務的なメリットが大きい
海田 洋祐
AI引用シェア率をBingが公開、llms.txtの効果に疑問符

AI引用シェア率をBingが公開、llms.txtの効果に疑問符

AI検索の可視性をどう測るか、そして構造化データファイルにどこまで期待すべきか。この一週間でその答えに直結する動きが複数出てきた。

MicrosoftがAI引用のシェア率を計測する新機能を公開し、GoogleとAhrefsのデータはllms.txtの効果に冷や水を浴びせた。さらにAIエージェント向けの新仕様が2つ登場するなど、情報が一気に動いている。英国CMAによる公正ランキング命令も含め、今週のトップ4ニュースを実務視点で整理する。

BingがAI引用シェア率を公開。競合との差が初めて数値化された

BingがAI引用シェア率を公開。競合との差が初めて数値化された

MicrosoftはBing Webmaster ToolsのAIパフォーマンスダッシュボードに、新たな4機能をプレビュー公開した。追加されたのは「Citation Share(引用シェア率)」「Intents(検索意図別グループ)」「Topics(トピック別グループ)」「Compare(期間比較)」だ。いずれも現在はプレビュー段階でグローバルに順次ロールアウトされている。

従来のAI検索パフォーマンス計測(Before)
自サイトの引用有無だけを把握
競合の引用状況は見えない
市場全体での立ち位置が不明
新しいAI Citation Shareの世界(After)
特定クエリでの自サイトの引用シェア率を数値化
競合他社とのシェア比較が可能
市場全体の何%を獲得しているかが可視化される

このCitation Shareによって、AI検索結果における自サイトの存在感が、競合との比較で初めて把握できるようになる。ただしこのデータはBing独自であり、CopilotやBingの回答を対象とする。Google検索側では検索コンソールにこれに相当する引用カウント機能は提供されていない。

SEO担当者の受け止めと実務への示唆

ILoveSEO.netの創業者Gianluca Fiorelli氏はLinkedInで「Bing Webmaster Toolsこそ、我々がGoogleサーチコンソールに望んでいた姿だ」と評価した。AI可視性を測る新しい物差しが登場したことは、今後の施策優先度をデータドリブンに決める上で大きい。

現時点ではBingに限られた指標だが、AI検索のトラフィックが今後さらに一般化すれば、Googleも類似の指標を導入せざるを得なくなる可能性がある。先行してBing側でのデータ取得と分析のノウハウを積んでおくことは、将来のAI検索対策で優位に立つ一手になる。

llms.txtへの期待に新データが疑問符。97%がアクセスゼロ

llms.txtへの期待に新データが疑問符。97%がアクセスゼロ

llms.txtは、大規模言語モデル(LLM)向けにサイト情報を構造化して提供するテキストファイルだ。AIがサイト内容を理解しやすくする目的で提唱され、導入が進んでいる。しかし今週、その効果に疑念を投げかける材料が二つ重なった。

GoogleのJohn Mueller氏の指摘
llms.txtは 自己申告 のファイルであり
サイトの発見・差別化には寄与しない
※本当に重要なのは通常のHTMLと内部リンク構造
Ahrefsの大規模調査データ
13万7000ドメインを分析
97%のllms.txtファイルがリクエストゼロ
※ChatGPTやPerplexityなど引用生成ボットからのアクセスは全体のわずか1%
理論的な課題  実データによる検証

Mueller氏は「Search Off the Record」ポッドキャストで、llms.txtが自己申告型のファイルである以上、LLMがサイトを発見したり他サイトと比較して評価したりする用途には使えないと明言した。本質的に重要なのは従来のHTMLと内部リンク構造だという立場だ。

Ahrefsのデータも同じ方向を指している。13万7000ドメインのうち、97%のllms.txtファイルには一度もボットからのアクセスがなかった。さらにアクセスが確認されたケースでも、ChatGPTやPerplexityといった引用生成ボットからのリクエストは全体の1%に過ぎない。この結果は、数ヶ月前にSE Rankingが30万ドメインを調査して導いた「llms.txtはAI引用に明確な効果を示さない」という結論とも整合する。

SEO専門家の見解と実務上の落とし所

Clio Websitesの創業者Nat Miletic氏はLinkedInで「llms.txtは公開コストが低いので置いておくのは構わない。ただしそれでAI可視性が上がるとは今は期待しないほうがいい」と総括した。コーディングエージェントや学習用クローラー向けに一部で参照されているため維持コストに見合う面はあるが、AI検索結果への表示を目的とした投資としては優先度を下げる判断が妥当だ。

AIエージェント向け新仕様が2つ登場。OKFとARDの注目点

AIエージェント向け新仕様が2つ登場。OKFとARDの注目点

Google Cloudは「OKF(Open Knowledge Format)」を公開した。組織内の知識(データセット、メトリクス、運用手順書など)をAIエージェントが読めるマークダウン形式でパッケージングする仕様だ。ほぼ同時期に、GoogleやMicrosoft、GitHub、Hugging Faceを含む連合が「ARD(Agentic Resource Discovery)」の草案を発表した。こちらはAIエージェントがツールやスキル、他のエージェントを発見・検証するためのプロトコルを定義する。

OKF
Open Knowledge Format
v0.1
組織知識のパッケージ化が目的
ARD
Agentic Resource Discovery
v0.9
エージェント間の発見・検証が目的
⚠️ 共通する課題
どちらも自ドメインに構造化ファイルを配置する方式であり、llms.txtが直面したのと同じ「採用されるかどうか」という不確実性を抱えている
OKF  ARD  ⚠️ 共通のリスク

両仕様とも現時点で即時の対応を求めるものではない。OKFはバージョン0.1、ARDは0.9と初期段階だ。Harton Worksの創業者Martin Jeffrey氏はARDを「ページではなく機能のためのサイトマップが再来したようなものだ」と表現した。Snippet Digitalの共同創業者Suganthan Mohanadasan氏は「魔法のキノコではない。これで一夜にしてAI可視性が上がるわけではない」と期待値を引き締めている。

実務的には、どのフォーマットが実際に普及するかを見極める観察期間に入る。llms.txtの事例が示すように、仕様の存在と実際の効果は別問題だ。導入判断は普及の兆候を確認してからでも遅くない。

英国CMAがGoogleに公正ランキングを命令。事前通知義務が実務に波及

英国CMAがGoogleに公正ランキングを命令。事前通知義務が実務に波及

英国の競争市場庁(CMA)がGoogle検索に対し、新たなルールを設定した。オーガニック検索結果のランキングに客観的かつ非差別的な基準を使うこと、そして大規模な変更の際には事前通知を行うことを義務づける内容だ。

CMAがGoogleに求める2つの柱
要件1 公正ランキング
客観的かつ非差別的な基準で順位を決定
大規模変更前の事前通知を義務化
ランキングに関する異議申し立てルートを提供
要件2 データポータビリティの義務化
従来自主的だったデータ持ち出しツールを法的義務に格上げ
実務への具体的な影響
これまで コアアップデートは突如発表
これから 事前通知と異議申し立ての余地

このルールの適用範囲は英国のオーガニック検索結果で、AI Overviewsも対象に含まれる(広告は除く)。Googleは「現行のランキングはすでに公正かつ透明だ」と反論しているが、CMAは6月初旬にもAI検索機能からのオプトアウトを認めるよう命令しており、規制圧力は強まっている。

SEO専門家の反応から読む今後の展開

Searchpediaの創業者Laura Iancu氏はLinkedInで「もうこれで『コアアップデートを突然リリースしました』なんてことはできなくなる」と単刀直入に表現した。Blue Arrayの戦略SEO責任者Chloe Smith氏は「Googleは何らかの回避策を探るだろう」と予測しつつも、事前通知と異議申し立ての枠組みができたこと自体に意味があると見ている。

現状では英国限定の措置だが、EUや他の地域にも波及する可能性は否定できない。特に、大規模アップデートの事前通知が実務化すれば、SEO施策の計画立案や緊急対応のあり方そのものが変わる。今後のGoogleの実装方法を注視する必要がある。

構造化ファイルを置くだけでは済まない。AI可視性の本質に立ち返る

構造化ファイルを置くだけでは済まない。AI可視性の本質に立ち返る

今週のニュースを横断して浮かび上がるテーマは、「構造化ファイルを自ドメインに置いておけばAIに見つけてもらえる」という発想への再考だ。llms.txtはその教訓をすでに示している。ファイルを公開しても、Googleはサイト差別化に寄与しないと断言し、データは大半のファイルが読まれていない事実を突きつけた。

本質的なAI最適化とは
AIが参照するのは結局、通常のHTMLコンテンツ内部リンク構造
構造化ファイルは補助的な役割に留まり、それ単体での効果は限定的
※llms.txtの97%アクセスゼロが証明している
これからの実務アプローチ
Step 1 まずは自サイトの情報設計とコンテンツ品質を徹底的に強化
Step 2 AI引用シェア率で自サイトの立ち位置を客観的に把握
Step 3 OKFやARDは普及後に導入判断。今は動向観察で十分

OKFやARDが登場したことで、構造化ファイルへの要求はこれからも繰り返されるだろう。しかし破綻しているのは「ファイルを置けば報われる」という期待のほうだ。BingのCitation Shareは、そうした取り組みが実際に引用に結びついているかを数値で示してくれる、貴重なフィードバックループになり得る。

AI検索時代の可視性は、小手先のファイル配置ではなく、コンテンツそのものの強さと、信頼される情報源としてサイト全体を設計し続ける積み重ねで決まる。今週のデータと専門家の声は、その原則を改めて強調する結果になった。

この記事のポイント

  • Bing Webmaster Toolsの新機能「AI Citation Share」で、AI検索での競合とのシェア比較が初めて可能になった。Googleにはまだ同等機能はない
  • llms.txtは97%がアクセスゼロ。AI検索可視性への効果はデータで否定され、自己申告ファイルの限界が明確になった
  • OKFとARDという新たなAIエージェント向け仕様が登場したが、普及は未知数。llms.txtの教訓を踏まえ導入判断は慎重に行うべきだ
  • 英国CMAがGoogleに対し、検索順位の公正化と大規模変更前の事前通知を義務づけた。SEO施策の計画立案に影響する可能性がある
  • 結局、AI可視性の本質は構造化ファイルではなく、通常のHTMLコンテンツの品質と情報設計にある
海田 洋祐
Amazon Bedrock AgentCoreにWeb Search機能が一般提供開始、AIエージェントの回答を最新Web情報で根拠づけ

Amazon Bedrock AgentCoreにWeb Search機能が一般提供開始、AIエージェントの回答を最新Web情報で根拠づけ

AWSは2026年6月17日、Amazon Bedrock AgentCoreにWeb Search機能の一般提供を開始した。AIエージェントがユーザーからの質問に対し、最新のWeb情報を参照しながら根拠のある回答を提示できるようにする。トレーニングデータだけではカバーしきれない直近の出来事や新事実を、AWS環境内で安全に取得できる点が最大の特徴だ。

この機能は、Amazonが長年培ってきた検索インフラ上に構築されている。Alexa+やAmazon Quick、Kiroといった製品で実績のある基盤を活用し、WebインデックスとAmazon Knowledge Graphを組み合わせたマルチソースな根拠付けを実現する。検索クエリは外部APIプロバイダに送信されず、AWS環境内で完結するため、企業のガバナンス要件にも適合する。

本記事では、Bedrock AgentCore Web Searchの仕組み、料金体系、導入事例を詳しく解説する。

Web Search機能の概要と背景

Web Search機能の概要と背景

Bedrock AgentCoreの位置づけ

Amazon Bedrock AgentCoreは、AIエージェントの構築と運用を管理するフレームワークである。エージェントに必要なツールやデータソースとの接続をGatewayという仕組みで一元管理し、モデルの推論と外部機能の呼び出しを連携させる。今回発表されたWeb Searchは、AgentCore Gateway上で利用できる組み込みコネクタターゲットのひとつだ。

Web Searchが解決する課題

LLM(大規模言語モデル)は、学習時点のデータに基づいて回答を生成するため、つねに最新の情報を反映できるとは限らない。たとえば、企業の決算発表や法改正、製品アップデートなど、学習後に発生した出来事には対応できない。Web Searchを用いれば、エージェントがリアルタイムにWeb検索を実行し、得られたスニペットやURLを参照して回答を生成できる。回答には引用元が明示されるため、情報の信頼性をユーザーが確認しやすくなる。

仕組み:MCP接続とAmazon知識グラフによる根拠付け

仕組み:MCP接続とAmazon知識グラフによる根拠付け

MCP(Model Context Protocol)の役割

Web Searchは、MCP(Model Context Protocol)と呼ばれる標準プロトコルを介してAgentCore Gatewayに接続される。MCPを使うことで、エージェントは自然言語のクエリを送信し、関連性の高い検索結果(スニペット、URL、タイトル、公開日)を取得できる。GatewayがMCPターゲットとしてWeb Searchツールを仲介するため、開発者が個別に検索APIを実装する必要はない。

Amazon知識グラフとの統合

一般的なWeb検索に加え、Amazon Knowledge Graphの構造化データが検索結果に組み込まれる。これにより、単なるWebスニペットではカバーしきれない検証済みの事実情報をエージェントが参照できるようになる。AWSのブログ記事によれば、このマルチソースアプローチが従来のWeb検索だけに頼る場合と比較して、より的確な回答につながるとされている。

エージェントが回答を生成するまでの流れ

以下のデモは、ユーザーが質問してからエージェントが根拠付き回答を返すまでの一連のステップを図示したものだ。

STEP 1 ユーザーが自然言語で質問を送信
STEP 2 Bedrock AgentCore GatewayがMCP経由でWeb Searchツールを呼び出し
STEP 3 Amazonの検索基盤がWebインデックスと知識グラフを検索し、関連スニペットやURLを返す
STEP 4 AIエージェントが検索結果に基づいて回答を生成し、引用元を明示

STEP 3の段階でAmazon Knowledge Graphが活用される点が、単なるWeb検索を超えた信頼性につながる。エージェントは受け取った情報をそのまま返すのではなく、モデルが内容を推論した上で回答を構成するため、質問の文脈に合った自然な応答になる。

AWS環境内で閉じるセキュアなWeb検索の価値

AWS環境内で閉じるセキュアなWeb検索の価値

多くのAIエージェント向けWeb検索ソリューションでは、ユーザーのクエリやプロンプトが外部の検索APIプロバイダに送信される。これに対しBedrock AgentCoreのWeb Searchは、Amazon自身の検索インフラを使用するため、データがAWS環境の外に流出しない。これにより、機密性の高い業務データを扱う企業でも、ガバナンスやコンプライアンスの要件を満たしながらエージェントにWeb検索機能を組み込める。

従来の外部検索API利用(Before)
ユーザー クエリ送信 外部検索API
※データがAWS環境の外に送信されるリスク
Bedrock AgentCore Web Search(After)
VPC内のエージェント MCP経由で検索 Amazon検索基盤
※すべての通信がAWS内部で完結、外部へのデータ送信なし

AWSの説明によれば、この仕組みはAlexa+やKiroなどのプロダクトで培われた検索技術を基盤にしており、信頼性とスケーラビリティの両面で実績がある。ユーザーは外部の検索サービス契約やAPIキー管理を気にすることなく、AgentCoreの設定画面上でWeb Searchを有効化するだけで利用を開始できる。

料金体系と利用開始手順

料金体系と利用開始手順

料金詳細

Web Searchの料金は従量課金制で、エージェントが実行した検索クエリの数に応じて計算される。具体的には、1,000クエリあたり7ドルである。新規のAWS顧客には最大200ドル相当の無料利用枠も提供される。利用料はすべてAWSの請求に統合されるため、別途外部サービスへの支払い管理は不要だ。

セットアップ手順

Bedrock AgentCoreコンソール(us-east-1リージョン)にアクセスし、Gatewayを作成する。ターゲットの追加時に「MCP target」プロトコルと「Connectors」タイプを選択し、プリコンフィギュアされた「Web Search tool」を指定する。Gatewayの詳細ページに遷移すると、PythonやMCP Inspectorを用いた呼び出しコードのサンプルが表示されるため、これをコピーして自環境に組み込むだけで統合が完了する。

テスト用途であれば、MCP InspectorをGatewayのリソースURLに接続し、Web Searchツールにクエリを直接入力して動作を確認できる。実運用では、エージェントのプロンプト設計にWeb検索の呼び出しトリガーを組み込み、回答生成時に適宜検索が走るように構成することになる。

企業での活用事例

企業での活用事例

Benchling:科学研究の加速

ライフサイエンス分野のR&Dプラットフォームを提供するBenchlingは、早期アクセスを通じてWeb Searchを試験導入した。同社AIエージェント責任者Nicholas Larus-Stone氏によると、科学者が研究対象について質問すると、Benchling内の組織データと公開文献の両方に基づく回答が得られるようになったという。これにより、仮説生成の質が向上し、顧客のデータ管理ポリシーにも適合する安全な環境を維持できている。

Gen Digital:オンライン評判管理の強化

消費者向けセキュリティ製品を展開するGen Digital(Nortonブランド)は、Norton RevampというサービスにWeb Searchを組み込んだ。プロフェッショナルが自身のオンライン評判を構築する際、最新のトレンドや事実に基づいたコンテンツアイデアをエージェントが提案できるようになる。同社AI・イノベーション部門シニアディレクターIskander Sanchez-Rola氏は、すべてのクエリが信頼できるAWS環境内で処理される点を高く評価しているとコメントした。

いずれの事例でも、外部サービスを利用せずにAWS内で完結するセキュリティと、Amazon独自の検索インデックスによる高精度な情報取得が決め手となっている。

この記事のポイント

  • Amazon Bedrock AgentCoreでWeb Search機能が一般提供開始。MCP経由でWeb検索と知識グラフを統合し、エージェントの回答を最新情報で根拠づける
  • 検索クエリはAWS環境外に出ず、Amazonの検索インフラで処理されるため、データガバナンスとコンプライアンスに対応
  • 料金は1,000クエリあたり7ドルの従量課金。新規顧客向けに200ドル分の無料枠あり
  • BenchlingやGen Digitalなどの企業がすでに導入し、研究支援や評判管理の精度向上に活用している
  • us-east-1リージョンで利用可能。AgentCoreコンソールから数ステップで設定できる
海田 洋祐
建築許可の審査期間を半減。英国政府がGemini活用ツール、2027年全国展開

建築許可の審査期間を半減。英国政府がGemini活用ツール、2027年全国展開

英国政府は2029年までに150万戸の新築住宅を供給する目標を掲げている。しかし自治体の計画許可部門は、大量の紙書類と行政手続きの滞留に直面しており、目標達成の大きな足かせとなっている。

この課題に対し、Google DeepMindは英国政府、Google Cloud、ならびにFacultyとの協力のもと、建築許可申請の審査にかかる時間を抜本的に短縮するAIプロトタイプの開発を進めている。目標は担当官の判断にかかる時間を半減させること。2026年6月時点で一部自治体での試験運用が始まっており、2027年には全国のすべてのカウンシルで利用可能になる見通しだ。

建築許可のボトルネックとAI活用の背景

建築許可のボトルネックとAI活用の背景

年間の計画申請のうち、住宅所有者による増築やロフト改修といった比較的単純な申請が約7割を占める。ところが担当官は一件ごとに地域の方針書、過去の許可事例、住民からの意見書など大量のPDFを手作業で照合しなければならず、この単純作業が大きなボトルネックになっている。

こうした背景から、英国政府のAIインキュベーター(i.AI)はすでにExtractというツールを開発し、旧来の文書を構造化データに変換する取り組みを進めてきた。今回のプロトタイプは、その土台の上にGeminiによる高度な解析支援を組み合わせ、審査プロセス全体を加速させる狙いがある。

AIが支援する新たな計画審査プロトタイプ

AIが支援する新たな計画審査プロトタイプ

このプロトタイプは、Barnet、Camden、Dorsetの3つの自治体と共同で開発が進められている。計画担当官にとっては「熟練したアシスタント」のように機能し、データ抽出や事例分析といった重労働を肩代わりする。具体的には以下の4つの作業をAIが自動化する。

  • データ統合:滞留している申請情報を前処理し、不足データの可視化やサイト主要情報の抽出を行う。担当官は1つの画面で全体を把握できる。
  • 地域方針の照合:国および地域の関連方針を自動でハイライトし、事前にコンプライアンスを評価。正確な引用情報を添えて担当官に提示する。
  • 住民意見の要約:個別の意見書を分析し、主要な反対意見や判例を要約する。
  • 審査レポートの下書き作成:最終報告書の初稿を生成し、判断の根拠や提案する条件を整理する。

ここで重要なのは、最終的な判断を下すのは常に計画担当官であり、人間の監視が必ず残る点だ。プロトタイプは生成した文章を一歩一歩記録し、明確な思考の連鎖と監査証跡を残す設計になっている。担当官はAIが提案した内容を一行ずつレビューし、根拠を編集したうえで許可・却下を決定する。

従来の手動作業(Before)
計画担当官 申請書類のPDFを印刷し内容を読み込む
計画担当官 地域方針文書や過去事例を手動で照合
計画担当官 住民からの意見書を1通ずつ要約
計画担当官 すべての情報を基にレポートを一から作成
AI支援ツール導入後(After)
AIツール 全書類を自動解析し、不足項目と重要情報を統合
AIツール 関連方針を抜き出し、引用付きでコンプライアンス事前評価
AIツール 全意見書を要約し主要な反対意見や判例を抽出
AIツール 根拠と条件を示したレポートの初稿を自動生成
計画担当官 AI下書きを一行ずつレビューし、最終判断を下す

手動では数時間かかっていた作業が、AIによる事前のデータ整理と下書き作成によって大幅に短縮される。計画担当官は単純な転記や照合から解放され、より複雑な案件や公共の利益に資する判断に集中できるようになる。

試運用で見える効果と全国展開への展望

試運用で見える効果と全国展開への展望

今回のプロトタイプのベースとなったExtractは、すでに20以上の自治体で試験運用され、平均的なカウンシルで年間約255時間の手動作業を削減できる実績を残している。2026年6月には全イングランドのカウンシルで利用可能となり、旧式のPDFをわずか数分で構造化データに変換できるようになった。

新しいAIツールはこのExtractの成果に加え、審査そのものの自動下書きまで踏み込んでいる。Barnet、Camden、Dorsetでの初期試験を経て、英国政府は2027年から全国すべてのカウンシルに展開する計画だ。もし全国で導入されれば、担当官の審査時間が半減し、戸建て住宅の増改築といった日常的な申請が迅速に処理されるようになる。これにより住宅供給の加速だけでなく、地域経済の活性化にもつながると期待されている。

行政におけるAI活用では、透明性と説明責任の確保が常に課題となるが、今回のプロトタイプは全ステップを記録し、人間が最終判断する設計を徹底している点が特徴だ。AIが下書きを生成し、担当官がそれを検証・修正するハイブリッド型のワークフローは、他の公共サービス分野にも応用可能なモデルケースとなるだろう。

この記事のポイント

  • 英国政府とGoogle DeepMindがGeminiを活用した建築許可審査AIツールを共同開発中
  • 書類統合、方針照合、意見要約、レポート下書きの4機能で担当官の負荷を大幅に軽減
  • 計画担当官が最終判断を保持し、全ステップが監査証跡として記録される設計
  • 試験運用を経て2027年までにイングランド全カウンシルへの提供を予定
  • 単純作業の自動化により住宅供給の加速と行政リソースの最適化が期待される
海田 洋祐
LLMjackingの実態と防御策、APIキー漏洩が招く3つのリスク

LLMjackingの実態と防御策、APIキー漏洩が招く3つのリスク

近年、AIと大規模言語モデル(LLM)は企業の業務プロセスに急速に浸透している。カスタマーサポートやデータ分析の中核にLLMが据えられ、ビジネスの依存度は日増しに高まっている。その依存を狙う新たな脅威が「LLMjacking」だ。APIキーを窃取され、LLMリソースを不正利用されるこの攻撃は、財務的損失から機密情報の流出まで、多面的な被害をもたらす。

LLMjackingは単なるリソースの不正消費ではない。カスタムモデルの悪用やデータポイズニングといった、より深刻なリスクを内包する。本記事では、LLMjackingの仕組み、具体的なリスク、攻撃経路、検知手法、防御策を解説する。

LLMjackingとは何か

LLMjackingとは何か

LLMjackingは、攻撃者がLLMへのアクセスを乗っ取る攻撃手法だ。広く普及した技術だが、その本質は新しいものではない。AWSやGCPのアクセスキーを狙う従来のクレデンシャル窃取と構造は同じで、標的がLLMのAPIキーに置き換わっただけである。

LLMの利用は従量課金制であることが多く、APIキーが漏洩すれば高額な請求に直結する。さらに、カスタムモデルや社内データと統合されたキーの場合、単なる計算リソースの盗用を超えて、機密情報へのアクセスが可能になる。盗まれたクラウドキーよりも、LLMの認証情報が悪用されたときの被害範囲は広がる傾向がある。

従来のクラウドキー窃取
AWS / GCPキー 計算リソースやストレージへのアクセス
被害の中心はインフラコストの増大とデータ漏洩
LLMjacking(新たな脅威)
LLM APIキー モデル悪用、データ汚染、スパム生成など多面的被害
財務的損失に加え、ブランド毀損や意思決定の歪曲に発展する可能性
従来の脅威  LLMjacking

LLMがビジネスの中枢に組み込まれている現在、APIキーの漏洩はインフラ侵害以上の結果を招く。後続のセクションで具体的なリスクを整理する。

LLMjackingがもたらす3つのリスク

LLMjackingがもたらす3つのリスク

LLMjackingの被害はAPIの不正利用による請求増加にとどまらない。組織の財務、カスタムモデルの機密性、そしてモデル自体の信頼性を脅かす。以下、主要な3つのリスクを詳述する。

財務的損失

LLMのAPIは従量課金が一般的だ。攻撃者が無制限にアクセスすると、スパムメールのテンプレート生成やフィッシングサイト構築、マルウェア開発などに悪用され、短時間で高額な請求が発生する。利用上限を設定していても、LLMに依存する下流のエージェントプロセスや自動化ワークフローが巻き添えで停止し、ビジネス機会の喪失という二次的損失を生む。

カスタムモデルの悪用

多くの組織は社内文書や業務プロセスを学習させたカスタムモデルを「社内Wiki」として活用している。新入社員が業務手順を尋ねたり、特定の書類に関する質問を投げかけたりする用途だ。このモデルに攻撃者がアクセスすると、公開を想定していない組織内部の知識が流出する。攻撃者は得た情報を足がかりにネットワーク内での足場を拡大したり、ダークウェブで情報を売買したりする可能性がある。

データポイズニング

カスタムモデルが継続的に新しいデータで再学習されている環境では、訓練データや学習パイプラインへのアクセスを許すとデータ汚染のリスクが生じる。攻撃者は長期間かけてモデルに微妙なバイアスを注入し、従業員に誤解を招く応答や偏った情報を提供させることが可能だ。意思決定を徐々に歪め、誤った情報を拡散させるこの手法は検知が極めて難しい。

💰 財務的損失
APIの従量課金による高額請求、依存ワークフローの停止
🔓 カスタムモデル悪用
社内ナレッジの流出、攻撃の足場拡大、闇市場での売買
🧪 データポイズニング
モデルへのバイアス注入、誤った意思決定の誘導、検知困難

これらのリスクは相互に関連し、単一のインシデントから複合的な被害に発展しうる。次のセクションでは、攻撃者がどのようにAPIキーを入手するのかを説明する。

LLMjackingの攻撃経路

LLMjackingの攻撃経路

LLMjackingの攻撃ベクトルは、従来のクラウド認証情報を狙う手法と共通する部分が多い。主な経路はフィッシングと設定ミスの2つだ。

フィッシング

AI支援型の高度な攻撃が登場しても、最も古くからある「人間を騙す」手法は依然として有効だ。巧妙に作られたフィッシングページは、緊急性を装ったり、プラットフォームからの通知を偽装したりして、ユーザーに認証情報を入力させる。LLMのAPIキーも例外ではなく、従来の手口で窃取されるケースが後を絶たない。

クラウド設定やアプリケーション設定の不備

環境変数や構成ファイル、コンテナイメージ、CI/CDパイプライン、ログシステムにAPIキーが平文で保存されている事例は珍しくない。過剰な権限を持つS3バケットや公開されたKubernetesダッシュボード、適切に管理されていないGitリポジトリから、攻撃者は直接的な脆弱性を突くことなく認証情報を入手できる。

LLM統合のスピードが優先される現場では、セキュリティのベストプラクティスが後回しにされがちだ。これが認証情報の漏洩を招き、LLMへの自由なアクセスを攻撃者に与える結果となる。

攻撃経路の比較
経路1 フィッシング ユーザー 偽装ページ APIキー入力 キー漏洩
経路2 設定ミス Git公開リポジトリ/環境変数/S3 平文APIキー 攻撃者がスキャンして取得

どちらの経路でも、攻撃者は正規のAPIキーを手にするため、従来のファイアウォールでは検知が難しい。次のセクションで監視と検知の方法を解説する。

LLMjackingを検知する方法

LLMjackingを検知する方法

LLMjackingは単一の明らかな侵害として現れるよりも、異常な利用パターンとして表面化することが多い。検知にはベースラインの確立と継続的な監視が欠かせない。

組織のLLM利用ベースラインを確立する

異常を検知するには、まず「通常」の状態を定義する必要がある。APIリクエスト量、トークン消費量、よく使われるエンドポイントを時間帯ごとに把握し、月末のスパイクや定期的な増加パターンを基にベースラインを作成する。このベースラインと現在の利用状況を常に比較し、逸脱があれば速やかに調査することが重要だ。

請求アラートの監視

請求アラートは異常の最初の兆候であるケースが多い。攻撃者が低速度で長期間にわたりリソースを消費する「低頻度で遅い攻撃」に及んだ場合、検知は難しくなるが、大半の攻撃者はアクセスを失う前にできるだけ多くのリソースを使い切ろうとするため、請求上限アラートが作動する。アラート発生時は即座に調査し、対処を開始すべきだ。

検知の流れ
STEP 1 平時の利用パターンを1〜2週間収集、ベースラインを確立
STEP 2 リアルタイムの利用状況とベースラインを比較、逸脱を検出
STEP 3 請求アラートまたは異常検知でインシデントを特定、即時調査

検知体制を整えたら、次に必要なのは予防策だ。APIキーを狙う攻撃に対する実践的な防御手法を紹介する。

LLMjackingから防御するための対策

LLMjackingから防御するための対策

LLMjackingの防御は、結局のところ「認証情報を入手しにくくする」ことに尽きる。有効なAPIキーに依存する攻撃であるため、ファイアウォールよりも認証情報管理とアクセス制御が重要だ。

認証情報の衛生管理を徹底する

APIキーの定期的なローテーションは、漏洩した認証情報の有効期限を短縮する最も効果的な手段の一つだ。さらに、全てのワークロードに共有キーを使うのではなく、アプリケーションやサービスごとに専用のスコープを限定したキーを発行することで、異常発生時の特定と隔離が容易になる。侵害されたキーの影響範囲(ブラスト半径)も小さく抑えられる。

最小権限の原則を適用する

「念のため」と広範なアクセス権を付与する誘惑に抵抗し、人間ユーザーにも同じ原則を適用する必要がある。マーケティング部門の担当者が本番環境のプロンプトや顧客データパイプライン、法務要約モデルにアクセスできる必要はまずない。特定のワークロード、エンドポイント、モデルだけに権限を絞ることで、たとえキーが盗まれても攻撃者の可能な行動を限定できる。

基本的なセキュリティ対策を怠らない

LLMjackingは目新しい脆弱性を突く攻撃ではない。適切なシークレット管理プラットフォーム(例:HashiCorp Vault)の導入、GitHubのプッシュ保護機能の有効化、SIEMによるログの一元管理など、基本的な対策の積み重ねが防御力を高める。

  • シークレット管理: Vaultなどのツールでキーの自動ローテーションを実施する。
  • リポジトリ保護: GitHubのプッシュ保護が有効か確認する。万が一シークレットがコミットされたら即座にローテーションする。
  • ログの一元化: SIEMソリューションで監査ログとアクセスログを集約し、ベースラインとの比較と異常検知を自動化する。

LLMjackingの本質

LLMjackingの本質

LLMjackingは攻撃者にとって新しい攻撃対象だが、悪用される脆弱性は新しいものではない。認証情報の窃取と悪用という構造は、クラウド時代から変わらず、サイバーセキュリティの古典的な課題に過ぎない。しかし、LLMが意思決定や業務自動化に深く組み込まれた現在、その影響度は過去のリソースハイジャックより深刻になりうる。

防御の要は、最新のセキュリティ機構ではなく、基本の徹底にある。APIキーを高価値資産として扱い、スコープを限定し、使用状況を意図的に監視すること。技術は新しくとも、攻撃者が突く弱点は既知のものであり、対応策もまた既知のものだ。

この記事のポイント

  • LLMjackingはLLM APIキーを不正に利用する攻撃で、財務的損失、カスタムモデル悪用、データポイズニングの3大リスクがある。
  • 攻撃経路はフィッシングや設定ミスなど、従来の認証情報窃取と共通する。
  • 検知には利用ベースラインの確立と請求アラートの監視が有効。
  • 防御策はAPIキーの定期ローテーション、ワークロード固有のキー発行、最小権限の徹底が中核となる。
海田 洋祐
TypeScript 7.0 RCリリース、Go実装でコンパイル速度10倍に

TypeScript 7.0 RCリリース、Go実装でコンパイル速度10倍に

TypeScript 7.0 RCの概要とインストール方法

TypeScript 7.0 RCの概要とインストール方法

TypeScript 7.0 RCの最大の変更点は、コンパイラそのものがGo言語で再実装されたことにある。これまで約10年にわたってTypeScript自身(セルフホスト)で書かれJavaScriptにトランスパイルされてきたコードベースを、Goに移植し直した。ネイティブコードの実行速度と共有メモリによる並列処理によって、コンパイル速度はTypeScript 6.0と比較して約10倍高速化した。

パッケージのインストールは従来と変わらずnpmから行える。以下のコマンドでRelease Candidateを取得し、すぐに試せる。

npm install -D typescript@rc

インストール後は npx tsc --version でバージョンを確認できる。7.0.1-rc が表示されれば準備完了だ。コマンドラインの挙動はTypeScript 6.0と変わらず、同じ型チェック結果が得られる。エディタで試すには、VS Code向けに提供されている TypeScript Native Preview 拡張機能 をインストールするとよい。この拡張機能はLanguage Server Protocol(LSP)に基づいており、Copilot CLIを含む多くのエディタで動作する。

既存のTypeScript 6.0との共存

TypeScript 7.0 RCは安定版に近いが、プログラム向けの正式なAPIは少なくとも数か月先のバージョン7.1まで提供されない。このため、TypeScriptチームは6.0と7.0を並行して使い分けられる仕組みを用意した。互換パッケージ @typescript/typescript6 を導入すると、tsc6 という別名のバイナリが利用可能になる。従来のツールチェーンは6.0に固定しつつ、開発中の7.0を試す構成が取れる。

npm install -D typescript@npm:@typescript/typescript6
npm install -D typescript-7@npm:typescript@rc

これにより tsc は7.0を指し、tsc6 は6.0を指す。typescript-eslintのようなピア依存関係を持つツールでも問題なく使い分けられる。ナイトリービルドは現在 @typescript/native-preview パッケージで提供されており、バイナリ名は tsgo となっている。安定版リリース後は typescript パッケージに統合される予定だ。

単一スレッド動作と並列化の制御

TypeScript 7.0では、解析(パース)、型チェック、出力(エミット)の各段階が並列化されている。解析と出力はファイルごとに独立して処理できるため、大規模なコードベースほど効率よくスケールする。一方、型チェックはファイル間の依存関係が複雑で、完全に独立して動かすと計算の重複やメモリ消費が増える。この課題に対処するため、7.0は 固定数の型チェッカーワーカー を立ち上げる仕組みを採用した。デフォルトのワーカー数は4で、--checkers フラグで変更できる。

CIランナーのようにCPUコア数やメモリが限られた環境では、ワーカー数を減らすことでオーバーヘッドを抑えられる。稀に、--checkers の値によって型チェック結果にわずかな順序依存の差異が出る場合がある。チーム間で同じ結果を得るには、明示的にワーカー数を固定しておくのが安全だ。

従来のシングルスレッド処理と 7.0 の並列処理の比較
従来(TypeScript 6.0)シングルスレッド
パース ファイルA 型チェック ファイルA 出力 ファイルA
全ファイルを 1 スレッドで逐次処理するため、コードベースが大きいと待ち時間が線形に増加する
TypeScript 7.0 の並列処理
パース ファイルA パース ファイルB (同時実行)
型チェッカー 1 担当範囲内のファイル群 型チェッカー 2 別範囲のファイル群
出力 ファイルA 出力 ファイルB
複数スレッドが並列動作し、全体のビルド時間が大幅に短縮される
パース(解析)   型チェック   出力

このデモで示したように、TypeScript 7.0は複数のスレッドを活用して処理を同時に進める。単一スレッドに制限したい場合は --singleThreaded フラグを指定すると、すべての処理を1スレッドで行える。デバッグやパフォーマンス比較に役立つモードだ。

プロジェクト参照ビルドの並列化

TypeScript 7.0はプロジェクト内の並列化に加え、複数のプロジェクト参照を同時にビルドできるようになった。新しい --builders フラグで、並列実行するプロジェクトビルダーの数を制御する。モノレポ構成で多数のプロジェクトを抱える開発環境では、全体のビルド時間をさらに短縮できる可能性が高い。

注意点として、--builders の数と --checkers の数は乗算で効いてくる。たとえば --builders 4 --checkers 4 と指定すると、最大で16個の型チェッカーが同時に動作し、マシンのリソースを圧迫する場合がある。CIランナーやローカル環境のコア数、メモリ容量に応じて適切なバランスを探ることが重要だ。--builders の数値を変えても型チェック結果自体は変わらないが、プロジェクト間の依存グラフがボトルネックになるため、すべてのケースでリニアに速くなるわけではない。

Goへの移植がもたらす互換性と安定性

Goへの移植がもたらす互換性と安定性

今回の移植は「スクラッチからの書き直し」ではなく、既存のTypeScript実装を忠実にGoへ移植する手法が取られた。型チェックのロジックはTypeScript 6.0と構造的に同一であり、これまで蓄積してきた膨大なテストスイートをすべてパスしている。Microsoft社内外の数百万行に及ぶコードベースで実際に使われており、高い互換性と安定性を維持している。

Bloomberg、Canva、Figma、Google、Linear、Miro、Notion、Slack、Vercelなど多くの企業がプレリリース版をテストし、ビルド時間の大幅な短縮と軽快な編集体験を報告している。TypeScriptチームはこれらのフィードバックを受け、リリース候補の品質に自信を持っている。

テンプレートリテラル型のUnicode対応改善

TypeScript 7.0では、テンプレートリテラル型におけるUnicodeコードポイントの扱いがより直感的になった。これまではJavaScriptのUTF-16インデックスに従い、サロゲートペアの分割が発生していた。たとえば "😀abc" をテンプレートリテラル型で推論すると、["\ud83d", "\ude00abc"] のように分割されることがあり、意味的に正しくない文字列リテラル型が生成される可能性があった。

7.0では for...of ループやスプレッド構文と同様に、"😀" を1つの単位として扱う。これにより、絵文字や一部の多バイト文字を含む文字列操作がより自然になり、意図しない型エラーを防げる。UTF-16コードユニット単位での操作を前提としていた型レベルユーティリティには破壊的変更となるが、ほとんどのケースで開発者の期待に沿う結果になる。

JavaScriptファイルのサポート見直し

TypeScriptはもともと、JSDocコメントや特定のコードパターンを解析することでJavaScriptファイルの型チェックをサポートしてきた。7.0ではこの動作をTypeScriptファイル(.ts)の解析ロジックとより一貫性のある形に再設計している。一部の旧来のパターンやJSDocタグの解釈が変更され、より厳密な型の扱いが求められるようになった。

たとえば、値が期待される箇所で直接型として値を使う記法は許容されず、typeof someValue と記述する必要がある。@enum タグは特別扱いされない。単独の ? を型として使うこともできず、代わりに any を使う。Closureスタイルの関数シンタックスもサポート対象外となった。詳細な変更点は公式の CHANGES.md ファイルにまとめられている。

改善されたwatchモードとエディタ体験

改善されたwatchモードとエディタ体験

TypeScript 7.0の --watch モードは、ファイル監視の基盤が全面的に刷新された。新しいファイルウォッチャーは、バンドラのParcelが採用している @parcel/watcher をGoへ移植したものだ。ParcelのウォッチャーはC++で実装されており、ビルドに完全なC++ツールチェーンが必要だったが、今回の移植では最小限のアセンブリシムを併用することで、Goのみで完結する形に仕上げられた。

この移植は、C++からGoへの直接的な翻訳から始まり、最終的にはGoらしいコードへと洗練された。テストスイートも移植され、プラットフォームを問わず安定して動作する。従来のポーリングベースのファイル監視は、大規模プロジェクトで node_modules 以下のファイル変更を監視する際に計算負荷が高かったが、新しいウォッチャーはリソース消費を大幅に抑えている。TypeScriptチームは、VS Codeでの長年の使用実績を持つParcelのウォッチャーをGoでも利用可能にしたことで、エディタとCLIの両方で一貫した高速なファイル監視を実現した。

エディタでの進化とLSP対応

エディタ体験も大きく向上している。VS Code向けのTypeScript Native Preview拡張機能は、LSP(Language Server Protocol)上に構築されており、複数スレッドを活用してリクエストを並列処理する。自動インポート、ホバー情報の展開、インラインヒント、コードレンズ、ソース定義への移動、JSXのリンク編集やタグ補完など、多くの機能が追加された。ベータ版で不足していたセマンティックハイライトや「インポートの並び替え」「未使用インポートの削除」といった機能もRCで組み込まれている。

TypeScriptチームの分析によれば、言語サーバーの失敗コマンド数はTypeScript 6.0と比較して20分の1以下に削減された。GitHub上の主要なTypeScriptおよびJavaScriptコードベースを使ったファズテストを通じて、品質の高さが裏付けられている。

TypeScript 6.0からの移行で注意すべき点

TypeScript 6.0からの移行で注意すべき点

TypeScript 7.0は6.0の型チェック動作と互換性を持つが、6.0で導入された新しいデフォルトや非推奨機能はそのままハードエラーとして扱われる。6.0から7.0への移行をスムーズに進めるために、まず6.0を導入し、非推奨フラグや新しい設定にコードベースを適応させておくことが推奨されている。

以下に主なデフォルト変更点をまとめる。

  • strict がデフォルトで true になる
  • module のデフォルトが esnext になる
  • targetesnext 直前の安定版ECMAScriptバージョンを指す
  • noUncheckedSideEffectImports がデフォルトで true になる
  • libReplacement がデフォルトで false になる
  • stableTypeOrdering がデフォルトで true になり、無効化できない
  • rootDir がデフォルトで ./ になり、内部のソースディレクトリを明示的に設定する必要がある
  • types のデフォルトが [] になり、以前の動作に戻すには ["*"] を指定する

rootDir の変更は、tsconfig.jsonsrc のようなディレクトリの外にあるプロジェクトで影響が大きい。include./src を指定しつつ、compilerOptions.rootDir./src を追加すれば、ディレクトリ構造を維持できる。また、非推奨からハードエラーになった項目として、target: es5module: amd, umd, systemjs, none のサポート終了、moduleResolution: node/node10/classic の非サポート化、alwaysStrict の強制などが含まれる。詳細はTypeScript 6.0のリリースブログでも確認できる。

今後のロードマップと安定版リリース

今後のロードマップと安定版リリース

TypeScriptチームは、RCの公開から約1か月以内にTypeScript 7.0の安定版をリリースする計画を立てている。今後はリリース調整やロジスティクス、報告されたリグレッションの修正に注力し、7.1でのAPI機能の拡充にも取り組む。

実際のプロジェクトでTypeScript 7.0を試し、問題があればGitHubの microsoft/typescript-go リポジトリ でフィードバックを送ることが期待されている。TypeScriptチームは、コミュニティのテスト参加によって安定版を万全の状態で届けたいと考えている。フィードバックは、BlueskyやMastodon、Twitterでも受け付けている。

この記事のポイント

  • TypeScript 7.0 RCはGo言語で再実装され、コンパイル速度が最大約10倍に向上した
  • 既存のTypeScript 6.0と並行して使い分けられる共存パッケージが提供されている
  • 並列化機能(–checkers、–builders)により大規模プロジェクトのビルド時間を短縮
  • watchモードの刷新とエディタのLSP対応強化で、開発体験全体が高速化された
  • 6.0からの移行には、非推奨機能のハードエラー化やデフォルト設定の変更に注意が必要
海田 洋祐
CSS @functionとalpha()、Grid Lanesの最新動向

CSS @functionとalpha()、Grid Lanesの最新動向

CSSは日々進化している。2026年6月半ば、CSSの関数定義を刷新する@functionや、透明度操作をシンプルにするalpha()、レイアウトの可能性を広げるGrid Lanes、対話要素の使い勝手を高める<dialog>の改良など、実務に直結する話題が相次いでいる。

これらの機能は、現時点ではブラウザ対応が完了していないものも含まれるが、開発体験を大きく変えるポテンシャルを持つ。とくに@functionは今年中にBaseline入りする可能性が高い機能として注目されている。この記事では、それらの仕組みと現場での活用イメージをまとめた。

CSS @functionの基礎と開発体験

CSS @functionの基礎と開発体験

CSSのカスタムファンクションを定義できる@functionルールが、2026年の大きなトピックの一つだ。従来のプリプロセッサ(Sassなど)に頼らず、ブラウザ上で直接再利用可能な関数を記述できる点が画期的である。Jane Ori氏が執筆した解説記事は、初心者にも理解しやすいステップバイステップ形式で、CSS-TricksのAlmanacにもドキュメントが用意されている。

@functionの書き方と基本構造

@functionは、入力値を受け取り、計算や変換を経て新たなCSS値を返す仕組みだ。基本的な構文は以下のようになる。

@function --my-function(--param1, --param2) {
  result: calc(var(--param1) + var(--param2));
}
従来の方法(Before)
毎回手動で計算
幅: 100% – 20px などを都度記述
@function導入後(After)
関数を定義して再利用
width: calc(100% – var(–gap)); の代わりに関数適用

この例では、2つのパラメータを受け取り、calc()で合計を返すだけのシンプルな関数だが、より複雑な条件分岐やループ処理に相当するロジックも記述できるようになる見込みだ。開発者は、これまでJavaScriptやビルドツールに頼っていたスタイルロジックを、CSSのレイヤーで完結させられる。

実践で役立つユースケース

@functionが威力を発揮するのは、テーマのカラーパレット管理やレスポンシブな余白計算などの局面だ。たとえば、ブランドカラーをベースに明度や彩度を動的に調整する関数を定義すれば、ダークモードへの切り替えも数行で済む。

@function --tint(--color, --amount) {
  result: oklch(from var(--color) l, calc(c * var(--amount)), h);
}
関数による色生成デモ(概念イメージ)
基本色
彩度を下げた色(tint適用)
彩度を上げた色(tint適用)
※このデモは@functionの概念を視覚化したイメージです。実際の動作はブラウザの対応状況を確認してください。

@function@if@forといった制御ルールを組み合わせれば、Sassの関数に匹敵する表現力が手に入る。ビルドステップを減らせるため、サイトパフォーマンスの向上にも寄与するだろう。

alpha()関数がもたらす色指定の簡素化

alpha()関数がもたらす色指定の簡素化

CSSの色操作で長年煩わしかったのが、透明度(アルファチャンネル)の指定方法だ。alpha()関数は、このストレスを大幅に軽減する。これまで相対色構文で必須だった長い記述が、直感的な構文に置き換わる。

従来の相対色構文との比較

カスタムプロパティで色を管理している場合、透明度を変更するにはoklch(from var(--color) l c h / 0.5)のように、色空間とチャンネルを明示しなければならなかった。--colorに値だけを格納する回避策もあるが、結局はoklch()を毎回書く手間が残る。

/* 値だけを格納する方式 */
--color-values: 0.65 0.23 230;
color: oklch(var(--color-values));
color: oklch(var(--color-values) / 0.5);
/* 関数ごと格納する方式 */
--color: oklch(0.65 0.23 230);
color: var(--color);
color: oklch(from var(--color) l c h / 0.5); /* 冗長 */

alpha()を使えば、色空間やチャンネルを意識せずに済む。Jason Leo氏のコメントにもあるように、コードの意図が明確になり、宣言も短くなる。

color: alpha(from var(--color) / 0.5);
Before(相対色構文)
oklch(from var(--color) l c h / 0.5)
色空間と全チャンネルを列挙する必要あり
After(alpha()関数)
alpha(from var(--color) / 0.5)
短く、意図が明確

alpha()はAdam Argyle氏が言及した機能で、色フォーマットに依存しない透過度の指定を実現する。カラーデザインシステムを扱うプロジェクトでは、可読性と保守性の両面でメリットが大きい。

Grid Lanesで広がるレイアウトの選択肢

Grid Lanesで広がるレイアウトの選択肢

WebKitが公開した「Field Guide to Grid Lanes」は、以前「CSS Masonry Layout」と呼ばれていたレイアウト手法の解説サイトだ。一見するとCSSグリッドの応用に見えるが、要素を自然な流れで敷き詰めるPinterest風のレイアウトを実現する。

Grid Lanesの仕組みと実装例

グリッドレーンは、カラムは固定しつつ、アイテムの高さを内容に応じて自動調整し、空きスペースを詰めて表示する。従来のCSSグリッドでは、各アイテムの行トラックを手動で調整するか、JavaScriptで高さを計算する必要があった。

.masonry {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: masonry;
}
Grid Lanesのデモ(概念イメージ)
写真1
写真2
写真3
写真4
写真5
写真6
※このデモはgrid-template-rows: masonryを疑似的に再現したイメージです。ブラウザのサポート状況を確認してください。

WebKitのガイドには、写真ギャラリー、レシピ一覧、新聞スタイル、メガメニュー、タイムライン、ピンボードといった6つの実例デモが含まれている。各デモは最小限のコードで構築されており、実務への応用がしやすい。

レスポンシブ対応とフォールバック

グリッドレーンはまだ実験的な機能だが、プログレッシブエンハンスメントの考え方で導入できる。@supportsを使えば、非対応ブラウザでは従来のグリッドレイアウトにフォールバックさせることも可能だ。

.gallery {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1rem;
}

@supports (grid-template-rows: masonry) {
  .gallery {
    grid-template-rows: masonry;
  }
}

WordPressのブロックエディタで動的に生成されるコンテンツ一覧にも、このレイアウトを適用すれば、よりリッチなデザインを提供できる。とくにポートフォリオサイトやECサイトの商品一覧で効果を発揮するだろう。

<dialog>要素の品質向上テクニック

<dialog>要素の品質向上テクニック

モーダルダイアログやポップアップを実装する<dialog>要素が、さらに使いやすくなる。Una Kravets氏が紹介したclosedby属性とoverscroll-behavior: contain、Chris Coyier氏が解説したアニメーションテクニックを合わせて見ていこう。

closedby属性とスクロール制御

closedby属性は、ダイアログ外のクリック(ライトディスミス)やESCキー押下でダイアログを閉じる動作を制御する。従来はJavaScriptで一つひとつ実装していたが、closedby="any"を指定するだけで標準動作として利用できる(Safariは未対応)。

<dialog closedby="any">
  閉じる操作を簡略化したモーダル
</dialog>
従来の挙動(Before)
JSで閉じる処理が必要
スクロールバーの有無でレイアウトシフト発生
改善後(After)
closedby=”any”で自動閉じ
overscroll-behavior: contain でスクロールを抑制

さらに、overscroll-behavior: containを併用すると、ダイアログ表示中に背面コンテンツがスクロールするのを防げる。コメントではscrollbar-gutter: stableでスクロールバーの有無によるレイアウトシフトを防ぐテクニックも紹介されている。

ダイアログのアニメーション実装

Chris Coyier氏がFrontend Mastersで公開したシリーズでは、@starting-styleを用いたスムーズな開閉アニメーションの手法を解説している。多くの開発者がつまずくポイントであるだけに、実例付きの解説は貴重だ。

dialog {
  transition: opacity 0.3s, transform 0.3s;
}

dialog[open] {
  opacity: 1;
  transform: scale(1);
}

@starting-style {
  dialog[open] {
    opacity: 0;
    transform: scale(0.9);
  }
}
t=0%(非表示)
ダイアログ(閉じている)
t=50%(アニメーション中)
ダイアログ(フェードイン中)
t=100%(表示完了)
ダイアログ(完全表示)

このアニメーションは実際に約0.3秒かけて連続的に実行される。@starting-styleで初期状態を定義することで、ブラウザが自動的に終了状態との間を補間する。ログインフォームやクッキー同意バナーなど、モーダルの表示が必要なコンポーネントで即座に活用できるテクニックだ。

CSS Day 2026とコミュニティの最新動向

CSS Day 2026とコミュニティの最新動向

毎年恒例のCSSコミュニティカンファレンス「CSS Day」が、2026年6月11日と12日にアムステルダムで開催された。今年はライブストリーミングがなかったものの、Bluesky上で多くの参加者がリアルタイムに情報を共有している。

講演スライドと舞台裏の共有

発表者のスライドや会場の様子は、#CSSDayのハッシュタグで検索できる。CSS-Tricksの記事には、登壇者のポートレート写真も掲載されており、イベントの雰囲気が伝わってくる。

現地参加できなかった日本の開発者にとっては、6月下旬に公開予定の録画が待ち遠しいところだ。新しい@functionや相対色構文に関するセッションがあったかどうかも気になるところで、動画公開後に改めて重要なポイントを整理したい。

CSS Wordleで遊びながらスキルアップ

CSS Wordleで遊びながらスキルアップ

学習ツールとして面白いのが、Sunkanmi Fafowora氏が作成した「CSS Wordle」だ。CSSのプロパティ名をWordle形式で当てるゲームで、CSS-Tricksの著者が「ここ一週間ずっとハマっている」と絶賛するほどの中毒性がある。

ゲームの仕組みと学習効果

CSS Wordleは、CSSプロパティのスペルを数回の試行で推測する。正解すると、そのプロパティの簡単な説明やブラウザ対応状況も表示されるため、遊びながら知識が広がる仕組みだ。

CSS Wordle 概念デモ
f l e x
g r i d
b o r d e r
各マスにCSSプロパティを当てはめていく

実務でCSSを扱うエンジニアはもちろん、これからCSSを学ぶ初心者にも最適なツールだ。隙間時間に数ラウンド遊ぶだけで、プロパティのスペルミスが減り、あまり使ったことのないプロパティにも触れるきっかけになる。

新たにBaseline入りしたCSS機能

新たにBaseline入りしたCSS機能

2026年6月時点で、いくつかのCSS機能が新たにBaseline(主要ブラウザで安定利用可能)に到達した。Chrome 149に含まれるこれらの機能は、実務への導入のハードルが大きく下がっている。

gap装飾と画像レンダリング

グリッドやフレックスアイテム間の溝に装飾を追加できる「Gap decorations」がBaseline入りし、image-rendering: crisp-edgesによるピクセルアートの鮮明表示も安定して使えるようになった。また、rect()関数とxywh()関数もBaselineに追加され、シェイプの定義が簡素化されている。

Baseline入り機能の関係図
Chrome 149 Gap decorations crisp-edges rect()
※一部機能(path()によるshape-outside)はSafariやFirefoxでのサポートが未対応

一方で、path()を用いたshape-outsideshape()はまだSafari・Firefoxでの対応が進んでいない。導入する際は@supportsでフォールバックを用意するのが無難だ。

この記事のポイント

  • @functionで独自のCSS関数を定義でき、ビルドツールへの依存を減らせる。
  • alpha()は色の透明度指定を短く直感的に書ける関数である。
  • Grid LanesはPinterest風のレイアウトをCSSだけで実現する新しい手法だ。
  • closedbyoverscroll-behavior<dialog>のUXが大幅に改善される。
  • CSS Day 2026の録画は6月下旬公開予定、Blueskyでスライドや写真を確認できる。
  • CSS Wordleは楽しみながらCSSプロパティのスペルや知識を習得できるゲームだ。
海田 洋祐
CSSスクロールトリガーアニメーション入門、Chrome 146で実装

CSSスクロールトリガーアニメーション入門、Chrome 146で実装

Chrome 146で、CSSによるスクロールトリガーアニメーションが実装された。これは要素がビューポート内に入ったことをきっかけに、指定した時間だけアニメーションを再生する仕組みだ。従来のスクロール駆動アニメーションとは動作原理が異なる。

スクロール駆動アニメーションが「スクロール位置に合わせてアニメーションの進行度が変化する」のに対し、スクロールトリガーアニメーションは「特定のスクロール地点でアニメーションを発火させる」点が特徴だ。JavaScriptのIntersection Observer APIをCSSで再現したような動きになる。

この記事では、両者の違いを比較したうえで、スクロールトリガーアニメーションの基本的な使い方から応用的なテクニックまでを解説する。複数要素の連動やタイムライン範囲の調整など、実践で役立つ手法をまとめた。

スクロールトリガーアニメーションとスクロール駆動アニメーションの違い

スクロールトリガーアニメーションとスクロール駆動アニメーションの違い

まず、両者の動作の違いを明確にしておく。混同しやすい概念だが、設計思想が根本的に異なる。

スクロール駆動アニメーションの基本動作

スクロール駆動アニメーションは、animation-timeline: view()animation-timeline: scroll() を使って、スクロール量や要素の交差度合いにアニメーションの進行を同期させる。スクロールが進むほどアニメーションも進み、戻せばアニメーションも戻る。再生時間という概念はなく、ユーザーのスクロール操作がそのままタイムラインになる。

たとえば、画面下から現れた要素が完全に見えるまでフェードインする、といった表現が得意だ。スクロールに吸い付くような動きで、ユーザーに自然なフィードバックを返せる。

スクロールトリガーアニメーションの基本動作

一方、スクロールトリガーアニメーションは、要素が特定のスクロール位置に達した瞬間にアニメーションを開始する。キーになるのは timeline-trigger: view() プロパティだ。これは「要素がビューポート内にどの程度入っているか」を監視し、指定したしきい値を超えた時点でアニメーションを発火させる。

重要なのは、アニメーションが固定の再生時間を持つことだ。たとえば300msかけて背景色を変える、といった指定ができる。スクロール量に進行が左右されないため、発火後の動きは常に一定になる。これにより、スクロール駆動アニメーションでは実現が難しかった「要素が現れた瞬間に一瞬だけフラッシュさせる」といった演出も容易になる。

スクロール駆動アニメーション
スクロール量 アニメーション進行度
スクロールに比例して0%〜100%まで連続的に変化。時間の概念はない。
スクロールトリガーアニメーション
しきい値到達 アニメーション発火 固定時間で再生
指定したしきい値を超えたら300msなどの固定時間でアニメーションを再生。スクロール量に比例しない。

この概念図では、両者のトリガー条件と進行方法の違いを示している。スクロール駆動は連続的、スクロールトリガーは離散的という理解で問題ない。

基本構文とアニメーションアクション

基本構文とアニメーションアクション

スクロールトリガーアニメーションの最小構成は、@keyframes でアニメーションを定義し、timeline-triggeranimation-trigger で発火条件を指定する、という流れになる。

基本例とプロパティの役割

たとえば、正方形の要素が完全にビューポートに入った瞬間に、背景色が300msかけてフェードインするアニメーションを考える。コードの基本形は以下のようになる。

/* アニメーションの定義 */
@keyframes fade-bg-in {
  to {
    background: currentColor;
  }
}

.square {
  /* アニメーションの宣言 */
  animation: fade-bg-in 300ms;

  /* 発火条件の定義 */
  timeline-trigger: --trigger view() entry 100% exit 0%;

  /* 発火時の動作設定 */
  animation-trigger: --trigger play-forwards;
}

timeline-trigger の値で指定している entry 100% exit 0% はタイムライン範囲と呼ばれる。これは「要素の下端がビューポートに入った瞬間(entry 100%)から、上端がビューポートから出るまで(exit 0%)を発火可能な範囲とする」という意味だ。この範囲内に要素が入っているあいだ、アニメーションの再生が許可される。

animation-trigger に指定した play-forwards は、要素が完全に見えるたびにアニメーションを順方向(0%→100%)で再生するキーワードだ。ただし、このままではアニメーション終了後に背景色が元に戻ってしまう。スタイルを保持するには animation-fill-mode を併用する必要がある。

fill-mode と action の組み合わせ

CSS-Tricksの著者Carlo Daniele氏によると、fill-modeとアニメーションアクションの組み合わせが、スクロールトリガーアニメーションの挙動を大きく左右する。主な選択肢は以下の3パターンだ。

① フラッシュ型(fill-modeなし)
最初のデモのように、アニメーション終了後に元に戻る。一瞬の強調表示に向く。
animation: fade-bg-in 300ms;
② ロックイン型(forwards + play-once)
アニメーションが一度だけ再生され、その後スタイルが保持される。要素が出入りしても再発火しない。
animation: fade-bg-in 300ms forwards;
animation-trigger: --trigger play-once;
③ 往復型(forwards + play-forwards play-backwards)
要素が見えている間は順方向、見えなくなったら逆方向にアニメーション。チラつきなく自然な切り替えが可能。
animation: fade-bg-in 300ms forwards;
animation-trigger: --trigger play-forwards play-backwards;
フラッシュ型  ロックイン型  往復型

往復型の play-forwards play-backwards は特に実用的だ。要素がビューポート外に出る際にアニメーションが逆再生されるため、ちらつきが発生しない。fill-modeを forwards にしていても、最終キーフレームが0%でも100%でも「完了時のスタイルを保持する」というルールが適用されるため、自然に動作する。

アクションキーワード一覧

animation-trigger に指定できるアクションキーワードは以下の表にまとめた。設計の幅を広げるために把握しておきたい。

アクション
効果
play-forwards
アニメーションを順方向(0%→100%)で再生
play-backwards
逆方向(100%→0%)で再生
play-once
順方向または逆方向のどちらか最初の一度だけ再生
play
最後に指定された方向で再生(未指定時は順方向)
pause
アニメーションを一時停止
reset
一時停止し、進行度を0にリセット
replay
進行度を0にリセットするが、一時停止はしない

これらのアクションを組み合わせることで、「スクロールに応じてアニメーションを途中で反転させる」「一度だけ発火させて二度と動かさない」といった細かな制御が可能になる。

複数要素への適用とスタッガー効果

複数要素への適用とスタッガー効果

スクロールトリガーアニメーションの真価は、複数要素を連動させた演出で発揮される。アクションやfill-modeが独立しているため、共通のトリガー設定を使い回しながら個別のアニメーションを割り当てられる。

CSSカスタムプロパティで設定を再利用する

たとえば、3つの正方形が順番に回転しながら拡大・背景変化する例を考える。各要素に個別のスタイルを書くのではなく、カスタムプロパティで共通設定をまとめると保守性が高まる。

.square {
  scale: 70%;
  --base-animation: intensify;
  animation: var(--base-animation) 300ms forwards;
  --animation-trigger: --trigger play-forwards play-backwards;
  animation-trigger: var(--animation-trigger), var(--animation-trigger);
  timeline-trigger: --trigger view();
  timeline-trigger-active-range-end: normal;
}

.square.rotate-left {
  animation-name: var(--base-animation), rotate-left;
}

.square.rotate-right {
  animation-name: var(--base-animation), rotate-right;
}

このコードでは、--animation-triggerplay-forwards play-backwards を格納し、animation-trigger でカンマ区切りによって2つのアニメーションに同じトリガー設定を適用している。これにより、メインのアニメーション(intensify)と回転アニメーションの両方が同じタイミングで発火する。

sibling-index() と sibling-count() による自動スタッガー

スクロールトリガーアニメーションでは、sibling-index()sibling-count() という2つのCSS関数を使って、兄弟要素のインデックスと数を動的に取得できる。これを利用すると、各要素の発火タイミングを自動的にずらす「スタッガー」が実装可能だ。

.square {
  --stagger-interval: calc(100% / sibling-count());
  --entry: calc(sibling-index() * var(--stagger-interval));
  timeline-trigger: --trigger view() entry var(--entry) exit 0%;
}

sibling-count() で親要素内の.squareの数を取得し、それを100%で割ることで1要素あたりの間隔を算出する。次に sibling-index() で現在の要素が何番目かを取得し、間隔を掛け算して各要素の entry 値を動的に決定する。この仕組みがあれば、HTMLの要素数が変わっても手作業で値を調整する必要はない。

ただし、sibling-index()sibling-count() はFirefoxで未サポートの点に注意が必要だ。プロダクションで使う場合は、フォールバックの指定を検討したい。

特定の要素をトリガーとして他を連動させる

さらに高度な使い方として、最初の要素だけをトリガーにして、残りの要素はアニメーション遅延で続けて発火させる方法がある。トリガー条件を1箇所に集約できるため、管理がしやすくなる。

.square:first-child {
  timeline-trigger: --trigger view() entry 50%;
  timeline-trigger-active-range-end: normal;
}

.square {
  --stagger-interval: calc(300ms / sibling-count());
  --animation-delay: calc(sibling-index() * var(--stagger-interval));
  animation: var(--base-animation) 300ms var(--animation-delay) forwards;
}

最初の要素がビューポートに50%入った時点でトリガーが発火し、残りの要素は animation-delay で順番にアニメーションを開始する。この方法なら、トリガー設定は最初の要素にだけ書けばよい。

ただし、CSS-Tricksの記事では play-backwards 状態のときに遅延が意図通り動作しない可能性が指摘されている。逆再生時にはdelayが含まれてしまい、スタッガーが崩れるようだ。今後のブラウザ実装の改善が待たれる。

タイムライン範囲の理解とカスタマイズ

タイムライン範囲の理解とカスタマイズ

スクロールトリガーアニメーションには、アクティベーション範囲(発火可能な範囲)とアクティブ範囲(発火後に有効であり続ける範囲)という2つのタイムライン範囲が存在する。この概念を理解しておくと、より精密なトリガー制御が可能になる。

アクティベーション範囲とアクティブ範囲の違い

アクティベーション範囲は「アニメーションが発火できるスクロール区間」を定義する。例えば entry 100% exit 0% は、要素が完全に見えてから完全に隠れるまでを発火可能区間とする。アクティブ範囲は「一度発火したアニメーションが、たとえアクティベーション範囲を外れても有効であり続ける区間」を指す。

アクティベーション範囲(発火可能区間)
アニメーションのトリガーが許可されるスクロール範囲。
例: entry 100% exit 0% は、要素の下端が入ってから上端が出るまで。
アクティブ範囲(有効区間)
アニメーションが発火したあとに、その状態が保持されるスクロール範囲。
timeline-trigger-active-range-end: normal; で制御可能。
発火可能区間  有効区間

実際のところ、大半のユースケースでは view() entry 100% exit 0%(要素が完全に見える間)か view() contain(要素がビューポートより大きい場合も含めて交差している間)で十分だ。タイムライン範囲の詳細な制御が必要になるのは、特殊な演出や複雑なレイアウトに限られる。

view() 関数とオフセットの調整

view() 関数はビューポートを基準にしたタイムライン範囲を定義する関数だ。固定ヘッダーなどでビューポートの実質的な領域が狭まっている場合、view(y 0 5rem) のようにオフセットを指定できる。これにより、ヘッダーに隠れる部分を除いた「実際に見えている領域」を基準にできる。

たとえば、上部に高さ5remの固定ヘッダーがあるページでは、view(y 0 5rem) と書くことで、ヘッダーの裏に入った要素はまだトリガー範囲内と見なされない。この調整は、UIコンポーネントとスクロール演出を正確に同期させる際に役立つ。

この記事のポイント

  • スクロールトリガーアニメーションは、スクロール駆動アニメーションと異なり、固定時間のアニメーションを特定のスクロール地点で発火させる仕組みである
  • fill-modeとanimation-actionの組み合わせで、往復・ロックイン・フラッシュなど多彩な演出が可能
  • sibling-index()とsibling-count()を使えば、要素数に依存しない自動スタッガーを実装できる
  • 実用上はview() entry 100% exit 0%の指定で十分だが、固定ヘッダーがある場合はview()のオフセット調整を検討する
海田 洋祐
WooCommerce 11.0が商品オブジェクトキャッシュを標準化!新規ストアは自動有効

WooCommerce 11.0が商品オブジェクトキャッシュを標準化!新規ストアは自動有効

WooCommerce 11.0がリリースされ、商品オブジェクトキャッシュが新規ストア向けにデフォルトで有効化された。この機能は、商品ページやチェックアウト処理で同じ商品データを何度もデータベースから取得する無駄を省き、ECサイトの表示速度を底上げする。

可変商品がある製品ページでは約9〜12%、バンドル商品を含むチェックアウト処理では6〜12%の処理速度改善が報告されている。今回の変更は、WooCommerce 10.5で実験的導入が始まったキャッシュ機構が安定動作の段階に達したことを示している。

新規にWooCommerce 11.0以上をインストールしたストアには自動で適用されるが、アップグレードした既存ストアの設定は一切変更されない。必要に応じて管理画面から手動でオンにできる仕組みだ。

商品オブジェクトキャッシュの仕組みとパフォーマンス改善の数字

商品オブジェクトキャッシュの仕組みとパフォーマンス改善の数字

リクエスト内で商品データを使い回すメモリ内キャッシュ

このキャッシュは、一度のHTTPリクエストの間だけ生きている、揮発性のメモリ内キャッシュだ。wc_get_product(123)が呼ばれると、キャッシュに保存されていればデータベースに問い合わせず、すぐに商品オブジェクトの複製を返す。リクエストが終わればキャッシュは完全に消去されるため、次のリクエストで古い情報が残る心配はない。

特に、wc_get_product()を同じIDで何度もコールするパターンが多いテーマやプラグインで効果が大きい。各呼び出しが独立したオブジェクトのクローンを返すため、意図せず商品データの状態を共有してしまうバグも防げるようになった。

キャッシュなし(従来)
1回目 wc_get_product(123) DBから取得(遅い)
2回目 wc_get_product(123) DBから再取得(まだ遅い)
3回目 wc_get_product(123) DBからまた取得
キャッシュあり(WC 11.0)
1回目 wc_get_product(123) DBから取得(初回のみ)
2回目 wc_get_product(123) メモリ内キャッシュ(即返却)
3回目 wc_get_product(123) メモリ内キャッシュ(高速)
※各呼び出しで返されるのは常に商品オブジェクトのクローン(複製)。呼び出し元どうしで状態が共有されることはない。

このデモは、同じ商品IDに対する繰り返し呼び出しがキャッシュによってどれだけ無駄を省けるかを示している。実際のECサイトでは、商品ループやセール情報の取得、決済フローの中で wc_get_product() が頻繁に呼ばれるため、体感速度の改善が期待できる。

実測値として9〜12%の高速化

WooCommerce 10.5の実験的導入時に公表されたパフォーマンス測定値は、今回の正式適用後も同じだ。可変商品(サイズや色のバリエーションがある商品)の製品ページでは、読み込み時間が9〜12%短縮された。バンドル商品を含むチェックアウト処理では6〜12%高速化されている。

この改善幅は、商品データを繰り返し取得する重いクエリがページ表示のボトルネックになっている状況で顕著だ。小規模なサイトでは効果が体感しにくいケースもあるが、商品数が多いストアや複雑な製品構成のサイトでは、目に見える速度向上が得られる。

WooCommerce 10.5から11.0への段階的な導入プロセス

WooCommerce 10.5から11.0への段階的な導入プロセス

10.5で実験的機能として登場、10.6で互換性の宣言が「互換」に

商品オブジェクトキャッシュは、WooCommerce 10.5で「実験的機能」として初めて公開された。当時はデフォルトで無効であり、ストア運営者が手動でオンにする必要があった。機能自体は、wc_get_product()の呼び出しをインターセプトし、リクエスト単位のメモリ内キャッシュからデータを返す仕組みだ。

WooCommerce 10.6では、この機能のプラグイン互換性宣言が「非互換」から「互換」に変更された。実験期間中に拡張機能エコシステム全体で互換性の問題が一切報告されなかったため、明示的に互換性を宣言していない拡張機能も、デフォルトで互換とみなされるようになった。

もし拡張機能が明示的に「この機能とは非互換」と宣言している場合は、WooCommerceの機能画面に従来通り非互換の通知が表示される。しかし、そのような宣言が必要になった拡張機能は見つかっていない。

11.0で新規ストアへの自動有効化を実装

WooCommerce 11.0のクリーンインストール時には、インストールプロセスの一環として商品オブジェクトキャッシュが自動で有効になる。機能登録自体は enabled_by_default => false のまま変更されていないが、新規インストール時に明示的に有効化が書き込まれる仕組みをとっている。

これは、HPOS(High-Performance Order Storage)など、他の機能がオプトインから新規インストール時デフォルトへ移行した際と同じパターンだ。バージョンアップだけでは既存ストアの設定を変更しない、慎重な設計が貫かれている。

既存ストアの挙動と手動有効化の手順

既存ストアの挙動と手動有効化の手順

アップグレードしても設定は一切変わらない

WooCommerce 11.0より前に構築されたストアは、11.0へアップグレードしても既存のキャッシュ設定がそのまま維持される。もし以前に無効だった(それが11.0以前のストアのデフォルト設定だ)なら、アップグレード後も無効のままだ。すでに手動で有効にしていたストアは、そのまま有効が継続される。

つまり、次の3パターンに整理できる。

  • WooCommerce 11.0以降を新規インストール → 自動的に有効(操作不要)
  • 既存ストアで機能が無効だった → アップグレード後も無効のまま(手動で有効にできる)
  • 既存ストアで機能が有効だった → アップグレード後も有効のまま(操作不要)

手動で有効化する方法

既存ストアでこの機能を試したい場合、管理画面の WooCommerce → 設定 → 詳細設定 → 機能 にアクセスし、「商品オブジェクトをキャッシュする(Cache Product Objects)」のトグルをオンにすればよい。ただし、設定変更後にサイト全体の動作を一通りチェックしておくことが推奨される。

手動有効化の流れ
STEP 1 WooCommerce → 設定 へ移動
STEP 2 詳細設定 → 機能タブを開く
STEP 3 「Cache Product Objects」をオンにする
STEP 4 変更を保存して動作確認

トグルをオンにすると、その瞬間からリクエスト単位の商品キャッシュが働き始める。とくに、複数の拡張機能が同じ商品データにアクセスする大規模ストアでは、即効性のある改善が期待できるだろう。

拡張機能開発者への影響と注意点

拡張機能開発者への影響と注意点

標準APIを使っていればコード変更は不要

wc_get_product() やその他 WooCommerce 標準 API を通じて商品を取得している拡張機能は、このキャッシュの影響をまったく受けない。キャッシュは内部で透過的に動作し、呼び出し元には変わらず正しい商品オブジェクトが返る。

キャッシュから返されるのは、あくまで独立したクローンなので、取得した商品オブジェクトを編集しても他の処理に副作用が及ぶことはない。したがって、従来のコーディング規約に従っている拡張機能は、そのまま動作し続ける。

直接SQLを実行する拡張機能が注意すべきポイント

注意が必要なのは、WooCommerceのメタフックを経由せずに、商品データに対して直接SQLクエリを発行している拡張機能だ。これらのクエリはキャッシュの無効化フックを迂回するため、更新後のデータがキャッシュに反映されず、古い情報が返ってしまう可能性がある。

この問題は、商品オブジェクトキャッシュに限った話ではなく、WooCommerceのデータ整合性全般に関わる設計課題だ。該当する拡張機能を開発している場合は、標準の wc_get_product() やメタデータ更新用のAPIを使うことで、キャッシュの恩恵を受けつつ、データ不整合も回避できる。

今後のロードマップと全ストアへの有効化計画

今後のロードマップと全ストアへの有効化計画

データ蓄積後に全ストアで有効化へ

今回のリリースは通過点であり、最終的にはすべてのストア(既存ストアも含む)で商品オブジェクトキャッシュを有効化する計画が示されている。現時点で具体的な実施時期は明言されていないが、十分なストアでの稼働データが蓄積された段階で判断される。

すでに実験期間で問題が報告されていないこと、新規インストールのデフォルト有効化でさらなる実績が積み上がることを踏まえると、早ければ数バージョン後には全ユーザー対象の強制有効化に踏み切る可能性が高い。

問題が発生した場合の報告先

もし商品オブジェクトキャッシュに関連して予期せぬ挙動が見つかった場合、WooCommerceのGitHubリポジトリでIssueを報告してほしいと開発チームは呼びかけている。拡張機能開発者やストア運営者からのフィードバックが、今後の安定化に直結する。

この記事のポイント

  • WooCommerce 11.0 で商品オブジェクトキャッシュが新規ストア向けに自動有効化された
  • 可変商品の製品ページ読み込みは 9〜12% 高速化、バンドル商品のチェックアウトは 6〜12% 改善
  • 既存ストアはアップグレードしても設定変更なし、管理画面から手動でオンにできる
  • 標準の WooCommerce API を使う拡張機能はコード変更不要で動作する
  • 最終的には全ストアで有効化される予定で、Issue 報告を募っている
海田 洋祐
WooCommerceにEU契約撤回ボタンを無料で追加する方法

WooCommerceにEU契約撤回ボタンを無料で追加する方法

2026年6月19日からEU消費者へ販売するオンラインショップには、契約を撤回する「離脱ボタン」をストアフロントに設置する義務が発生する。WooCommerceには標準でこの機能がないため、無料の専用プラグインを見極めて導入すれば、技術的な難しい変更なしに対応できる。

なぜ2026年6月からEU向けWooCommerceに契約撤回ボタンが必要なのか

なぜ2026年6月からEU向けWooCommerceに契約撤回ボタンが必要なのか

EU指令2023/2673(従来の消費者権利指令に第11a条を追加)が、2026年6月19日以降にEU在住の消費者を対象に販売するすべての事業者に対して、契約を撤回するための「明確に表示されたワンクリック機能」の提供を義務付けている。これは商品の返品とは別に、契約そのものから離脱する手段を消費者に与えるものだ。

日本からEUへ越境ECを行う事業者も、現地の消費者をターゲットにしている限り例外ではない。WooCommerce単体ではこの離脱機能に対応しておらず、公式要望トラッカー上で議論は続いているものの、すぐに実装される見込みはない。そのためプラグインによる早期の対応が欠かせない状況になっている。

WooCommerce向け離脱ボタンプラグインで絶対に押さえるべき機能

WooCommerce向け離脱ボタンプラグインで絶対に押さえるべき機能

多数の無料プラグインが出回っているが、法令を満たすために最低限チェックするポイントは変わらない。見落としを防ぐために、以下の基準を事前にリストアップしておくことが大切だ。

ワンクリックで契約撤回が完了する仕組み

消費者がボタンを押すだけで、追加のフォーム入力や本人確認なしに撤回の意思表示が完了しなければならない。撤回の受付通知が自動的にメールで送られる仕組みも必須になる。

わかりやすく目立つボタン表示

「契約を撤回する」といったボタン文言が、注文確認画面やマイアカウントページなど、消費者が容易に見つけられる位置に常に表示される必要がある。テーマのスタイルに埋もれず、かつ法的に十分な表示であることが求められる。

GDPRおよび個人データ取り扱いへの配慮

離脱ボタンの動作に伴って取得される個人データ(注文ID、メールアドレスなど)の取り扱いがGDPRに準拠しているかも確認する。プラグインが不要なデータを保存していないか、またデータ保持期間の設定ができるかが重要な判断材料になる。

多言語対応と日本向けの翻訳品質

EU圏内で複数言語のサイトを運営する場合、ボタン文言や通知メールを各国語に切り替えられる多言語対応が必須になる。日本語で運用しているサイトでも、管理画面表示が適切に翻訳されているか、表示されるフロント文言が自然かを確かめておきたい。

更新の継続性とエコシステムとの相性

WordPress本体やWooCommerceのアップデートに追従しているか、アクティブインストール数や最終更新日を確認する。法典の変更に応じて仕様が変わる可能性もあるため、活発にメンテナンスされているプラグインを選ぶことで将来のリスクを抑えられる。

無料のEU契約撤回プラグインを安全に選んで導入する流れ

無料のEU契約撤回プラグインを安全に選んで導入する流れ

実際にプラグインを選ぶ際には、機能のチェックリストをクリアするだけでなく、自分のサイト環境で競合なく動作するかのテストがとても重要だ。以下の手順で進めれば、手戻りなく導入できる。

STEP 1 公式リポジトリで「withdrawal button」などのキーワードで複数の無料プラグインをリストアップする
STEP 2 前述の必須機能を満たしているか、説明文とスクリーンショットで下調べする
STEP 3 テスト環境またはステージングサイトでプラグインをインストールし、有効化する
STEP 4 ボタンの表示位置や文言、撤回後の自動メール通知を確認し、必要に応じて外観やフックを調整する

上図は一般的な導入手順を示したイメージで、実際のプラグインによって設定画面の構成は異なる。

プラグイン導入後に必ずチェックする項目と表示カスタマイズのコツ

プラグイン導入後に必ずチェックする項目と表示カスタマイズのコツ

プラグインを有効化しただけでは、テーマの都合でボタンが正しく表示されなかったり、通知メールが迷惑メールに振り分けられたりするケースがある。以下のポイントを必ず実機で確認しておく。

Before(対応前)
注文確認ページに契約撤回の手段が一切表示されない
After(プラグイン導入後)
「契約を撤回する」ボタンが目立つ位置に常時表示され、ワンクリックで撤回完了と通知が飛ぶ
対応前  対応後

マイアカウントページと注文詳細画面の両方にボタンが現れるか

購入後の消費者がアクセスするマイアカウント内の注文一覧や個別注文画面、そしてゲスト購入者向けの注文確認ページの両方でボタンが機能するかを必ず検証する。プラグインによってはゲスト購入に対応していないこともあるため注意が必要だ。

撤回後のフローがEC事業者側にも通知されるか

消費者が撤回ボタンを押したあと、店舗運営者にメールや管理画面内の通知が届く仕組みになっているかも重要だ。対応が遅れるとトラブルに発展するため、通知が確実に飛ぶ設定になっているかを最初のテストでつかんでおく。

表示をCSSで微調整したい場合の注意

ボタンの色やサイズをテーマに合わせたいときは、追加CSSに直接スタイルを書いて調整するのが現実的な方法だ。ただし、プラグインが出力するHTMLのクラス名やIDはアップデートで変わることがあるため、子テーマのstyle.cssに依存しすぎないようにし、変更後は必ず再テストを行う。

よくある質問

WooCommerce用のEU離脱ボタンプラグインは本当に無料で使えますか

現在、WordPress公式リポジトリで複数の無料プラグインが公開されている。いずれも基本機能は無料で提供されており、有料版で追加機能が解放される場合もあるが、法令要件を満たすだけなら無料で十分対応できる。

ボタンの設置だけでEUの法律要件はすべて満たせますか

離脱ボタンは指令が求める機能の一部だ。合わせて返品ポリシーの明示や、撤回後の返金手続きを整備する必要がある。プラグインはあくまで技術的な「ボタンの提供」部分を解決するものだと理解しておくことが大事だ。

多言語サイトでボタン文言を日本語にしたい場合の対処法は

多くのプラグインは翻訳ファイルを内包しているか、管理画面でボタン文言を自由にカスタマイズできる。日本語の翻訳が不完全な場合はLoco Translateなどの別の翻訳プラグインを併用して、表示テキストだけを書き換えることも可能だ。

プラグインがWooCommerceの今後のアップデートで動かなくなる心配は

定期的に更新されているプラグインを選ぶことでリスクは下げられる。導入前に最終更新日とアクティブインストール数、サポートフォーラムの反応を確認し、万が一に備えてステージング環境を用意しておくのが堅実な運用だ。

この記事のポイント

  • 2026年6月19日からEU向け販売店に契約撤回ボタンの設置が義務化された
  • WooCommerce標準には機能がなく、無料プラグインでの対応が現実的な解決策
  • プラグイン選びではワンクリック完了、明確な表示、GDPR配慮、多言語対応をチェック
  • 導入後は表示場所とゲスト購入時の動作を必ずテストし、通知設定も確認する
  • 定期更新が続いているプラグインを選び、ステージング環境で動作検証を行う
海田 洋祐