似ている4つの概念を使い分ける
システムの信頼性を高める設計思想には、似たような名前の言葉が並んでいます。
この4つは「どのタイミングで」「何を最優先に守るか」という設計の優先順位が異なります。
- フールプルーフ: ユーザーの誤操作を最初から防ぐ(入口でガード)
- フェールセーフ: 壊れたら「安全」に止める(停止を優先)
- フェールソフト: 壊れたら「継続」させる(機能低下を許容)
- フォールトトレランス: 壊れても「正常」に動かし続ける(冗長化でカバー)
納得できる解説:身近な例でリファクタリング
1. フールプルーフ
- 思想: 「人間はバカなことをする(アホなミスをする)」という事実ベースの視点。
- 例: 洗濯機の蓋を閉めないと脱水が始まらない。
- 納得ポイント: そもそも「危険な状態」になる操作をシステム的に拒否します。
2. フェールセーフ
- 思想: 「何かが壊れたら、とにかく『安全側』に倒して停止させる」という安全優先。
- 例: 信号機が故障したら、全部「赤」にする。 列車のブレーキは、電気が切れると(故障すると)自動的にかかる。
- 納得ポイント: 「動き続けるリスク」よりも「止まる安全」を選びます。
3. フェールソフト
- 思想: 「一部が壊れても、機能を落としてでも(ソフトに)動かし続ける」。
- 例: 4発エンジンの飛行機で、1発止まっても残りの3発で飛び続ける。
- 納得ポイント: 「全停止」という最悪のバグを避けるための、段階的な機能低下(縮退運転)です。
4. フォールトトレランス
- 思想: 「一部が壊れても、ユーザーに気づかせず100%のパフォーマンスを維持する」。
- 例: サーバーの電源を2重化しておく。 片方が死んでも、もう片方が瞬時に肩代わりする。
- 納得ポイント: そもそも「障害」を「許容」できるだけのリソースを二重三重に用意(冗長化)しておく考え方です。
まとめ:
これらを使い分けるコツは、「異常が起きる前か、起きた後か」、
そして起きた後は「システムの停止が許されるかどうか」で切り分けることです。
異常を「未然に防ぐ(事前)」
→ フールプルーフ
異常が「起きてしまった後(事後)」
止めるべき(安全が最優先)
→ フェールセーフ
止めてはいけない(継続が最優先)
・機能が低下しても動かす → フェールソフト
・100%の正常稼働を維持する → フォールトトレランス
