前回は冗長性——「お母さんしか知らない」を、どうやってもう一人の頭の外に出しておくか、という話をした。あれは、知識を二人で持つ話だった。今日は、その逆。持たせないほうの話をする。
同じ「洗濯やっておいて」の一言が、ある家では何も言わなくても回り、ある家では毎回もめる。中身を全部は伝えないのに通じる、というのは、よく考えると不思議なことなんです。これ、コンピュータで抽象化と呼ぶ仕組みと、ほとんど同じ話なんですよ。手順を隠して、結果だけを約束する。呼ぶ側は中身を知らなくていい。——でも、家庭では、これがしばしば失敗する。なぜ失敗するのか。「やっておいて」の中に、いったい何が入っているのか。今日は、その一言の中身をほどいてみたい。ことわっておくと、これは「夫がわかってない」話ではありません。頼む側と頼まれる側で、同じ言葉の指している中身が、ずれていた——という、配線の話です。
シマダ 言葉から入ります。コンピュータで抽象化というのは、ざっくり言うと、手順を隠して、結果だけを約束することです。たとえば「この文章を並べ替えて」という一個のまとまり——これを関数と呼びますが——を呼ぶとき、呼ぶ側は、中でどういう手順で並べ替えてるか、知らなくていい。「呼べば、並んで返ってくる」。それだけ知っていれば使える。中身は、箱の中に隠してある。
マキノ 中を開けなくても、使える。
シマダ そう。それが便利なんです。中の手順を全部知らなきゃ使えないんだったら、何一つ頼めない。中を隠すから、任せられる。——で、家でいうと、これが「洗濯やっておいて」なんですよ。私は、洗濯機をどう回すか、何分で何を入れるか、いちいち指示しない。「やっておいて」と投げる。中身は相手に任せて、結果だけ期待する。これ、まさに関数を呼んでいるんです。
マキノ なのに、うちはそれが、よくもめるんですよ。「やっておいてって言ったのに」って。
シマダ そこなんです。今日の問いは、なぜ家庭では「呼べば返ってくる」が成立しないのか。——逆に、マキノさんの現場では、成立してるんじゃないですか。「504号室お願いします」で、通じる。
マキノ 通じますね。「504、お願い」で、もう動けます。何号室がどのタイプの部屋か、清掃の手順が何工程あるか、全部、会社の標準が決まってるから。ベッドメイクは何を確認して、アメニティは何をいくつ補充して、最後に何をチェックするか——新人でも、それを一通り叩き込まれてから現場に出る。だから「504」の三文字に、その全部が、もう入ってるんです。私が一から説明しなくていい。
シマダ ——それ、抽象化が成立する条件を、きれいに言ってます。「504お願い」が三文字で通じるのは、その中身——清掃の標準手順——が、会社の共通言語として、先に共有されてるからなんです。仕様が、二人の外側に、ちゃんと置いてある。コンピュータでいえば、関数の取り決めが先に決まっていて、呼ぶ側も呼ばれる側も、それを知っている状態。家の「洗っておいて」が事故るのは、たぶん、その共通の取り決めのほうが、無いんですよ。
シマダ もう一段、言葉を分けます。抽象化には、表と裏があって。表がインターフェース——何を頼むか・何が返ってくるか、という呼び出し方のほう。裏が実装——中で実際にどうやるか、という手順のほう。抽象化というのは、要するに、この二つを切り離すことなんです。表だけ見せて、裏は隠す。
マキノ 頼み方と、やり方を、分ける。
シマダ そう。で、家でもめるのは、たいてい表のほうが、ちゃんと決まってないからなんですよ。「洗濯やっておいて」——この一言の仕様って、何ですか。回すまで? 干すまで? 畳むまで? しまうまで? どこまでやったら「完了」なのか。それが、暗黙のまま、決まってないんです。
マキノ ……それ、うちで、まさにあったやつです。
シマダ というと。
マキノ 私が「洗濯やっといて」って頼んで、出かけて、帰ってきたら、洗濯機の中で、洗い終わったのが、そのまま固まってたんですよ。回しただけ。干してない。で、私は「やってないじゃない」って言ったんです。そしたら夫が、「やったよ。回したよ」って。——あれ、いま思うと、二人とも、嘘はついてないんですよね。
シマダ ついてないです。完全に。夫さんの「完了」は、回した時点。マキノさんの「完了」は、干した時点。呼んだ側と、呼ばれた側で、「やっておいて」がどこまでを指すか——どこで関数が終わって、何が返ってくるか——の取り決めが、ずれてた。コンピュータでいうと、戻ってくるものが、期待と食い違ってた。これ、片方が悪いんじゃないんです。表のインターフェースが、最初から曖昧だっただけ。
マキノ 言葉は、同じだったんですよ。「洗濯」って。なのに、指してるものが、二人で違った。
シマダ 同じ名前で呼んでるのに、中で約束してることが違う。これが、家の抽象化がいちばん事故るポイントです。名前は一個でも、その下にぶら下がってる仕様は、二人の頭の中で、別々だったりするんですよ。
シマダ 関数には、もう二つ、隠れた取り決めがあるんです。事前条件と事後条件。事前条件は、呼ぶ前に、満たしておかなきゃいけない前提。事後条件は、呼んだら、こうなっていると保証される結果。たとえば「洗濯」という関数なら、事前条件は——洗剤が残ってる、色物と白物が分けてある、ポケットの中身が出してある。事後条件は——乾いて、畳まれている。
マキノ その、前のほう。洗剤があるとか、分けてあるとか。あれ、誰かがやってるんですよね。頼む前に。
シマダ そこ、今日のいちばん面白いところで。事前条件を整えてから渡す家事は、実は、頼む側が、もう半分やってるんです。「洗濯やっておいて」と渡す前に、洗剤を切らさないように補充してあって、ネットに入れるデリケートな物が分けてあって、ポケットが空にしてある——この下ごしらえが、全部、渡す側の手で、先に済んでる。だから、頼まれた側は「回して干す」だけで済む。
マキノ それ、たぶん「名もなき家事」って言われてるやつの、一部ですよね。誰も家事だと思ってない。
シマダ その一部は、まさに事前条件の整備なんだと思います。名前が付いてないから、やってないように見える。でも、それが無いと、関数は呼んでも失敗する。——一個だけ、混ざりやすいので区別させてください。第1回でやったコンテキストを渡す話——「この子、今日ちょっと熱っぽい」みたいな状況を引き継ぐやつ——とは、別物です。あれは情報。こっちの事前条件は約束ごと・契約のほう。情報は「知らせる」もの、事前条件は「整えておく」もの。似てるけど、渡してるものが違うんです。
マキノ 情報と、約束。
シマダ ええ。で、これも、どっちが偉いという話じゃなくて——頼む側が事前条件を厚く整える家は、頼まれる側が楽。そのかわり、整える手間は渡す側に積もる。整えずに丸ごと渡す家は、渡す側が楽だけど、受けた側が一から全部やる。どっちにしても、手間の総量は、そんなに変わらないんですよ。どこに置くか、が違うだけで。
シマダ コンピュータの世界に、有名な経験則があって。「全ての抽象化は、漏れる」。スポルスキーという人が言った法則です。中を隠して、結果だけ約束する——普段はそれで回る。でも、異常が起きた瞬間、隠したはずの中身が、噴き出してくる。隠しきれない。
マキノ 中が、漏れる。
シマダ 漏れるんです。洗濯でいうと——普段は「回しておいて」で済む。中身を知らなくていい。でも、洗濯機がエラーを吐いて、見たことのない記号が点滅しはじめたら、「回しておいて」じゃ、もう済まない。給水のホースがどうとか、フィルターがどうとか、隠してあった中身を、いきなり全部、知らされることになる。デリケート素材を間違えて縮ませた、ポケットにティッシュが入ってて全部が白い屑まみれになった——ああいう瞬間、抽象化の壁が破れて、詳細が一気に噴き出すんです。
マキノ ……それ、現場で、わかりますよ。「いつもどおりで」が、通じない部屋。
シマダ 通じない部屋。
マキノ ふつうの部屋は、「いつもどおりお願い」で回るんです。手順書のとおりにやれば、終わる。中身を、いちいち考えなくていい。——でも、たまに、手順書の外に出る部屋があって。前のお客さんが何かこぼして、絨毯にしみが残ってる特別清掃の部屋。忘れ物が、引き出しの奥から出てきた部屋。あと、ちょっと言いにくいですけど、汚損のひどい部屋。ああいうのは、「いつもどおり」が一個も使えない。一個ずつ、上に確認して、専用の道具を出して、人を呼んで。手順書の外側で、全部、組み直すんです。
シマダ ——それ、まさに抽象化が漏れた部屋です。普段は「504お願い」の三文字で隠れてた中身が、異常時には、全部、表に出てくる。標準手順という抽象の壁が、その部屋でだけ、破れてる。コンピュータでも、まったく同じで——平時は誰も中を見ないのに、障害が起きた途端、隠してあった配線を、全部たどらされる。「全部は隠しきれない」って、こういうことなんですよ。
シマダ 仕様の決め方には、両側に失敗があるんです。粗すぎても、細かすぎても、まずい。粗すぎるのを過小指定といいます。「洗濯やっておいて」だけだと、結果がぶれる。さっきの、干したか回しただけか、というやつ。逆に、細かすぎるのが過剰指定。「洗剤はこれを四十五ミリリットル、まず色物から、温度はこれで、干すときは間隔をこぶし一個あけて……」——ここまで指定すると、もう、自分でやってるのと同じなんですよ。
マキノ 全部言うなら、自分でやればいい、って話になりますね。
シマダ なるんです。中の手順まで全部指定したら、抽象化した意味が、消える。関数を呼ぶ意味が無くなる。——で、ここに、うちの「畳み方が違う」問題が、ちょうど挟まってて。「畳み方が違う」って言うとき、それが結果の指定——しまえる状態になってればいい——なのか、やり方の指定——うちはこの畳み方じゃなきゃ駄目——なのか。前者なら任せられる。後者だと、過剰指定なんですよ。中の手順に、口を出してる。
マキノ ……それ、私です。たぶん。夫が畳んだのを、後で畳み直してたんですよ、私。しまえてはいたのに。私の畳み方じゃなかったから。
シマダ でも、それ、悪いとは言えないんです。しまう場所の都合で、畳み方が決まってる家もある。問題は、結果の話なのか、やり方の話なのかを、本人も区別してないこと。区別がつけば、「しまえればいい」のか「この畳み方じゃなきゃ困る理由がある」のか、決められる。——核心を言うと、任せるって、やり方の自由を、相手に渡すことなんですよ。中の実装を、相手に任せる。やり方まで全部こっちが握ったままだと、それは、任せてるんじゃなくて、手を貸してもらってるだけなんです。
マキノ ……やり方を、渡す。それ、新人を教えるときと、逆なんですよね。最初は、渡せないんですよ。
シマダ 逆、というと。
マキノ 新人が入ってきた最初の一ヶ月は、手順を、全部、指定するんです。ここをこう拭いて、次にここ、シーツの角はこう入れて。一個も省けない。横について、全部見てる。——でも、半年経つと、変わるんですよ。「504、お願い」だけになる。やり方は、もう言わない。本人に、任せる。同じ部屋を、同じ言葉で頼んでるのに、最初は全部指定して、半年後は三文字。何が変わったかっていうと、その人を、どれだけ信じられるようになったか、なんです。
シマダ ——マキノさん、それ、今日の話の一番奥を、先に言いました。仕様の粗さは、信頼の関数なんですよ。信頼が薄いうちは、細かく指定するしかない。過剰指定でも、しょうがない。信頼が積もるにつれて、指定を、だんだん粗くしていける。最後は三文字で渡せる。——抽象化って、最初から粗いんじゃないんです。信頼が育つにつれて、後から粗くなっていく。家の「やっておいて」が通じるようになるのも、たぶん、同じ道筋なんですね。最初から通じてたわけじゃなくて。
シマダ コンピュータの世界には、APIというものがあって。乱暴にいうと、「こう呼べば、こう返ってくる」という取り決めの一覧です。で、ちゃんとした取り決めには、説明書が付いてる。これを呼ぶと何が起きて、何を前もって用意しておく必要があって、どういう結果が返るか。——家にも、これ、あるんですよ。家族にしか通じない、呼び出しの取り決めが。
マキノ 家族にしか通じない。
シマダ たとえば、うちで「ゴミ、お願い」って言うと——集めて、縛って、出して、新しい袋を掛けるところまで、ですか。それとも、出すだけ? この一言の中身は、家ごとに、全然違う。マキノさんの家の「ゴミお願い」は、どこまで入ってます。
マキノ うちは、袋を掛けるところまで、です。集めて、縛って、出して、新しいの掛ける。それで一個。途中で止めたら「やってない」になる。
シマダ それが、マキノ家の「ゴミお願い」の仕様書なんです。よそから来た人には通じない。けど、家族の中では、その四工程で、ちゃんと一個に固まってる。——これが面白いのは、その仕様を、どうやって揃えたか、なんですよ。同棲とか、結婚とか、誰かと暮らしはじめた最初のころって、これがいちいち食い違う。「ゴミお願いって言ったのに、袋掛けてない」って。あの最初の時期、あれは、コンピュータでいう統合テスト——二つの系をつないで、噛み合わない所を一個ずつ洗い出す期間——なんです。
マキノ すり合わせの時期、ありましたね。最初の一、二年。
シマダ で、その仕様の揃え方に、二通りあって。一つは、明文化する。冷蔵庫に、ゴミの日と手順を貼る。前回やった「紙一枚」と、近いやつです。もう一つは、明文化しないまま、いつのまにか通じるようになる。何年か一緒にやってるうちに、言わなくても、お互いの「お願い」の中身が揃ってくる。——どっちが上、というのは無いと思うんです。貼る家は、貼ったほうが回る。貼らない家は、貼らないまま揃う。明文化しない自由も、ちゃんとあって。ただ、揃ってさえいれば、紙でも、暗黙でも、どっちでもいいんですよ。
シマダ 今日の話を、まとめにかかります。「やっておいて」の中身は何か。——たぶん、こうなんです。あの一言は、頼む側と頼まれる側が、長い時間をかけて、すり合わせてきた仕様書なんですよ。完了の定義、事前条件、どこまでやるか。最初は通じなくて、統合テストを繰り返して、信頼が積もるにつれて、だんだん粗く渡せるようになって——
シマダ ……いや。すみません、いま言いながら、また疑ってます。「すり合わせてきた仕様書」って、きれいにまとめすぎですね。仕様書、っていうと、二人で対等に書いて、合意した、みたいに聞こえる。でも実際は、どっちかが折れて、どっちかの「完了」のほうに、寄せてきただけかもしれない。揃った、というより、片方が合わせた。——マキノさん、これ、実際は、どうなんですか。二十二年やってきて。
マキノ ……数えたこと、ないですけど。夫に「やっておいて」で、ほんとうに通じるやつって、たぶん、五つか六つですよ。
シマダ 五つか六つ。
マキノ 「ゴミお願い」。「お風呂、洗っといて」。「下の子、お風呂入れといて」。「車、ガソリン入れといて」。それくらい。それは、もう、中身を一個も言わなくて通じる。どこまでやるか、二人で同じ。——でも、それ以外は、いまだに、いちいち言うんですよ。二十二年やっても。洗濯は、いまだに、どこまでか言わないと、ずれる。だから、全部が通じるようになったわけじゃ、ないんです。通じるのを、一個ずつ、増やしてきただけ。
マキノ 仕様書、っていうほど、立派なもんじゃないですよ。二人で書いた覚えも、ないし。たぶん、ぶつかって、私が折れたのも、夫が折れたのも、両方あって。どっちが何回折れたかなんて、もう覚えてないです。——ただ、二十二年かけて、五つか六つだけ、言わなくて済むようになった。それだけのことなんです。残りは、いまも、口で言ってます。それで、いいんだと思いますよ。全部が三文字で通じる家じゃなくて。通じるのが、五つか六つ、ある家。それで、回ってるんで。
第9回はエラー処理とリトライ——失敗した家事を、どう扱うか、という話を取り上げる。やり直せば直る失敗と、やり直しても直らない失敗。そして、起きたことを無かったことにする家——例外を握りつぶすと、どうなるか。今日は、うまくいく前提で「やっておいて」を渡す話をした。次回は、それが失敗したあとの話だ。
#9 やり直せる失敗、やり直せない失敗——エラー処理とリトライ(近日公開)
#1 コンテキストは流しに溜まる/#2 一軍は、コンロの脇に/#3 洗濯物は、列に並ばない/#4 十二時は、動かせない(ゲスト: イノウエミドリ)/#5 台所に、二人は立てるか/#6 捨てるのは、誰の仕事か/#7 お母さんしか、知らない
「家事のコンピュータサイエンス」は、シマダ(AI使用法研究者)とマキノトモエ(ホテル客室清掃員22年)の対談シリーズです。コンピュータサイエンスの基本概念を一つずつ取り上げ、掃除・洗濯・炊事・買い物・名もなき家事に当ててみる。効率だけでなく、快適さ・分担・諦めも等価に扱います。生成エッセイの現在地に戻る。