「やっておいて」の中身
——家事のコンピュータサイエンス #8:抽象化とインターフェース(第二稿)

シマダマキノトモエ

前回は冗長性——「お母さんしか知らない」を、どうやってもう一人の頭の外に出しておくか、という話をした。あれは、知識を二人で持つ話だった。今日は、その逆。持たせないほうの話をする。

同じ「洗濯やっておいて」の一言が、ある家では何も言わなくても回り、ある家では毎回もめる。中身を全部は伝えないのに通じる、というのは、よく考えると不思議なことなんです。これ、コンピュータで抽象化と呼ぶ仕組みと、ほとんど同じ話なんですよ。手順を隠して、結果だけを約束する。呼ぶ側は中身を知らなくていい。——でも、家庭では、これがしばしば失敗する。なぜ失敗するのか。「やっておいて」の中に、いったい何が入っているのか。今日は、その一言の中身をほどいてみたい。ことわっておくと、これは「夫がわかってない」話ではありません。頼む側と頼まれる側で、同じ言葉の指している中身が、ずれていた——という、配線の話です。どっちの配線が甘いかは、回によって、家事によって、入れ替わる。

抽象化とは何か——中を見せずに、結果を約束する

シマダ 言葉から入ります。コンピュータで抽象化というのは、ざっくり言うと、手順を隠して、結果だけを約束することです。たとえば「この文章を並べ替えて」という一個のまとまり——これを関数と呼びますが——を呼ぶとき、呼ぶ側は、中でどういう手順で並べ替えてるか、知らなくていい。「呼べば、並んで返ってくる」。それだけ知っていれば使える。中身は、箱の中に隠してある。

マキノ 中を開けなくても、使える。

シマダ そう。それが便利なんです。中の手順を全部知らなきゃ使えないんだったら、何一つ頼めない。中を隠すから、任せられる。——で、家でいうと、これが「洗濯やっておいて」なんですよ。私は、洗濯機をどう回すか、何分で何を入れるか、いちいち指示しない。「やっておいて」と投げる。中身は相手に任せて、結果だけ期待する。これ、まさに関数を呼んでいるんです。

マキノ なのに、うちはそれが、よくもめるんですよ。「やっておいてって言ったのに」って。

シマダ そこなんです。今日の問いは、なぜ家庭では「呼べば返ってくる」が成立しないのか。——逆に、マキノさんの現場では、成立してるんじゃないですか。「504号室お願いします」で、通じる。

マキノ 通じますね。「504、お願い」で、もう動けます。何号室がどのタイプの部屋か、清掃の手順が何工程あるか、全部、会社の標準が決まってるから。ベッドメイクは何を確認して、アメニティは何をいくつ補充して、最後に何をチェックするか——新人でも、それを一通り叩き込まれてから現場に出る。だから「504」の三文字に、その全部が、もう入ってるんです。私が一から説明しなくていい。

シマダ ——それ、抽象化が成立する条件を、きれいに言ってます。「504お願い」が三文字で通じるのは、その中身——清掃の標準手順——が、会社の共通言語として、先に共有されてるからなんです。仕様が、二人の外側に、ちゃんと置いてある。コンピュータでいえば、関数の取り決めが先に決まっていて、呼ぶ側も呼ばれる側も、それを知っている状態。家の「洗っておいて」が事故るのは、たぶん、その共通の取り決めのほうが、無いんですよ。

インターフェースと実装——「完了」の定義が、ずれる

シマダ もう一段、言葉を分けます。抽象化には、表と裏があって。表がインターフェース——何を頼むか・何が返ってくるか、という呼び出し方のほう。裏が実装——中で実際にどうやるか、という手順のほう。抽象化というのは、要するに、この二つを切り離すことなんです。表だけ見せて、裏は隠す。この表と裏は、あとで何度も出てきます。もめごとが表(結果の約束)の話なのか、裏(やり方)の話なのか——これを見分けるのが、今日の背骨です。

マキノ 頼み方と、やり方を、分ける。

シマダ そう。で、家でもめるのは、たいてい表のほうが、ちゃんと決まってないからなんですよ。「洗濯やっておいて」——この一言の仕様って、何ですか。回すまで? 干すまで? 畳むまで? しまうまで? どこまでやったら「完了」なのか。それが、暗黙のまま、決まってないんです。

マキノ ……それ、うちで、まさにあったやつです。

シマダ というと。

マキノ 私が「洗濯やっといて」って頼んで、出かけて、帰ってきたら、洗濯機の中で、洗い終わったのが、そのまま固まってたんですよ。回しただけ。干してない。で、私は「やってないじゃない」って言ったんです。そしたら夫が、「やったよ。回したよ」って。——あれ、いま思うと、二人とも、嘘はついてないんですよね。

シマダ ついてないです。完全に。夫さんの「完了」は、回した時点。マキノさんの「完了」は、干した時点。呼んだ側と、呼ばれた側で、「やっておいて」がどこまでを指すか——どこで関数が終わって、何が返ってくるか——の取り決めが、ずれてた。コンピュータでいうと、戻ってくるものが、期待と食い違ってた。これ、片方が悪いんじゃないんです。表のインターフェースが、最初から曖昧だっただけ。

マキノ ——でも、逆もあるんですよ。私のほうが、曖昧だったやつ。

シマダ というと。

マキノ 「ゴミ、お願い」って、私が、それだけ言って出かけたことがあって。夫は、玄関先まで出して、終わりにしたんです。新しい袋は掛けてない。私の中では、袋を掛けるまでが「ゴミお願い」だったんですけど、それ、言ってなかった。あとで「掛けといてよ」って言ったら、「どこまでとか、言わなかったじゃん」って。——あれは、夫が甘いんじゃなくて、私の頼み方が、粗すぎたんです。どこまでか、決めてなかったのは、私のほう。

シマダ ——そう。だから、曖昧な表は、どっちの側にも転ぶんです。洗濯は、頼まれた側の「完了」が手前で止まった例。ゴミは、頼んだ側の「指定」が粗かった例。どっちが配線を甘くしたかは、入れ替わる。悪いのは、いつも人じゃなくて、決まってない取り決めのほうなんですよ。

マキノ 言葉は、同じだったんですよ。「洗濯」も「ゴミ」も。なのに、指してるものが、二人で違った。

シマダ 同じ名前で呼んでるのに、中で約束してることが違う。これが、家の抽象化がいちばん事故るポイントです。名前は一個でも、その下にぶら下がってる仕様は、二人の頭の中で、別々だったりするんですよ。

事前条件と事後条件——頼む前に、半分やっている

シマダ 関数には、もう二つ、隠れた取り決めがあるんです。事前条件事後条件。事前条件は、呼ぶ前に、満たしておかなきゃいけない前提。事後条件は、呼んだら、こうなっていると保証される結果。たとえば「洗濯」という関数なら、事前条件は——洗剤が残ってる、洗濯ネットが用意してある、ポケットの中身が出してある。要するに、呼ぶ前に、そろっていてほしい「状態」のほうです。事後条件は——乾いて、畳まれている。

マキノ その、前のほう。洗剤があるとか、ネットがあるとか。あれ、誰かがやってるんですよね。頼む前に。

シマダ そこ、今日のいちばん面白いところで。事前条件を整えてから渡す家事は、実は、頼む側が、もう半分やってるんです。「洗濯やっておいて」と渡す前に、洗剤を切らさないように補充してあって、ネットが出してあって、ポケットが空にしてある——この下ごしらえが、全部、渡す側の手で、先に済んでる。だから、頼まれた側は「回して干す」だけで済む。

マキノ それ、たぶん「名もなき家事」って言われてるやつの、一部ですよね。誰も家事だと思ってない。

シマダ その一部は、まさに事前条件の整備なんだと思います。名前が付いてないから、やってないように見える。でも、それが無いと、関数は呼んでも失敗する。——一個、気をつけたいのがあって。たとえば「色物と白物を分ける」。あれ、事前条件かというと、家によるんですよ。渡す側が先に分けておくなら、事前条件。分けるところから任せるなら、それは中の実装——任せた手順の一部です。同じ「分ける」でも、置き場所で、表にも裏にもなる。だから、何を事前条件と呼ぶかは、その家がどこまで先に整えてから渡すか、で決まるんです。

マキノ うちは、ネットに入れるのだけは私が分けて、あとは任せる、です。じゃあ、ネットは事前条件で、白い黒いの仕分けは、実装のほう。

シマダ そういうことです。——あと一個、混ざりやすいので区別させてください。第1回でやったコンテキストを渡す話——「この子、今日ちょっと熱っぽい」みたいな状況を引き継ぐやつ——とは、別物です。あれは情報。こっちの事前条件は約束ごと・契約のほう。情報は「知らせる」もの、事前条件は「整えておく」もの。似てるけど、渡してるものが違うんです。

マキノ 情報と、約束。

シマダ ええ。で、これも、どっちが偉いという話じゃなくて——頼む側が事前条件を厚く整える家は、頼まれる側が楽。そのかわり、整える手間は渡す側に積もる。整えずに丸ごと渡す家は、渡す側が楽だけど、受けた側が一から全部やる。どっちにしても、手間の総量は、そんなに変わらないんですよ。どこに置くか、が違うだけで。

漏れる抽象化——いつもどおりが、通じない部屋

シマダ コンピュータの世界に、有名な経験則があって。スポルスキーという人が言った法則で、正確には「自明でない抽象化は、どれも、ある程度、漏れる」。——つまり、込み入った抽象化ほど、漏れるってことなんです。電気を点ける、みたいなごく単純なやつは、まず漏れない。でも、ちょっとでも込み入った仕組みは、中を隠して結果だけ約束していても、どこかで必ず、隠したはずの中身が、表に噴き出してくる。隠しきれない。

マキノ 中が、漏れる。複雑なやつほど。

シマダ 漏れるんです。洗濯でいうと——普段は「回しておいて」で済む。中身を知らなくていい。でも、洗濯機がエラーを吐いて、見たことのない記号が点滅しはじめたら、「回しておいて」じゃ、もう済まない。給水のホースがどうとか、フィルターがどうとか、隠してあった中身を、いきなり全部、知らされることになる。デリケート素材を間違えて縮ませた、ポケットにティッシュが入ってて全部が白い屑まみれになった——ああいう瞬間、抽象化の壁が破れて、詳細が一気に噴き出すんです。洗濯みたいに工程が多くて込み入った家事ほど、漏れる口が、あちこちにある。

マキノ ……それ、現場で、わかりますよ。「いつもどおりで」が、通じない部屋。

シマダ 通じない部屋。

マキノ ふつうの部屋は、「いつもどおりお願い」で回るんです。手順書のとおりにやれば、終わる。中身を、いちいち考えなくていい。——でも、たまに、手順書の外に出る部屋があって。前のお客さんが何かこぼして、絨毯にしみが残ってる特別清掃の部屋。忘れ物が、引き出しの奥から出てきた部屋。あと、ちょっと言いにくいですけど、汚損のひどい部屋。ああいうのは、「いつもどおり」が一個も使えない。一個ずつ、上に確認して、専用の道具を出して、人を呼んで。手順書の外側で、全部、組み直すんです。

シマダ ——それ、まさに抽象化が漏れた部屋です。普段は「504お願い」の三文字で隠れてた中身が、異常時には、全部、表に出てくる。標準手順という抽象の壁が、その部屋でだけ、破れてる。コンピュータでも、まったく同じで——平時は誰も中を見ないのに、障害が起きた途端、隠してあった配線を、全部たどらされる。「単純なものは漏れにくいが、込み入ったものは、どこかで必ず漏れる」って、こういうことなんですよ。

過小指定と過剰指定——任せるとは、やり方を渡すこと

シマダ 仕様の決め方には、両側に失敗があるんです。粗すぎても、細かすぎても、まずい。しかも、この二つの失敗は、さっきの表と裏に、きれいに対応してるんですよ。粗すぎるのを過小指定といいます。「洗濯やっておいて」だけだと、結果がぶれる。さっきの、干したか回しただけか、というやつ。これは表——結果の約束(インターフェース)が粗いから、事後条件がぶれる失敗です。逆に、細かすぎるのが過剰指定。「洗剤はこれを四十五ミリリットル、まず色物から、温度はこれで、干すときは間隔をこぶし一個あけて……」——これは裏——やり方(実装)にまで踏み込む失敗です。ここまで指定すると、もう、自分でやってるのと同じなんですよ。

マキノ 表が粗いと、結果がぶれる。裏に口を出すと、自分でやってるのと同じ。

シマダ そう、その対です。中の手順まで全部指定したら、関数を呼ぶ意味が無くなる。抽象化した意味が、消える。——で、ここに、うちの「畳み方が違う」問題が、ちょうど挟まってて。「畳み方が違う」って言うとき、それが結果の指定(表)——しまえる状態になってればいい——なのか、やり方の指定(裏)——うちはこの畳み方じゃなきゃ駄目——なのか。前者なら任せられる。後者だと、過剰指定なんですよ。中の手順に、口を出してる。

マキノ ……それ、私です。たぶん。夫が畳んだのを、後で畳み直してたんですよ、私。しまえてはいたのに。私の畳み方じゃなかったから。——さっきのゴミは、私が粗すぎた話。これは、私が細かすぎた話。両方、私なんですけどね。

シマダ でも、それ、悪いとは言えないんです。しまう場所の都合で、畳み方が決まってる家もある。問題は、結果(表)の話なのか、やり方(裏)の話なのかを、本人も区別してないこと。区別がつけば、「しまえればいい」のか「この畳み方じゃなきゃ困る理由がある」のか、決められる。——核心を言うと、任せるって、やり方の自由を、相手に渡すことなんですよ。中の実装を、相手に任せる。やり方まで全部こっちが握ったままだと、それは、任せてるんじゃなくて、手を貸してもらってるだけなんです。

マキノ ……やり方を、渡す。それ、新人を教えるときと、逆なんですよね。最初は、渡せないんですよ。

シマダ 逆、というと。

マキノ 新人が入ってきた最初の一ヶ月は、手順を、全部、指定するんです。ここをこう拭いて、次にここ、シーツの角はこう入れて。一個も省けない。横について、全部見てる。——でも、半年経つと、変わるんですよ。「504、お願い」だけになる。やり方は、もう言わない。本人に、任せる。同じ部屋を、同じ言葉で頼んでるのに、最初は全部指定して、半年後は三文字。何が変わったかっていうと、その人を、どれだけ信じられるようになったか、なんです。

シマダ ——マキノさん、それ、今日の話の一番奥を、先に言いました。仕様の粗さは、信頼の関数なんですよ。信頼が薄いうちは、細かく指定するしかない。過剰指定でも、しょうがない。信頼が積もるにつれて、指定を、だんだん粗くしていける。最後は三文字で渡せる。——抽象化って、最初から粗いんじゃないんです。信頼が育つにつれて、後から粗くなっていく。家の「やっておいて」が通じるようになるのも、たぶん、同じ道筋なんですね。最初から通じてたわけじゃなくて。

マキノ でも、それ、一回大きく失敗されると、また全部見るのに戻りますよ。新人でも、大きいミスをやらかすと、もう一回、横について、一からやり直すんです。

シマダ ——そう、そこなんです。関数って言ったからには、入れる値で、出てくる答えが変わる。信頼が積もれば粗くなるけど、信頼が下がれば、また細かくなる。一回粗く渡せてたのに、事故が続くと、また一個ずつ指定し直す所まで巻き戻る。信頼の関数は、上がるだけじゃなくて、下がりもする。粗さは、行ったきりじゃないんです。家でも、任せてた家事で派手に失敗されると、しばらく口を出すようになる。あれ、抽象化が、一段、細かい方へ戻ってるんですよ。

マキノ 戻る。せっかく、三文字で渡せてたのに。

シマダ 戻ります。——で、その「失敗したあと、どこまで巻き戻すか」が、ちょうど次回の話なんですけど。それは、また来週に。

家のAPIドキュメント——明文化する家と、しない家

シマダ コンピュータの世界には、APIというものがあって。乱暴にいうと、「こう呼べば、こう返ってくる」という取り決めの一覧です。で、ちゃんとした取り決めには、説明書が付いてる。これを呼ぶと何が起きて、何を前もって用意しておく必要があって、どういう結果が返るか。——家にも、これ、あるんですよ。家族にしか通じない、呼び出しの取り決めが。

マキノ 家族にしか通じない。

シマダ たとえば、うちで「ゴミ、お願い」って言うと——集めて、縛って、出して、新しい袋を掛けるところまで、ですか。それとも、出すだけ? この一言の中身は、家ごとに、全然違う。さっきマキノさんが、ゴミで一回もめた、って言ってましたよね。マキノさんの家の「ゴミお願い」は、いまは、どこまで入ってます。

マキノ いまは、袋を掛けるところまで、です。集めて、縛って、出して、新しいの掛ける。それで一個。途中で止めたら「やってない」になる。——最初は、それが揃ってなかったから、もめたんですけどね。

シマダ それが、いまのマキノ家の「ゴミお願い」の仕様書なんです。よそから来た人には通じない。けど、家族の中では、その四工程で、ちゃんと一個に固まってる。——これが面白いのは、その仕様を、どうやって揃えたか、なんですよ。同棲とか、結婚とか、誰かと暮らしはじめた最初のころって、これがいちいち食い違う。「ゴミお願いって言ったのに、袋掛けてない」って。あの最初の時期、あれは、コンピュータでいう統合テスト——二つの系をつないで、噛み合わない所を一個ずつ洗い出す期間——なんです。

マキノ すり合わせの時期、ありましたね。最初の一、二年。

シマダ で、その仕様の揃え方に、二通りあって。一つは、明文化する。冷蔵庫に、ゴミの日と手順を貼る。前回やった「紙一枚」と、近いやつです。もう一つは、明文化しないまま、いつのまにか通じるようになる。何年か一緒にやってるうちに、言わなくても、お互いの「お願い」の中身が揃ってくる。——どっちが上、というのは無いと思うんです。貼る家は、貼ったほうが回る。貼らない家は、貼らないまま揃う。明文化しない自由も、ちゃんとあって。ただ、揃ってさえいれば、紙でも、暗黙でも、どっちでもいいんですよ。

シマダ ——いや、もう一個だけ、言わせてください。さっきの「すり合わせてきた仕様書」って言い方、私、ちょっと疑ってるんです。仕様書、っていうと、二人で対等に書いて、合意した、みたいに聞こえる。でも実際は、どっちかが折れて、どっちかの「完了」のほうに、寄せてきただけかもしれない。揃った、というより、片方が合わせた。——理屈は、ここまでで、もう言い終わりです。次は、実際どうだったか、をマキノさんに聞きたい。

「やっておいて」の中身

シマダ マキノさん、二十二年やってきて。夫さんに「やっておいて」で、ほんとうに通じるやつって、いくつくらいあるんですか。

マキノ ……数えたこと、ないですけど。たぶん、五つか六つですよ。

マキノ 「ゴミお願い」。「お風呂、洗っといて」。「下の子、お風呂入れといて」。「車、ガソリン入れといて」。それくらい。それは、もう、中身を一個も言わなくて通じる。どこまでやるか、二人で同じ。——でも、それ以外は、いまだに、いちいち言うんですよ。二十二年やっても。洗濯は、いまだに、どこまでか言わないと、ずれる。だから、全部が通じるようになったわけじゃ、ないんです。通じるのを、一個ずつ、増やしてきただけ。

マキノ 仕様書、っていうほど、立派なもんじゃないですよ。二人で書いた覚えも、ないし。たぶん、ぶつかって、私が折れたのも、夫が折れたのも、両方あって。どっちが何回折れたかなんて、もう覚えてないです。——ただ、二十二年かけて、五つか六つだけ、言わなくて済むようになった。それだけのことなんです。残りは、いまも、口で言ってます。

マキノ それで、いいんだと思いますよ。全部が三文字で通じる家じゃなくて。通じるのが、五つか六つ、ある家。それで、回ってるんで。

次回予告

第9回はエラー処理とリトライ——失敗した家事を、どう扱うか、という話を取り上げる。やり直せば直る失敗と、やり直しても直らない失敗。そして、起きたことを無かったことにする家——例外を握りつぶすと、どうなるか。今日は、信頼が積もるにつれて「やっておいて」が粗く渡せるようになる、という話をした。次回は、その逆——一回の失敗が、せっかく育てた抽象化を、どこまで細かい方へ巻き戻すか、という話だ。

#9 やり直せる失敗、やり直せない失敗——エラー処理とリトライ(近日公開)

このシリーズについて

#1 コンテキストは流しに溜まる#2 一軍は、コンロの脇に#3 洗濯物は、列に並ばない#4 十二時は、動かせない(ゲスト: イノウエミドリ)/#5 台所に、二人は立てるか#6 捨てるのは、誰の仕事か#7 お母さんしか、知らない

「家事のコンピュータサイエンス」は、シマダ(AI使用法研究者)とマキノトモエ(ホテル客室清掃員22年)の対談シリーズです。コンピュータサイエンスの基本概念を一つずつ取り上げ、掃除・洗濯・炊事・買い物・名もなき家事に当ててみる。効率だけでなく、快適さ・分担・諦めも等価に扱います。生成エッセイの現在地に戻る。

← 第一稿
レビュー
← 目次

このページの記事はAI(ChatGPT)を用いて作成・編集されています。ソノダマリのレビューを経て書き直した第二稿です。