サイトアイコンmaita tomoya dev io

#96 認知負荷理論 — 3つの負荷を理解して学習と仕事を最適化する

はじめに

「午後になると頭が回らない」「複雑なコードを読んでいると途中で何をしていたか忘れる」「新しいフレームワークを学ぶとき、情報過多で逆に理解できない」——これらはすべて**認知負荷(Cognitive Load)**の問題である。

認知負荷理論は1988年に教育心理学者 John Sweller が提唱した理論で、「人間のワーキングメモリには厳しい容量制限があり、その限られたリソースをどう配分するかが学習と作業の効率を決める」という主張である。

この理論はもともと教育分野で生まれたが、近年ではソフトウェア開発の世界にも大きな影響を与えている。特に Matthew Skelton と Manuel Pais の著書『Team Topologies』では、チーム設計の中心原則として認知負荷理論を据えている。Martin Fowler も「Team Topologies の多くは認知負荷の概念に基づいている」と述べている。

ワーキングメモリの制約

認知負荷を理解するには、まずワーキングメモリの制約を知る必要がある。

Nelson Cowan の研究(2001, 2010)によれば:

  • 同時に保持できる情報: 3〜5チャンク(Millerの7±2よりも最近の研究では少ない)
  • 保持時間: 処理しなければ約20〜30秒で消失
  • 処理と保持はトレードオフ: 情報を操作するほど、保持できる量が減る

Cowan の2010年の論文 "The Magical Mystery Four" では、若い成人でも長いチャンク(慣用句や短い文)は3〜4個しか想起できないことが示されている。

重要なのは、この容量制限は訓練で増やせないという点である。できるのは「チャンクの質を上げる」(より多くの情報を1チャンクにまとめる)ことと、「無駄な消費を減らす」ことだけである。

3つの認知負荷

Swellerの理論では、ワーキングメモリを消費する負荷を3種類に分類する。

┌─────────────────────────────────────────┐
│     ワーキングメモリ容量(固定・増やせない)      │
├────────────┬────────────┬───────────────┤
│ 課題内在的   │ 課題外在的   │  学習関連的    │
│ (Intrinsic) │(Extraneous) │  (Germane)   │
│ 管理する    │ 排除する    │  最大化する   │
└────────────┴────────────┴───────────────┘

総負荷 = 内在的 + 外在的 + 学習関連的 ≦ ワーキングメモリ容量

※ 超えるとオーバーフロー → 学習停止・エラー多発・疲弊

1. 課題内在的負荷(Intrinsic Cognitive Load)

課題そのものの本質的な複雑さから生じる負荷。2つの要因で決まる:

  • 要素間相互作用性(element interactivity): 同時に考慮すべき要素の数と関係性
  • 学習者の前提知識: 同じ課題でも初心者には高く、熟練者には低い
低い内在的負荷高い内在的負荷
変数の命名再帰アルゴリズムの設計
CSSのプロパティ1つ変更複数サービス間のトランザクション設計
1つのAPIエンドポイント実装認証・認可システムの全体設計

要素間相互作用性が高い(=同時に多くの要素を頭に入れる必要がある)ほど内在的負荷は高い。

対策(管理する):

  • 複雑な課題を独立した小ステップに分割する
  • 前提知識を先に固めてからメインの課題に取り組む
  • Part-whole approach: まず個別要素を理解→その後に統合

2. 課題外在的負荷(Extraneous Cognitive Load)

情報の提示方法や環境の問題から生じる負荷。学習や作業の本質とは無関係な「純粋な無駄」である。

教育分野での研究では、外在的負荷を生む典型例として以下が特定されている:

  • Split-attention effect: 関連する情報が物理的に離れている(図と説明文が別ページにある等)
  • Redundancy effect: 同じ情報が不必要に繰り返される
  • Modality effect: すべてが視覚情報のみで聴覚チャネルが活用されていない

ソフトウェア開発文脈での具体例:

外在的負荷の発生源なぜ無駄か対策
変数名が tmp, x, data毎回「これ何だっけ」と考える意図が伝わる命名
ドキュメントが5箇所に散在探すのにワーキングメモリを消費1箇所に集約
デプロイ手順が毎回異なる手順を覚えるために記憶を使う自動化
PRのdiffだけでは意図がわからないコンテキストを推測する負荷PR descriptionを丁寧に書く
複雑なIDE設定、環境構築本題にたどり着く前に消耗Dev Containers、自動化

Team Topologies の文脈では、Matthew Skelton がこれを「組織内の外在的負荷」として拡張している:

  • 「このデプロイ手順を毎回調べ直す」= 外在的負荷
  • 「他チームのAPIの仕様変更を把握する」= 外在的負荷
  • 「プラットフォームの使い方を学ぶ」= 外在的負荷(プラットフォームチームが解決すべき)

対策(排除する):

  • ツールの自動化(手動の繰り返しを機械に任せる)
  • 情報を近くに配置する(split-attention effectの回避)
  • 不要な情報を削除する(redundancy effectの回避)
  • Developer Experience / Operator Experienceの改善
  • プラットフォームチームによる共通基盤の提供

3. 学習関連的負荷(Germane Cognitive Load)

スキーマ(知識の構造)の構築と長期記憶への定着に使われる負荷。「意味のある努力」である。

スキーマとは、関連する情報を1つのまとまりとして記憶に格納したものである。熟練者は豊富なスキーマを持っているため、複雑な問題でもパターン認識で素早く対処できる。チェスの名人が盤面を一瞬で記憶できるのは、駒の配置パターンをスキーマとして持っているからである。

学習関連的負荷が生じる活動:

活動何が起きているか
自分の言葉で概念を説明し直す精緻化(elaboration)によるスキーマ強化
異なる文脈で同じ原理を適用する転移可能なスキーマの構築
コードを書いた後に「なぜこう書いたか」を振り返るメタ認知によるスキーマ修正
新しいパターンを既存知識と結びつける既存スキーマへの統合
エラーの原因を分析して一般化する障害パターンのスキーマ化

対策(最大化する):

  • 外在的負荷を削減してリソースを確保する
  • 学んだことを記事にする・人に説明する(精緻化)
  • 振り返りの時間を確保する
  • 異なる例題で練習する(variability effect)
  • 自己説明(self-explanation)を促す

3つの負荷の関係と設計原則

2010年代以降の研究では、germane loadを独立した負荷とみなすか議論がある。Sweller自身の2010年の改訂では「germane loadはintrinsic loadに寄与するワーキングメモリリソース」と再定義している。しかし実践的には3分類モデルが有用なため、本記事では従来の3分類で説明する。

設計原則は明確:

1. 外在的負荷を最小化する(無駄の排除)
2. 内在的負荷を管理する(分割・段階化)
3. 余ったリソースを学習関連的負荷に充てる(意味のある努力)

ソフトウェア開発への応用

コード設計と認知負荷

設計原則認知負荷の観点
単一責任原則内在的負荷を分割(1つのことに集中)
良い命名外在的負荷の排除(推測不要に)
適切な抽象化チャンク化で内在的負荷を圧縮
Whyコメント外在的負荷の排除(意図の推測不要に)
一貫したパターン予測可能性で外在的負荷を削減
小さい関数/クラス内在的負荷の制限(同時考慮要素を減らす)

Team Topologies: チーム設計への応用

Team Topologies では認知負荷を3種類に分けてチーム設計に適用している:

Swellerの分類Team Topologiesでの解釈
Intrinsicドメインの複雑さ(germane的)銀行送金のビジネスロジック
Extraneous環境・仕組みの摩擦デプロイ手順、他チームとの調整
Germaneビジネスドメインへの集中ユーザー価値に直結する作業

チーム設計の核心原則:

  • 1チームが担当するサービスの認知負荷は、そのチームが処理できる量を超えてはならない
  • Stream-aligned team: germane load(ビジネスドメイン)に集中する
  • Platform team: 他チームのextraneous loadを削減する役割
  • Enabling team: 他チームのintrinsic loadを一時的に軽減する(スキル移転)
  • Complicated-subsystem team: 特定領域のintrinsic loadを引き受ける

Sky Betting and Gamingの事例では、チームの認知負荷を1-5で自己評価するアンケートを実施し、高スコアのチームから優先的にドメイン分割を行っている。

PRレビューと認知負荷

プラクティス効果
PRを小さく保つレビュアーの内在的負荷を制限
PR descriptionに背景・意図を書く外在的負荷の排除
1PR = 1つの関心事内在的負荷の分割
テストで意図を表現するレビュアーの推測コスト削減

1日の時間設計

時間帯認知リソース適した作業
午前豊富内在的負荷が高い作業(設計、複雑なバグ修正)
定例後やや消耗外在的負荷が低い整理済みタスク
夕方枯渇気味振り返り(学習関連的負荷を生む)

AI活用と認知負荷

AIツールは認知負荷の観点で以下のように位置づけられる:

AI活用削減する負荷の種類
コード補完構文記憶の外在的負荷
ドキュメント検索(MCP)情報探索の外在的負荷
自動レビューレビュアーの内在的負荷の一部をオフロード
タスク管理自動化「次何するんだっけ」の外在的負荷
振り返りの自動分析学習関連的負荷に集中できる環境を作る

注意: AIに「考える部分」まで任せると学習関連的負荷もオフロードされ、スキーマが構築されない。「探す・覚える・整える」をAIに任せ、「考える・判断する・統合する」は自分でやるのが最適バランスである。

認知負荷を測定する

2024年の研究(Springer)では、3種類の認知負荷を個別に測定する質問票が開発・検証されている。実務では以下の簡易指標が使える:

  • 「この作業中、本質的でないことを考えている時間はどれくらい?」→ 外在的負荷の指標
  • 「この1時間で、実際にドメイン問題を解いていた時間は?」→ 学習関連的負荷の指標
  • チーム単位: 「担当システムの理解度を1-5で」→ 内在的負荷の指標

まとめ

負荷定義開発での例対処
課題内在的課題自体の複雑さマイクロサービス間の依存設計分割する・前提知識を固める
課題外在的環境・提示方法の問題ドキュメント散在・手動デプロイ徹底的に排除する
学習関連的スキーマ構築の努力振り返り・記事執筆・パターン抽出リソースを確保して最大化する

「忙しいのに成長していない」と感じたら、外在的負荷に消耗されている可能性が高い。環境とツールを整え、外在的負荷を削り、浮いたリソースを学習関連的負荷(意味のある努力)に回す——これが認知負荷理論の実践的メッセージである。

参考文献

  • Sweller, J. (1988). Cognitive load during problem solving: Effects on learning. Cognitive Science, 12(2), 257-285.
  • Cowan, N. (2010). The Magical Mystery Four: How Is Working Memory Capacity Limited, and Why? Current Directions in Psychological Science, 19(1), 51-57.
  • Skelton, M. & Pais, M. (2019). Team Topologies: Organizing Business and Technology Teams for Fast Flow. IT Revolution.
  • Sweller, J., van Merriënboer, J., & Paas, F. (2019). Cognitive Architecture and Instructional Design: 20 Years Later. Educational Psychology Review, 31, 261-292.