`ActionDispatch::PermissionsPolicy` に27の新機能ディレクティブを追加

rails/rails

ActionDispatch::PermissionsPolicyDIRECTIVES マップに、標準化が進んだ27のブラウザ機能が新たに追加されました。これにより、Client Hints・Bluetooth・XRデバイスなど近年普及した機能に対してもRailsの設定体系から直接ポリシーを宣言できるようになります。

背景

Permissions Policy(旧Feature Policy)は、ウェブアプリケーションが使用できるブラウザ機能をHTTPヘッダーで制御する仕組みです。RailsはこれをDSLで記述できる ActionDispatch::PermissionsPolicy として提供してきましたが、DIRECTIVES の定義が最後に更新されてから仕様側で多くの機能が追加されており、Railsのリストはその分だけ古いままになっていました。

今回の更新対象は、W3Cの webappsec-permissions-policy リポジトリ に列挙されている標準化済み機能のうち、Railsの DIRECTIVES に未収録だったものです。

技術的な変更

actionpack/lib/action_dispatch/http/permissions_policy.rbDIRECTIVES 定数に、27エントリが追加されました。変更前は22エントリでしたが、変更後は49エントリに拡張されています。

変更前(抜粋):

DIRECTIVES = {
  accelerometer:        "accelerometer",
  ambient_light_sensor: "ambient-light-sensor",
  autoplay:             "autoplay",
  camera:               "camera",
  display_capture:      "display-capture",
  # ...(22エントリ)
}

変更後(抜粋):

DIRECTIVES = {
  accelerometer:                   "accelerometer",
  ambient_light_sensor:            "ambient-light-sensor",
  attribution_reporting:           "attribution-reporting",
  autoplay:                        "autoplay",
  battery:                         "battery",
  bluetooth:                       "bluetooth",
  camera:                          "camera",
  ch_ua:                           "ch-ua",
  ch_ua_arch:                      "ch-ua-arch",
  # ...(49エントリ)
}

追加された27の機能は以下のカテゴリに分類できます:

  • Client Hints関連: ch_uach_ua_archch_ua_bitnessch_ua_full_versionch_ua_full_version_listch_ua_high_entropy_valuesch_ua_mobilech_ua_modelch_ua_platformch_ua_platform_versionch_ua_wow64
  • デバイス・ハードウェアアクセス: batterybluetoothcompute_pressuredirect_socketsxr_spatial_tracking
  • セキュリティ・アイデンティティ: attribution_reportingcross_origin_isolatedidentity_credentials_getotp_credentialspublickey_credentials_get
  • ページライフサイクル: execution_while_not_renderedexecution_while_out_of_viewport
  • その他: mediasessionnavigation_overridestorage_accesswindow_management

Rubyシンボルのキーはハイフンをアンダースコアに置換した命名規則(例: ch-ua-archch_ua_arch)を踏襲しており、既存エントリとの一貫性が保たれています。

設計判断

DIRECTIVES 定数への追記のみという最小限の変更が採用されました。

Permissions Policy のDSLは DIRECTIVES のキーをそのままメソッド名として動的に定義する構造になっているため、定数への追記だけで permissions_policy ブロック内での使用が可能になります。たとえば bluetooth :nonech_ua self: のように記述できるようになります。既存のポリシー設定には一切影響せず、後方互換性は完全に維持されています。

テストの追加がチェックリストで未チェックのまま取り込まれていますが、これはDIRECTIVESの列挙に対するロジック変更がないためと考えられます。ディレクティブの追加は既存のDSL生成ロジックに乗るだけであり、定数値の正確性は仕様文書との照合で担保される性質のものです。

まとめ

本PRは、仕様側の更新に追従してRailsのPermissions Policyサポートを現行水準に引き上げる変更です。DIRECTIVES 定数への追記という最小変更でClient HintsやBluetooth・XRといった近年標準化された機能群を網羅したことで、既存アプリへの影響なしに宣言的なセキュリティポリシー管理の対象範囲が大幅に広がります。

記事メタデータ

Generated by:
Claude Sonnet 4.6 for DiffDaily
LLM Trace:
c3de4550

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

品質レビュー結果

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

Review Criteria:

記事構成 ✓ PASS

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

リード文(総論)→背景・技術詳細・設計判断(各論)→まとめ(結論)の3部構成が明確に守られており、非常に分かりやすい構成です。

カスタムMarkdown構文 ✓ PASS

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

ファイル名付きのシンタックスハイライト、PR番号のリンク記法など、カスタムMarkdown構文が正しく使用されています。

対象読者への適合性 ✓ PASS

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

ActionDispatch::PermissionsPolicyやDSLといった専門用語を前提としており、専門知識を持つエンジニアという対象読者に完全に適合しています。

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

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

各セクション、各パラグラフが「総論→各論」の構造で書かれており、トピックセンテンスが先頭にあるため非常に読みやすいです。段落の長さも適切です。

Diff内容との照合 ✓ PASS

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

Diffの内容を正確に反映しています。コードブロックはDiffからの抜粋ですが、変更の要点を理解するために適切に省略されています。変更前後のエントリ数(22→49)も正確です。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

Permissions Policy, DIRECTIVES, Client Hintsなど、関連する技術用語を正確かつ適切に使用しています。

説明の技術的正確性 ✓ PASS

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

「定数を更新するだけでDSLのメソッドが動的に追加される」というRailsの仕組みに関する説明は技術的に正確で、変更の背景を理解する助けになります。

事実の突合 ⚠ WARNING

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

PR情報にない独自の分析が含まれています。具体的には、追加された27機能のカテゴリ分類と、テストが未チェックだった理由の推測です。これらは妥当な分析ですが、PRの事実と記事の分析が区別されていません。

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

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

PR番号(#57404)、追加されたディレクティブの数(27)、変更前後のエントリ数(22→49)など、すべての数値・固有名詞が正確です。

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

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

「permissions policy listを更新」というPRの内容を、「27の新機能ディレクティブを追加」と具体的に表現しており、PRの内容と完全に一致しています。

外部知識の正確性 ✓ PASS

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

W3Cリポジトリへの言及はDiff内のコメントに基づいています。LTSやリリース予定など、PRにない外部知識の持ち込みはありません。

時間表現の正確性 ✓ PASS

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

「古いままになっていた」「新たに追加された」といった時間表現は、PRの「since the list was last updated」という背景と正しく一致しています。