Fetch APIの `priority` オプションをリクエストに渡せるように

rails/request.js

FetchRequest クラスに priority オプションのサポートが追加され、ブラウザのFetch APIに対してリクエストの相対的な優先度をヒントとして渡せるようになりました。

背景

ブラウザのFetch APIは priority オプションをサポートしており、同種のリクエスト間での相対的な重要度を "high" / "low" / "auto" で指定できます。しかし、これまで @rails/request.js はこのオプションを内部的に無視していたため、フォールド上のクリティカルなデータ取得とアナリティクスのバックグラウンド送信を同列に扱わざるを得ませんでした。本PRはこの制約を解消しています。

技術的な変更

src/fetch_request.jsfetchOptions ゲッターと新規 priority ゲッターの2箇所に変更が加えられ、オプションがFetch APIにそのまま透過するようになりました。

変更前:

get fetchOptions () {
  return {
    signal: this.signal,
    credentials: this.credentials,
    redirect: this.redirect,
    keepalive: this.keepalive
  }
}

変更後:

get fetchOptions () {
  return {
    signal: this.signal,
    credentials: this.credentials,
    redirect: this.redirect,
    keepalive: this.keepalive,
    priority: this.priority
  }
}

get priority () {
  return this.options.priority
}

priority ゲッターは this.options.priority をそのまま返すだけであり、未指定時は undefined になります。keepalive が未指定時に false をデフォルト値として返すのとは異なり、priority はデフォルト値を設定しない設計です。これにより、priority を指定しない既存のコードでは fetchOptionspriority: undefined が含まれますが、Fetch APIは undefined の値を無視するため動作への影響はありません。

テストは __tests__/fetch_request.js に追加されており、未指定時が undefined であること、および "high" / "low" / "auto" の各値が正しく fetchOptions.priority に反映されることを検証しています。

設計判断

デフォルト値を持たせずに undefined を透過させる方式 が採用されました。

keepalivefalsecredentials'same-origin'redirect'follow' といったように、他のオプションはデフォルト値を明示的に設定しています。一方 priority は、ブラウザが指定なしの場合に独自のデフォルト動作("auto" 相当)を行う点を考慮し、ライブラリ側で値を上書きしない選択が取られています。"auto" を明示的にデフォルト設定した場合とFetch APIの挙動が同一であるとは限らないため、透過させることでブラウザの実装に委ねる判断といえます。

利用側は以下のようにオプションを渡すだけで有効になります:

import { get, post } from '@rails/request.js'

// フォールド上のクリティカルなデータ取得
const response = await get('/api/critical-data', { priority: 'high', responseKind: 'json' })

// アナリティクスなどのバックグラウンド送信
await post('/api/analytics', { body: payload, priority: 'low' })

まとめ

priority ゲッターの追加と fetchOptions への1行追記という最小限の変更で、Fetch APIが持つリソースヒントの機能をそのままライブラリのユーザーに開放しています。既存コードへの影響はなく、必要なリクエストにのみ優先度指定を後付けできます。

記事メタデータ

Generated by:
Claude Sonnet 4.6 for DiffDaily
LLM Trace:
3a2a4b55

この記事はAIによって自動生成されています。内容の正確性については、必ずソースコードやPRを確認してください。

品質レビュー結果

Review Status:
承認済み
Review Count:
1回
Reviewed by:
Gemini 2.5 Pro for DiffDaily

Review Criteria:

記事構成 ✓ PASS

Title, Context, Technical Detailの存在と明確さ

「総論→各論→結論」の構成が明確です。リード文、背景、技術詳細、設計判断、まとめの各要素が論理的に配置されており、非常に分かりやすい構成です。

カスタムMarkdown構文 ✓ PASS

シンタックスハイライト・GitHubリンク記法の正確性

ファイル名付きシンタックスハイライト(```javascript:src/fetch_request.js)およびPR番号のリンク記法([PR #92](URL))が、ガイドラインに沿って正しく使用されています。

対象読者への適合性 ✓ PASS

エンジニア向けの適切な技術レベルと表現

内容は専門のエンジニア向けに書かれており、Fetch APIやライブラリの内部実装に関する知識を前提としています。冗長な初心者向けの説明がなく、ターゲット読者に最適化されています。

パラグラフ・ライティング ✓ PASS

トピックセンテンス・1段落1トピック・段落長

各セクションが総論・各論で構成され、各段落はトピックセンテンスで始まるなど、パラグラフ・ライティングの原則が守られています。段落の長さも適切で、高い可読性を実現しています。

Diff内容との照合 ✓ PASS

コードブロックとDiff内容の一致

記事内のコードブロックは、提供されたDiffの内容(src/fetch_request.jsの変更)を正確に反映しています。README.mdに追加された利用例も正しく引用されています。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

`FetchRequest`, `priority` オプション, `fetchOptions` ゲッター, `undefined` といった技術用語が、文脈に沿って正確に使用されています。

説明の技術的正確性 ✓ PASS

技術的主張の正確性と論理性

コード変更の目的や、`priority` オプションが `undefined` を返しうる設計についての説明が、技術的に正確かつ論理的です。

事実の突合 ✓ PASS

PR情報による主張の裏付け(ハルシネーション検出)

記事内のすべての主張は、PRのタイトル、Diff内のコードやドキュメント変更に完全に裏付けられています。ハルシネーション(捏造)や根拠のない推測は見られません。

数値・固有名詞の確認 ✓ PASS

PR番号・コミットID・バージョン等の正確性

PR番号 `#92` が記事末尾で正しく参照されています。

タイトル・説明との一致 ✓ PASS

記事タイトル・説明とPR内容の一致

記事タイトル「Fetch APIの `priority` オプションをリクエストに渡せるように」は、PRのタイトル「Allow passing through 'priority' param for requests」の内容を正確に反映しています。

外部知識の正確性 ✓ PASS

PRに記載のない外部知識(LTS、サポート状況など)の不使用

ブラウザのデフォルト挙動に関する言及は、PRのREADME.mdの差分に含まれている情報に基づいており、PR情報に基づかない外部知識の追加はありません。

時間表現の正確性 ✓ PASS

時間表現がPR情報と一致しているか

「これまで...無視していた」といった表現が、このPRによって機能が追加されたという時間的な前後関係を正しく伝えています。