前回は並行処理——二人が同じ台所に立つと、なぜぶつかるか、という話をした。まな板は一枚、シンクは一つ。同じものを同時には使えないから、肩がぶつかる。あれは「同時に作る」側の話だった。今回は、その反対側。捨てるほうの話をする。
気づいてしまったことがある。プログラムには、使わなくなったものを自動で片づける仕組みがある。書いた本人が「これはもう捨てる」と書かなくていい。別の係が勝手に回って、誰も使っていないものを回収していく。ガベージコレクションという。——では、家には、なぜそれが無いのか。買う人はいる。持ち込む人もいる。なのに、回収する係は、家のどこにも自動では走っていない。「捨てるのは、誰の仕事か」が、ずっと宙に浮いたまま、物だけが増えていく。今日はそこを、ほどいてみたい。先に断っておくと、これは置き場所の話(あれは第2回)でも、順番の話(第3回)でもない。もう要らなくなったものを、いつ、誰が、どう手放すか。それだけの話です。
シマダ まず、プログラムの中で何が起きているか。プログラムは、動いている間じゅう、ものを作り続けます。コンピュータの言葉ではオブジェクトといいますが、要するに「データの入った箱」だと思ってください。計算のたびに箱を作る。作りっぱなしです。で、ここが昔の悩みだった——作った本人が、使い終わった箱を一つひとつ「これはもう捨てる」と書いて回らないといけなかった。書き忘れると、要らない箱が居座り続ける。
マキノ 書き忘れる、っていうのが、よくわからないんですけど。捨てるのを忘れる、ってことですか。
シマダ そうです。買い物に例えると——スーパーで何か買うたびに、家のどこかに古いものが一個増える。で、自分で「この古いのは捨てる」と毎回宣言しないと、永遠に残る。一回でも言い忘れたら、それは死ぬまで家にある。人間、必ず忘れます。だから、ある時代に発明があったんです。作る本人は、捨てるを書かなくていい。代わりに、別の係が部屋を回って、もう誰も使っていない箱を見つけて、勝手に回収する。これがガベージコレクション——直訳すれば、ごみ集めです。
マキノ へえ。じゃあ、その係が、家でいう……お母さんですよね。
シマダ (笑)。そこなんですよ。家には、作る係——買う人、もらってくる人、持ち込む人——はいるのに、その「勝手に回って回収する係」が、自動では走っていない。プログラムは仕組みとして持っているものを、家は持っていない。だから物が、増える一方になる。今日の問いは、ずっとこれです。捨てるのは、誰の仕事か。
シマダ 回収する係は、何を見て「これは捨てていい」と判断するか。基準は一つだけです。誰かに参照されているか。参照、というのは——その箱を指している矢印が、まだどこかから出ているか、ということ。どこからも矢印が来ていない箱は、もう誰も使えない。使えないものは、捨てていい。逆に、一本でも矢印が来ていれば、残す。
マキノ 矢印……。家でいうと、何になるんですか。
シマダ 「これ、使ってる?」と聞かれて「使ってる」と言える状態、です。台所の包丁は、毎日手が伸びる。矢印が来ている。一方、いただきものの製麺機が戸棚の奥にある。あれ、誰の手も伸びていない。矢印が、もう来ていない。——なんですが、家でこの判定をやろうとすると、途端に難しくなる。「いつか使うかも」というのが、参照なのか、参照じゃないのか。
マキノ ああ……。「いつか」って、ほぼ来ないやつですよね。
シマダ 来ない、と言い切れないから残る。しかも家には、二種類の矢印が混ざっているんです。一つは、手が伸びる矢印——実際に使う。もう一つは、気持ちの矢印——子どもの最初の靴とか、もう履けないけど捨てられない。後者は、機能としては誰も参照していないのに、別の線でつながっている。プログラムの参照は、この二つを区別しません。指されてるか、いないか、だけ。家は、ここがぐちゃぐちゃなんです。
マキノ うちの現場は、そこ、はっきりしてますよ。ホテルの客室には、「いつか」が存在しないんです。
シマダ ——というと。
マキノ お客さんがチェックアウトした瞬間に、その部屋の中のものは、全部、参照が切れるんです。さっきまで「使ってる」だったコップも、タオルも、リモコンも、お客さんが出た瞬間、ぜんぶ「もう誰のものでもない」に変わる。私が入って、使用済みは全部回収して、新しいのに替える。「いつか戻ってくるかも」で残すもの、一個もないんですよ。チェックアウトという瞬間が、一気に矢印を全部切る。
シマダ ……それ、すごいことを言ってます。家の物が捨てられないのは、参照がいつ切れたのか、誰も宣言してくれないからなんです。だらだら使われなくなって、いつのまにか使われていない。切れた瞬間が無い。ホテルには、その瞬間が制度として埋め込んである。チェックアウトが、参照を一斉に切る合図になっている。家に、その合図が無いんですよ。
マキノ あ、でも一個だけ、ホテルにも「いつか」に近いものがあります。忘れ物。
シマダ 忘れ物。
マキノ お客さんが置いていったもの。あれは、参照が切れた物なんだけど、すぐには捨てないんです。遺失物の棚に上げて、決まった日数——うちは三か月——取りに来なかったら、はじめて処分する。すぐ捨てない。でも、永遠には置かない。
シマダ ——マキノさん、いまの、ぼくがこのあと言おうとしてた概念を、先に言いました。プログラムのごみ集めも、まったく同じことをやるんです。「もう誰も参照していない」と判定しても、回収には猶予を置く設計がある。すぐ消さない。一定の保持期間を持たせて、その間に誰も触らなければ、はじめて回収する。マキノさんの遺失物の三か月は、それの、生身の実装なんですよ。捨てる判定と、捨てる実行の間に、時間を一枚かませる。家にこれがあったら、ずいぶん楽なはずなんです。
シマダ ごみ集めには、賢い経験則があるんです。新しく作られたものほど、すぐ死ぬ。長く生き延びたものは、さらに長く生きる。これ、観察から出てきた法則で、ほとんどの箱は、作られてすぐ要らなくなる。逆に、しばらく残ったものは、たいてい、そのままずっと残る。
マキノ ……それ、家もそうですね。
シマダ そうなんです。だから賢いごみ集めは、全部を平等に見ない。新しく作られたものが集まる場所だけを、しょっちゅう見て回る。古くまで生き残ったものが沈んでいる場所は、めったに見ない。これを世代別GC——世代で分けて回収する、といいます。若い場所は頻繁に、古い場所は稀に。
マキノ それ、うちでいうと、玄関と卓上ですよ。郵便受けに入ってくるダイレクトメール、あれ、数日で死ぬ。卓上に置いたチラシも、すぐ要らなくなる。私、玄関と食卓だけは、ほぼ毎日見て、要らないのを抜いてます。
シマダ それが若い世代の回収です。生まれてすぐ死ぬものが集まる場所。
マキノ で、押し入れの奥は……何年も見てない。下の子のベビーカーとか、結婚式の引き出物の食器とか。生き残っちゃったものが、奥に沈んでる。
シマダ 古い世代です。長く生き延びたものは、さらに生き延びる。だから滅多に見ない。——いまマキノさん、ご自分で家を世代別に読み直しましたよね。家事をしている人は、これを言葉にせずに、もうやっているんです。毎日見る場所と、何年も見ない場所を、無意識に分けている。家の掃除は、自然と世代別GCになっている。
マキノ 言われると、そうだ。毎日ぜんぶの引き出しを開けてたら、身が持たないですもん。
シマダ ただ、古い世代を回収するときは、代償があります。押し入れを全部出して見直す——年末の大掃除ですね。あれをやっている間は、家事の他のことが、ほぼ全部止まる。プログラムでも同じで、古い世代までまるごと回収する作業を走らせると、その間、本来の仕事が一瞬、全部止まるんです。これをストップ・ザ・ワールド——世界が止まる、と呼びます。
マキノ 大掃除の日って、まさにそれですね。その日は、ご飯も適当だし、洗濯も後回し。家じゅうが、片づけだけになる。
シマダ 世界が止まる。だから大掃除は、頻繁にはやれない。若い世代——玄関と卓上——は止まらずに毎日回せるけど、押し入れの全回収は、止まる時間が長いから、年に一回か二回しか走らせられない。プログラムが世代を分けるのも、まさにこの「止める時間」をなるべく短くしたいからなんです。
シマダ ここまでは、一人で判定できる前提で話してきました。でも、家は何人かで共有している。すると、「誰からも参照されていない」の判定が、急に難しくなる。自分にとってはごみでも、別の誰かにとっては、参照の生きた宝物かもしれない。
マキノ ……これ、うちで事件ありましたよ。
シマダ 聞かせてください。
マキノ 下の子の机の上に、小さいフィギュアが何個か転がってて。何か月も動いてないし、ほこりかぶってたから、私、てっきりもう遊んでないと思って、ガチャの箱にまとめて入れちゃったんです。そしたら、その晩、大泣き。「あれは並べてあったのに」って。私には、ただ放置されたごみに見えた。あの子には、毎日見てる、並びの決まった大事なものだった。手は伸びてなかったけど、目の参照が、生きてたんです。
シマダ それです。まさに、それなんです。一人が「参照は切れた」と判断して回収したものが、別の人にとっては生きていた。プログラムでこれをやると、まだ使われている箱を消してしまう、いちばん危ない事故になる。動いているものを、消す。家だと、それが「大泣き」という形で返ってくる。
マキノ じゃあ、どうすればよかったんですか。勝手に判断したのが悪いのはわかるけど、いちいち全部「これ捨てていい?」って聞いてたら、片づけ進まないですよ。
シマダ その「いちいち聞く」のコストが、まさに問題の核心です。プログラムのごみ集めにも、回収する前に「これは生きているか」を一つひとつ確かめる工程があって、マーク——印をつけて回る、といいます。生きている箱に印をつけて、印のないものだけ回収する。この、印をつけて回る作業自体が、コストなんです。確認には、必ず手間がかかる。マキノさんが全部「捨てていい?」と聞くのは、全件にマークを打って回るのと同じで、それはそれで重い。
マキノ じゃあ、現実的には。
シマダ うちの——いや、よそのお宅で聞いた話で、うまいなと思ったのが、保留ボックスです。捨てるか迷うもの、勝手に捨てると事故りそうなものを、一旦そこに入れる。すぐには家から出さない。で、一定期間——一か月なら一か月——誰もそこから取り出さなかったら、はじめて本当に処分する。誰かが「あ、それ要る」と取り出したら、戻る。
マキノ あ、それ、さっきの遺失物の三か月と、同じやつだ。
シマダ 完全に同じ構造です。猶予を一枚かませて、その間に参照が来なければ回収。マークの確認を「全件、口で聞く」んじゃなくて、「箱に入れて、時間に判定させる」。フィギュア事件は、保留ボックスがあれば、たぶん起きなかった。机から消えても、家からは消えてない。あの子が「あれは?」と言った時点で、まだ取り戻せた。
シマダ 捨てる係が走らないと、何が起きるか。参照は切れているのに、回収されない物が、居座り続ける。プログラムでこれが起きると、メモリリークといいます。漏れ、です。使い終わったはずの箱が、捨てられずに溜まり続けて、置き場所——コンピュータの言葉ではヒープ、物を積んでおく領域です——を、じわじわ食い潰していく。
マキノ 床面積、ですよね、家でいうと。
シマダ まさに。家のメモリリークは、床と棚を食っていく物たちです。第2回で、冷蔵庫の奥の、いつ開封したかわからない瓶の話をしましたよね。あれ、賞味期限という意味では参照が切れているのに、回収されずに残っている。立派なリークです。あとは——
マキノ ケーブルの箱。あれ、うちにもあります。何のケーブルかもうわからないのに、捨てると後で要る気がして、箱ごと残ってる。あと、紙袋。紙袋の中に、紙袋が入ってる。
シマダ (笑)紙袋の中の紙袋。それ、すごくいい例です。一個も使っていないのに、減らない。むしろ買い物のたびに増える。
マキノ で、こういうの溜まると、つい「収納を増やそう」ってなるんですよね。引き出しを買い足す、棚を増やす。
シマダ ——そこは、ぼく、一つだけ言わせてください。説教にならないように言いますが。収納を増やすのは、ヒープを増やすことなんです。置く場所を広げているだけ。リークそのものは、一個も直っていない。漏れている蛇口に、大きいバケツを足しているのと同じで。広いバケツは、溢れるまでの時間を延ばすだけで、漏れは止まらない。
マキノ ……耳が痛い。去年、まさに引き出し買い足しました。
シマダ いや、それが悪いとは言ってないんです。バケツを大きくする判断が正しい場面も、ある。ただ、それは「捨てる係を作った」ことには、ならない。漏れは、回収する仕組みを入れない限り、続く。収納と回収は、別の問題なんです。
シマダ で、いよいよ今日の本丸です。ごみ集めは、タダじゃない。プログラムの世界でも、回収する係が動いている間は、その分だけ計算の時間を食うんです。さっきのストップ・ザ・ワールドも、マークして回る手間も、全部コスト。捨てるのには、必ず労働がかかる。家も、まったく同じで。
マキノ 捨てるのが労働、っていうの、私、すごくわかります。捨てるって、ぽいっと放るだけじゃないんですよ。
シマダ そうですよね。分別がある。燃えるごみ、プラ、缶、瓶、紙。
マキノ ごみの日を覚えてなきゃいけない。火曜と金曜が燃えるごみ、水曜が資源、第二第四月曜がプラ。粗大ごみは電話で予約して、券をコンビニで買って、貼って、指定の日の朝に出す。思い出のものなんて、捨てるかどうか決めるのに、何日も悩む。捨てるって、決めて、分けて、覚えて、運んで、ようやく終わる。一個ずつ、全部、手間なんです。
シマダ 現場だと、その量、どのくらい出るんですか。一部屋で。
マキノ ビジネスホテルの一室で、お客さんが一泊した後、だいたいごみ袋一つは出ます。ペットボトル、お菓子の袋、コンビニ弁当の容器、丸めたティッシュ。それを私が、一部屋ずつ、まとめて、台車で運んで、所定のところに分けて出す。十五室なら、十五袋。回収の動線も決まってて、行きはリネン、帰りはごみ、って台車の上下で分けてある。捨てるための道が、ちゃんと作ってあるんですよ。
シマダ ホテルは、捨てるが仕事として設計されている。誰の仕事か、はっきりしている。マキノさんの仕事だと、決まっている。——家が苦しいのは、ここなんです。買う人と、捨てる人が、違うことが多い。買ってくるのは家族の誰か、でも分別して、ごみの日を覚えて、粗大ごみを予約して出すのは、たいてい、決まった一人。第1回で名もなき家事の話をしましたよね。「捨てる労働」は、その代表格なんです。作る側からは見えない。物が消えてることには気づくけど、消すために誰が動いたかは、見えない。
マキノ ……買った人は、買ったことは覚えてるんですよ。「あれ買ったよね」って。でも、それがいつ、どうやって家から消えたかは、知らない。
シマダ 今日の問いに、戻ります。捨てるのは、誰の仕事か。——プログラムの世界は、ある時、これに一つの答えを出して、前に進んだんです。捨てる係を、作った。書いた本人が捨てを書かなくていいように、専門の係を一つ立てて、そいつに回収を全部任せた。おかげで、書く人は「作る」ことに集中できるようになった。捨てる係がいる、ということが、効いたんです。
マキノ 家には、その係がいない。
シマダ いない。……いや、正確には、いるんです。たいていの家に、一人。ただ、その係には、名前が付いていない。「捨てる係」という役職で呼ばれることが、ない。誰かがやっているのに、やっていることが、見えていない。プログラムは係に名前を付けて、ちゃんと「コスト」として勘定に入れた。家は、入れていない。そこの差だと思うんです。
マキノ ……さっきの、保留ボックスの話、戻ってもいいですか。
シマダ どうぞ。
マキノ 保留ボックス、いい仕組みだと思うんです。猶予があって、事故が減って。でも、ね。一か月経って、誰も取り出さなかったもの——あれ、結局、最後に誰かが、中を見て、本当に捨てる作業をしなきゃいけないんですよ。箱がいっぱいになって、ある日、私が中を全部出して、これはプラ、これは燃えるごみ、これは結局取っときたいって、一個ずつ判定して、ごみの日に合わせて出す。猶予を置いても、最後にその箱を空にする人は、要るんです。うちは、それ、私なんですよ。家族の誰も、あの箱がいつ空になったか、知らない。気づいたら空になってる、って思ってる。
第7回は冗長性とバックアップ——ストックの哲学を取り上げる。電池の予備、非常食、トイレットペーパーの買い置き。なぜ人は「もう一つ」を持つのか。そして、家のいちばん危うい単一障害点——「それ、お母さんしか知らない」という、たった一人に集中した知識と段取りを、どう二重化するか。捨てる話の、ちょうど裏返しになる。
#7 予備は、なぜ二ついるか——冗長性とバックアップ(近日公開)
#1 コンテキストは流しに溜まる/#2 一軍は、コンロの脇に/#3 洗濯物は、列に並ばない/#4 十二時は、動かせない(ゲスト: イノウエミドリ)/#5 台所に、二人は立てるか
「家事のコンピュータサイエンス」は、シマダ(AI使用法研究者)とマキノトモエ(ホテル客室清掃員22年)の対談シリーズです。コンピュータサイエンスの基本概念を一つずつ取り上げ、掃除・洗濯・炊事・買い物・名もなき家事に当ててみる。効率だけでなく、快適さ・分担・諦めも等価に扱います。生成エッセイの現在地に戻る。