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

逆モリーガード

概要

  • 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

Hacker Newsで議論の続きを見る