Opt-in設計とOpt-out設計

機能やオプションのデフォルト動作をどう設定するかという設計思想。ユーザー体験と認知負荷に大きな影響を与える。

Opt-out型(デフォルト有効)

機能がデフォルトで有効になっており、無効化するには明示的な操作が必要。

特徴

適用場面

事例:Next.js v13-14のCache

App Routerでは、デフォルトでデータがキャッシュされました:

// 暗黙的にキャッシュされる
fetch("https://api.example.com/data")

開発者が意識しなくてもパフォーマンスが向上する意図でしたが:

Opt-in型(デフォルト無効)

機能がデフォルトで無効になっており、有効化するには明示的な宣言が必要。

特徴

適用場面

事例:Next.js v16の"use cache"

v16では、明示的にキャッシュを宣言する方式に変更:

export async function getData() {
  "use cache";
  return fetch("https://api.example.com/data");
}

開発者が意図した場所でのみキャッシュが有効化されます:

設計の選択基準

Opt-out型を選ぶべき場合

Opt-in型を選ぶべき場合

移行の課題

Opt-out型からOpt-in型への移行は破壊的変更(Breaking Change)になります:

[[Next.js]]の事例では、v14でfetch()のデフォルトCache廃止、v15でRouter Cacheのデフォルト変更、v16で"use cache"導入と、段階的に移行しました。

プライバシーとの関係

個人情報の扱いでは、Opt-in型が倫理的・法的に求められる

マーケティングやトラッキングは、Opt-out型では倫理的に問題があります。

認知負荷の観点

Opt-out型の認知負荷

Opt-in型の認知負荷

長期的には、Opt-in型の方が認知負荷が低いことが多いです。

関連

参照