Frontend Weekly 2025-05-30
Remix の新たな方向性について
日付:2025 年 5 月 26 日
Remix v3 に向けた新たな方向性を発表。React Router v7 への統合完了を受けて、Preact ベースの軽量フレームワークとして再構築される。React への依存から脱却し Preact をフォークして使用し、LLM 向けに最適化されたコードとドキュメント設計を採用する。
新しいアーキテクチャでは、ブラウザネイティブ API を基盤とした開発、外部依存を極力排除した自律的なエコシステムを構築する。単一目的で交換可能な抽象化を採用したモジュラー設計でありながら、最終的には単一パッケージとして配布される。Reach UI の復活も予定されている。
React Router v7 が Shopify、X.com、GitHub、ChatGPT などで採用され安定基盤となったことで、Remix は従来のパラダイムから解放され、より実験的で革新的な方向に進むことが可能になったと述べている。
日本郵便がデジタルアドレスを発表
日付:2025 年 5 月 26 日
日本郵便が住所を 7 桁の英数字で表現する新サービス「デジタルアドレス」を開始。ゆう ID に登録した住所を 7 桁の英数字に変換し、住所入力の簡略化や利便性向上を実現する。引っ越し時でも同じデジタルアドレスを継続使用でき、住所変更の手続きが簡素化される。プライバシーに配慮した設計で、デジタルアドレスから名前や住所の逆引き検索は不可能。
現在は郵便局アプリのゆうパック送り状作成機能で利用可能だが、あて名としてデジタルアドレスのみでの郵便物送付は不可で、従来通り郵便番号・住所・氏名の記載が必要。将来的には様々な産業分野での活用を目指している。
同時に事業者向けの「郵便番号・デジタルアドレス API」を無料提供開始。郵便番号やデジタルアドレスから住所情報を取得可能で、漢字・カナ・ローマ字表記に対応。最新の郵便番号データと連携し、フリーワード検索も実装。
出展:
Google CEO、AI Mode からの外部トラフィックを約束
日付:2025 年 5 月 29 日
Google の Sundar Pichai CEO が The Verge のインタビューで、AI Mode および AI Overview がウェブへトラフィックを送ることを製品の方向性として非常に重視していると明言。パブリッシャーの懸念に対し、AI 機能がより幅広い情報源への送客を促進し、質の高い参照トラフィックを提供すると強調した。
Chrome 137 リリース
日付:2025 年 5 月 27 日
Chrome 137 が安定版としてリリース。CSS if()
関数による条件値表現の簡素化、CSS reading-flow
・reading-order
プロパティでのタブ順序制御、WebAssembly JavaScript Promise Integration(JSPI)が主要な新機能。その他、Selection API 拡張、SVG transform
属性対応、システムアクセントカラー対応、Ed25519 暗号化アルゴリズム追加など多数の機能改善。
出展:
CSS if()
関数
条件値を簡潔に表現する新機能。セミコロンで区切られた条件ー値ペアを順次評価し、最初に真となる条件の値を返す。
div { color: var(--color); background-color: if(style(--color: white): black; else: white);}
.dark { --color: black;}.light { --color: white;}
CSS reading-flow
/reading-order
Flex や Grid レイアウトでのタブ順序とアクセシビリティツールのフォーカス順序を制御。DOM 順序と視覚的順序の不整合を解決。
.grid-container { reading-flow: grid-rows;}
.item { reading-order: 2;}
WebAssembly JavaScript Promise Integration (JSPI)
WebAssembly アプリケーションが JavaScript Promise と統合。WebAssembly コードが非同期 API 呼び出し時に中断され、完了時に Promise が履行される。同期的な C/C++コードから非同期 Web API への透過的なアクセスを実現。
// C言語でのFibonacci計算(Promise経由で加算)long promiseFib(long x) { if (x == 0) return 0; if (x == 1) return 1; return promiseAdd(promiseFib(x - 1), promiseFib(x - 2));}
// JavaScriptのPromiseを呼び出しEM_ASYNC_JS(long, promiseAdd, (long x, long y), { return Promise.resolve(x + y);});
出展:WebAssembly JavaScript Promise Integration (JSPI) enters origin trial
Blob URL Partitioning
Storage Partitioning の継続で Blob URL アクセスを Storage Key(トップレベルサイト、フレーム origin)で分割。プライバシー保護を強化。
次のようにサイト A で生成された Blob URL に、別のサイトの iframe 内からアクセスできなくなった。 このような利用をしている場合、Storage Access API などを利用する検討が必要。
// サイトA (a.com) がBlob URLを作成const blob = new Blob(["データ"], { type: "text/plain" });const blobUrl = URL.createObjectURL(blob);
// サイトB (b.com) のiframeでは同じBlob URLにアクセス不可
Angular 20 リリース
日付:2025 年 5 月 30 日
Angular 20 が正式リリース。Signals API の安定化、zoneless 変更検知の開発者プレビュー、インクリメンタルハイドレーションの安定化が主要な変更点。開発者体験の向上と公式マスコットの検討も開始。
Signals API の安定化
effect
、linkedSignal
、toSignal
が安定版に昇格。Angular 16 で導入された Signals API がより成熟。
import { signal, computed, effect } from "@angular/core";
@Component({ template: `{{ fullName() }}`,})export class UserComponent { firstName = signal("John"); lastName = signal("Doe"); fullName = computed(() => `${this.firstName()} ${this.lastName()}`);
constructor() { effect(() => console.log("Name changed:", this.fullName())); }}
Zoneless 変更検知の開発者プレビュー
Zone.js なしでの変更検知が開発者プレビューに昇格。SSR でのエラーハンドリングも改善。
import { provideZonelessChangeDetection, provideBrowserGlobalErrorListeners,} from "@angular/core";
bootstrapApplication(AppComponent, { providers: [ provideZonelessChangeDetection(), provideBrowserGlobalErrorListeners(), ],});
実験的な Resource API と httpResource
非同期状態管理のための Resource API と HTTP リクエスト向けの httpResource が実験的機能として追加。
const userResource = httpResource<User>( () => `https://api.example.com/users/${this.userId()}`);
// テンプレートで直接使用@Component({ template: `{{ userResource.value() | json }}`,})export class UserProfile {}
Chrome DevTools との統合
Angular 固有のプロファイリング情報が Chrome DevTools の Performance パネルに直接表示される機能を追加。
// DevToolsでAngularプロファイリングを有効化ng.enableProfiling();