フールプルーフの話
🙇♂ちょっと強い言葉を使うのでご注意下さい。🙇♂
フールプルーフ(fool proof)とは
人というのは生まれながらに怠惰であり、注意力が散漫で、指示を聞かずに行動したり(、ときには好奇心でやってはいけないことをやりたくなるような)生き物です。
セキュリティルールを決めて「この通りに作業しなさい」と指示しても、その作業の回数や作業者が増えてくると上のような原因でいくらかのルールが守られなかったり、ミスが発生するものです。
ルール違反やミスが起こったとき、作業者が全て悪いのではなく、人とは本来そういうものなので誰かがいつか起こしたであろうことを偶然その人が今起こしたという側面もあります。
そしてどれだけ強く指示しても、どれだけ罰則を厳しくしても、どれだけ注意深く作業者が作業を行ってもルール違反やミスの発生割合を下げること(又は報告されないルール違反やミスが増えること)が精一杯であり0にすることはできません。
もしそれで0が達成できるならば世界で起こる交通事故は毎年0件のはずだし、ケアレスミスでテストの点数が下がるなんてこともまずあり得ないですよね?
(↑教習車で事故りかけ、化学のペーパーテストで陰極と陽極を見間違えて赤点を取った私の自虐と思って下さい。)
そこで、フールプルーフ(fool proof)という考え方に目を付けてみました。
工業系の分野では一般的な考え方なので、学校や仕事で工業系の分野に触れたことがある人は聞いたことがあるかもしれません。
要は「仕組みを使って人のルール違反やミスが発生し得ないようにしましょう」もっと元の言葉で言えば「愚か者やマヌケ(fool)の行いに耐性のある作りにする」という意味です。
「"愚か者やマヌケ"なんて失礼だぞ、私はそんなことはしない!」という人もいると思いますが、例えば納期に追われていたり、なにかのミスに気付いて焦っていたり、ぼーっとしていたりすると必要な手順をスキップしたり自分でも何故そうしたか分からないようなミスをする人というのは存在するので「誰もがそうなる可能性がある」と安全側に倒して考えていると思ってください。(少なくとも私はやらかす側である自覚があります。)
ここまで、人はミスをするという話を書いていますが、念のため言っておきたいのは、頑張っても仕方がないと言いたい訳では無いということです。
ルール違反やミスの割合が下がるのだから、普段からしっかりと指示したり、気をつけて作業することは間違いなく有効で続けていくべき努力です。
しかしながら、 割合を下げることではなく0を目指すことを考えたとき 人の注意力は有限でリスクは無限なので「頑張ります!」はいつか必ず(又は既に)破綻する(している)という話です。
フールプルーフの例と利点
世の中には扇風機、各種ケーブルの端子、電子レンジ、洗濯機、車、プレス機…などたくさんのものにフールプルーフが組み込まれています。
例えば扇風機は回転中の扇風機の羽が危ないということを知っていても、人は羽に手や顔を近づけることがあるので羽にカバーが付いていたり、羽が柔らかかったりします。
各種ケーブルの接続端子は、接点の接続を間違えると機器が壊れる可能性があるので、正しい向きでしか刺さらないか逆にどの向きでも正しく刺さるようになっています。
接続端子の例は、接点の接続をミスったら機器が壊われる可能性があるという危険性を知らない人もいる中でうまく動いているよくできた仕組みです。
ものによってはルールと組み合わせて働くものもあり、工場の機械のメンテナンス中は機械の操作盤の蓋に鍵を掛けて機械の中に入る作業者が鍵を持つ(するとその人が中で作業している間は機械が絶対に動かず安全)というものもあったりします。
これらを見て言えることは、フールプルーフをベースに仕組みを考えることは分かっていても間違えてしまうことの対策になったり、分かっていないことでさえも安全に使えることに繋がるということ。
更に言うと、有限である人の注意力をフールプルーフの組み込まれた部分に使う必要がなくなり、他の部分に注意を向けやすくなることで その他の部分でもミスが減る可能性があるということです。
(プロジェクターにHDMIを繋ぐときに「端子の向きを少しでも間違うと最悪PCもプロジェクターも壊れるから、まずは端子をよく確認して…」とか思ってないですよね。
高々、「あれ、逆か?。お、入った。」くらいしか考えていないし、その一瞬以外はこれからプロジェクターで表示するスライドの内容とか、もっと他のことに注意を向けているはずです。)
理想的には(個人的な意見)
フールプルーフをセキュリティー周りの仕組みにもっと取り入れて行けたらいいな〜と思っています。
「やっちゃだめなこと」を「そもそもできないこと」にできれば、ルールは誰からも守られることを必要とせずに誰に対しても何に対しても完全に機能します。
そして、「そもそもできない」ので事故って罰を受けることも罰を与えることも起こり得ないというのも大事なことです。
(晒し上げるための監視ツールを作りたいのではなく、事故を未然に防ぐ仕組みを作りたい)
こうして、ルール違反に自分の凡ミスに怯える必要がなくなることで、その分新たなリスクがないか考えたり、もっと正確な仕組みを考えたりするような、ただルールを守る以上のところまで考える余裕が出てくるものだと思います。
努力はスケールしないからスケールできる仕組みと工夫でなんとかする。それが私達プログラマーです。
コーディングルールを守りたいならばレビューを強化するのではなくリンターを導入し、品質を上げたいならば手動テストの項目を増やさずに単体~E2Eテストを書くような、人の努力に頼らずにタスクを仕組みと工夫で正確に捌く(機械に捌かせる)のが私達の仕事なのですから、これも同じように私達ならば(全部とは言わずとも少しくらいなら)実現できると私は信じます。
この記事が気に入ったらサポートをしてみませんか?