落としたら戻せなかった話|自作ツールの取り消し設計

自作ツールで、下書きを1本だけ列から落としました。品質を上げるつもりでやった操作です。ところが直して積み直そうとしたら弾かれて、落ちたまま固定されました。取り消しが無かった。

厄介やったのは、どこにもバグが無かったことです。落とす側のガードも、積む側のガードも、どっちも設計どおりに正しく動いた。正しいもん同士を組み合わせた結果だけが、戻れん状態やった。

品質を上げるつもりが、列から消えた

順番待ちの列に仕事を積んでいく、そういう自作ツールがあります。作ったもんを並べておくと、時間が来たら勝手に片付いていく。

その列に並べてあった下書きの1本に、機械チェックが警告を出しました。使い古された言い回しが入っとる、と。

直せばええ話です。せやから一旦列から落として、書き直してから積み直すつもりでした。落とすのは通った。ここまでは想定どおり。

で、積み直そうとしたら弾かれました。同じもんは二度積めんという重複ガードです。列の側に「もう積んだ」という記録が残っとるので、二回目は受け付けてくれん。

落とした状態のまま、固定。

戻す操作もあるにはあります。ただそれは権限の都合で、自分からは叩けん設計でした。

どっちのガードも、単体では正しい

左に「落とす」右に「積む」の門、間に「戻れない」の警告アイコンを配した図解
正しいガードの隙間で、戻れなくなる

後から見返して厄介やったのは、犯人がおらんことでした。

落とす操作にガードが要るのは分かります。列から外すのは取り返しのつく話やないので、条件を確かめてからにする。

積む操作に重複ガードが要るのも分かります。これが無いと同じもんが二回出ていってまう。二重に出すのは一番やったらあかんやつです。

どっちも、単体では正しい。正しいガードを別々の場所に置いた結果、その隙間に「落ちたまま戻れん状態」が生まれとった

原因はたぶん、片方ずつ設計しとることやと思います。落とす側を作る時は落とす側のことだけ、積む側を作る時は積む側のことだけ考える。組み合わせを誰も見てへん

止まったおかげで、間違いが外に出んかった

ここからは、ちょっと間抜けな話です。

落ちたまま止まっとった下書きを、後日あらためて読み直しました。そしたら書いてある中身そのものが、事実と食い違っとるのが見つかった。別の機械チェックが後から拾いました。

つまりあの事故で列から外れてへんかったら、間違ったやつがそのまま外に出とったわけです。

助かった。ただこれは運が良かっただけで、設計が良かったわけやないです。ここを取り違えると「結果オーライやったし」で終わってまう。次も同じ場所で止まって、次は中身が正しい下書きが道連れになります。

落とす前に、戻る道があるか見る

これから気をつけるのはひとつ。落とす操作を叩く前に、積み直す側が通るかを先に確かめる

順番が逆やと、確かめる場所がもう無いんです。落としてからやと手元に残っとるのは「落ちた状態」だけ。そこから戻る道を探すことになります。

もうひとつ、考え方として置いとくことにしたのが取り消しは機能やなくて往復ということ。落とす機能と積む機能が別々にあっても、行って戻れんかったら取り消しになってへん。片道が2本あるだけです。

あわせて読みたい

同じく、自作ツールが黙って裏切る系の話です。終了コードが0なのに失敗|合格表示を疑う3つの型自作ツールのエラーを4日流した話|理由をつけて納得する癖