ハクソク

世界を動かす技術を、日本語で。

逆モリーガード

概要

  • Molly guardは、重要なボタンの誤操作を防ぐための安全カバー
  • 名前の由来は、エンジニアの娘Mollyの逸話
  • ハードウェアだけでなく、ソフトウェアにも類似の仕組みが存在
  • 逆の発想として、**自動的に作動する「リバース molly guard」**も重要
  • ユーザー体験を向上させるための設計指針として有効

Molly Guardとは

  • Molly guardは、重要なボタンの誤操作を防ぐための物理的な安全カバー
  • 由来は、エンジニアの娘Mollyがデータセンターで重要な赤いボタンを押した逸話
  • 航空戦闘映画で見られるカバー付きスイッチが代表例
  • 民生用ハードウェアにも広く存在
    • 凹型ボタン
    • ボタン周囲のプラスチックリッジ
    • SIMカードのイジェクションホールなど

ソフトウェアにおけるMolly Guard

  • ソフトウェアにもmolly guard的な仕組みが導入されている
    • 「本当に実行しますか?」ダイアログ
      • ボタン配置の変更やキーボード操作の無効化による誤操作防止
    • 追加の修飾キーによる操作(例:Ctrl+Alt+DelのCtrlとAltがガード役)
    • 意図的な摩擦を加える複雑な操作フロー

リバース Molly Guardの発想

  • リバース molly guardは、何もしないと自動的にボタンが押される仕組み
  • 例:モバイル端末の標準的な自動進行パターン
  • 長時間のOSアップデートレンダリングなどで特に有効
  • ユーザーの不在時でも自動で処理が進む安心感
  • 質の高い設計では、ユーザーが「これで任せられる」と確信できるフローを構築

設計への示唆

  • ユーザー体験の向上には、molly guardとリバース molly guardのバランス設計が重要
  • 不要な待機や誤操作を防ぎつつ、自動進行の仕組みも適切に導入
  • 信頼感と効率性を両立するユーザーインターフェース設計

Hackerたちの意見

おお!じゃあ、iPhoneのアクションボタンを押すのに長押しが必要なのは、モリーガードってことかな!それに、`rm`もモリーガードして、全システムでデフォルトでゴミ箱に移動するようにして、フラグで強制的に削除するようにすればいいと思う。ちなみに、モリーは猫だと思ってたんだけど、経験上、猫って結構物事を混乱させるのが得意だから。
`rm`にはモリーガードがあるから、ネットで見る`rm`のコマンドは必ず-fが付いてるんだよね。
ゲームでその一時的で不可逆的なアクションに長押しが実装されてるのを見るのは、ずっとありがたいと思ってる。特にキーボードだと、間違った入力をしちゃうことが多いから。自分でよくやるガードは、キーボードの削除キーを外したり無効にしたりして、FN+Backspaceを削除に設定すること。で、削除キーの位置をF2に再利用することが多い。F2は通常、スプレッドシートのセルやファイル名を「編集」するのに使われるからね。
> それに、`rm`もモリーガードして、全システムでデフォルトでゴミ箱に移動するようにして、フラグで強制的に削除するようにすればいいと思う。すべてのシステムではなくて、一部(RHELだと思うけど?)はデフォルトでalias rm='rm -i'になってるね。
この伝説的なHNのコメントを思い出したよ: https://news.ycombinator.com/item?id=16530398
2人目の人が好奇心でプラスチックの蓋を叩いたのが混乱する… 30秒ボタンを押し続ける必要があるって書いてあるのに、どうなったんだ?
"molly-guard"っていう素晴らしいソフトウェアがあって、"poweroff"や"reboot"などの呼び出しを intercept するんだ。SSHセッション経由で呼び出されているかどうかをチェックして、そうだったらシャットダウンするシステムの名前を入力するように求められる。これで、自分のシステム(または別のサーバー)をシャットダウンするつもりが、リモートサーバーを誤ってシャットダウンすることがなくなるんだ。
もう一つ面白いのは、リモートサーバーのネットワークインターフェースを無効にすること。知り合いが、コアサービスを動かしているクラウドVMでそれを間違ってやっちゃって、クラウドプロバイダーにはなぜか仮想コンソールがなかった。結局、そのVMを諦めてバックアップから復元する羽目になった。楽しい一日だったよ。
ある時、全てのプロダクショントラフィックのリバースプロキシをうっかり再起動しちゃったことがある。再起動中は静かな2分間があったよ。その後、アクティブな接続数をチェックするモリーガードをインストールしたんだ。これでスタンバイプロキシの再起動は楽になったけど、アクティブなものは難しくなったよ。(それと、プロダクションプロキシのメンテナンスはペアでやることにした。ペアプログラミングはあまり好きじゃないけど、ペアメンテナンスは最高だね。)この出来事を新人に話すのが好きなんだ。なぜなら、(a) 誰でもミスをする可能性があること、(b) 重大なミスでも大抵はそれほど危険じゃないこと、(c) 正しい考え方でミスから多くを学べること、(d) ミスを防ぐことはできないけど、適切なシステムデザインでその影響を減らせることを教えられるから。
DevOps(あとLeanやTPS)では、もっと進んだ形がポカヨケだよね。ポカヨケは単に安全性を高めるだけじゃなくて、人がミスをしないように導いてくれるんだ。代表的な例は車の自動シフトノブ。シフトノブは、1) シフトボタンを押さずにリバースに入れちゃうのを防いで、2) ブレーキペダルを踏まずにパークやニュートラルを離れないように設計されてる。これでドライブトレインを傷めたり、車が勝手に前後に動くのを防げるんだ。ポカヨケは防御的デザインの一種でもあるよ。防御的デザインの美しい例として、普通の電気ケトルを見てみて。水が溢れてもデバイスがショートしないし、空焚きすると自動で止まる。ハンドルと本体はプラスチック製で火傷を防ぎ、ハンドルは持ちやすくて1.5Lの熱湯を持ってもこぼれないようになってる。コードはケトルから外れてて、引っ張って熱湯をこぼす心配もない。スイッチは熱い蒸気から離れた底にあって、蓋は作動中にロックされるから、こぼれたり蒸気でのダメージを防げる。水を沸かすための最もシンプルで安全な方法で、値段は20ドルだよ。
私のお気に入りのポカヨケの例は、自分で組み立てる家具キットのパーツやハードウェアが、正しい場所にしかはまらないことだね。交換可能な場合にのみ同じ幅のネジがあったり、木の棒は正しい方向を向いてないと入らなかったりする。
思い浮かぶのはロックアウトタグだね。[0] これは、作業中の大きくて厄介な機械のロックアウト/点火/エネルギー供給コントロールとしてマークされた特定のコントロールを一時的にジャムすることを意味することが多い。アクティブでない/ロックアウトされていない場合にそのコントロールが何を防ぐ必要があるかについての規制がたくさんあるけど、通常はシンプルなブレーカースイッチや油圧バルブで、機械へのエネルギーの主な供給源を制御している。穴の開いたものは、みんなが施錠するための南京錠用で、誰がまだ「そこにいる」かのカウントができるようになってる。もし急いで機械を始動する必要があって、安全だとわかっていたら、普通の作業員はタグを壊して始動できるけど、通常はクソみたいなプラスチックや薄い金属でできてるから、簡単に壊せちゃうんだよね…でも、それだけの摩擦があれば、自分が何をしてるのか考え直すきっかけになるよ。そんなふうにタグを壊さなきゃいけなかった人は知らないな。[0] https://en.wikipedia.org/wiki/Lockout%E2%80%93tagout
エンジンルームでヒューズボックスを逆に取り付けることは絶対にできないようになってる。なぜなら、取り付け穴が変な間隔で3つあって、そのうちの1つには冷却パイプを固定するための角度のついたスロットがあるから、もし逆に付けたら絶対に合わないんだ。ピンがなくてもソケットを間違って取り付けることはできないよ。配線ハーネスが正しいプラグとしか合わないようになってるからね。運転席の下にあるボディECUに電力を供給する3つの高電流のネジ端子にも小さな突起がついてるから、間違えることはないんだけど、全部60Aでヒューズが入ってるスイッチなしの電源だから、まあ、あまり関係ないかな。こういうデザインの細かいところがたくさんあっていいよね。でも、後のV8のイグニッションコイルコネクタにはその工夫がなかったのが残念。コイルパックのペアは同じなのにね。エンジンの後ろに手を入れたときに「クランクするけど始動しない」故障が多い原因が何か、当ててみて。
それ言うと面白いね。普通のケトルがどれだけデザインが悪いか、ちょっと考えてたところなんだ。上に固定されたハンドルと注ぎ口ガードがあってさ。お湯が沸いたらガードをひっくり返すんだけど、その瞬間に最初のやけどをするんだよね。お湯を注ぐときも、ハンドルが固定されてるから手を越えて上がってきて、蒸気がバシャッと出るし。ケトルを refill するのも楽しいよ。ハンドルが邪魔で、また蒸気が顔にかかることもあるし。
面白い話だけど、「モリー」ってのはエド・クロールの娘なんだ。彼は「Whole Internet User’s Guide and Catalog」の著者だよ。
俺もその子供になりかけたことがある。父はスパリー・ユニバックで働いてた。しばらくの間、地対地ミサイルのための地上支援トレーラーに取り組んでたんだ。ある土曜日に大きなテストのために仕事に行ったんだけど、なぜか母と俺も連れて行かれた(多分、母を休ませるためだろうね)。で、4歳の俺がトレーラーに入って、真っ赤なボタンを見つけたんだ… それは発射ボタンじゃなくて、緊急停止ボタンだった。これを押しちゃったら、トレーラーをオンラインに戻すのに1時間かかるところだった。誰かが俺が押す前に止めてくれたけど、それでも人気者にはなれなかったよ。その日の記憶は、実は駐車場の方が強いんだ。トレーラーにいるよりも、駐車場にいる時間の方がずっと長かったから。
ウィキペディアの項目には、モリーガードの歴史を説明する参考文献が載っていて、エドと小さなモリーの写真もあるけど、HNのコメントには関連するテキストの抜粋があるよ。見てみてね。 https://news.ycombinator.com/item?id=26633835
> プログラマーにとって、夜通し動くはずだったマシンの前に立って、何もしていないのを見た時ほど最悪な気持ちはない。何時間も関係のない質問の返事を待ってるなんて、バカみたいだ。いや、もっと最悪な気持ちがある。夜通し動くはずだったマシンの前に立って、サプライズアップデートでシステムが再起動されたのを見た時だ。これがWindowsを捨てた一番の理由の一つだね。
これはもうWindowsの機能だけじゃないね。先日、MacOSでも同じことが起こったよ。最近、セキュリティの問題を修正するための「バックグラウンド」アップデートが配信されて、何の前触れもなくマシンが再起動しちゃった。
以前、ニュージャージーの大手電力会社で通信の契約業者をしてたことがある。長年のフィールドテクニシャン(Mr. Tと呼ぼう)が、50年代に建てられた変電所のツアーをしてくれたんだ。実は、私は物に寄りかかる悪い癖があって… そしたらMr. Tが、私の腰と色あせた緑のベークライトノブの間に前腕を滑り込ませてきた。「もう少し寄りかかったら、ニュージャージーの半分をシャットオフしてたぞ」と教えてくれたんだ。
確かに、彼はそのバカを哀れんでいるように聞こえるね。(ごめん)
現代のテレビリモコンは、この原則の真逆な気がする。ほとんどのボタンを押すと、現在のプログラムが中断されて、別のメニューに飛んだり、別のプログラムに切り替わったりすることが多い。リモコンを扱ったり音量を変えたりするのが、すごくストレスになるんだよね。
OMG、Apple TVのリモコンのデザインが本当に頭が悪いって感じだよね。何年も使ってるけど、毎日何度も間違ったボタンを押しちゃうし、暗いところではボタンがバックライトなしだから、意図しないボタンを押しちゃうことが多い。ユーザーインターフェースのデザイナーは、さらにひどいVision ProのUI/UXを作るために昇進したんじゃないかな。
サムスンはモリーガードの重要性を痛感したみたいだね。前面のダイヤルが人やペットによって誤作動して火災が起きたため、数百万の製品をリコールしたんだ。最近、アメリカの家庭でこの安全リスクを防ぐ簡単な解決策が考案されたってサムスンが言ってた。誤作動が心配な顧客は、サムスンが確認した無料のノブロックやカバーをリクエストできるんだ。これでストーブを誤ってオンにするのがかなり難しくなるって。会議中にCPSCが、2018年1月1日から2024年5月30日までの338件の事故データを共有して、特定の10社のストーブが火災に関与して31件の怪我と2件の死亡があったって言ってた。さらに、CPSCは「ノブがぶつかって誤ってオンになった2件の致命的な事故も記録しているが、メーカーは不明」とも言ってた。…企業はCPSCのデータが「問題を完全に理解するのに役立つ」とか「合理的で予見可能な状況に対処することを確実にする」と言ってたけど、障害者法に影響を与えないようにするためでもあるんだ。この記事を親戚に話したら、前面ダイヤルのせいである製品の購入をやめたって言ってた。その後、別の都市に住む親戚から、新生児のために家を買ったって聞いたんだけど、その時に追加で買ったのが前面ダイヤルのオーブン/ストーブ/レンジだったんだ。
それはすごいね。ヨーロッパでは、一般的に前面にダイヤルがあるだけなんだけど、内蔵の押し込み機能があったり、オフの状態から回すのにちょっと力が必要だったりするんだ。ほとんどの場合、温度とモードは別々のノブになっていて、両方回さないと作動しない。ここでは関連する怪我の話は聞いたことないな。
輝く赤いボタンに魅了されるのは小さな子供だけだと思ってる人がいたら、ちょっと考え直してほしい。私たちは潜在的な大学院生をコンピュータサイエンスのラボに案内していたんだけど、彼が重要なサーバーに歩み寄って、簡単にオフにしちゃったんだ。彼はその衝動をどう説明していいかわからなかったみたい。