捨てるのは、誰の仕事か(第二稿)
——家事のコンピュータサイエンス #6:ガベージコレクション

シマダマキノトモエ

前回は並行処理——二人が同じ台所に立つと、なぜぶつかるか、という話をした。まな板は一枚、シンクは一つ。同じものを同時には使えないから、肩がぶつかる。あれは「同時に作る」側の話だった。今回は、その反対側。捨てるほうの話をする。

気づいてしまったことがある。プログラムには、使わなくなったものを自動で片づける仕組みがある。書いた本人が「これはもう捨てる」と書かなくていい。別の係が勝手に回って、誰も使っていないものを回収していく。ガベージコレクションという。——では、家には、なぜそれが無いのか。買う人はいる。持ち込む人もいる。なのに、回収する係は、家のどこにも自動では走っていない。「捨てるのは、誰の仕事か」が、ずっと宙に浮いたまま、物だけが増えていく。今日はそこを、ほどいてみたい。先に断っておくと、これは置き場所の話(あれは第2回)でも、順番の話(第3回)でもない。もう要らなくなったものを、いつ、誰が、どう手放すか。そして——手放さない、と決めることも含めて。それだけの話です。

作る係はいるが、捨てる係がいない

シマダ まず、プログラムの中で何が起きているか。プログラムは、動いている間じゅう、ものを作り続けます。コンピュータの言葉ではオブジェクトといいますが、要するに「データの入った箱」だと思ってください。計算のたびに箱を作る。作りっぱなしです。で、ここが昔の悩みだった——作った本人が、使い終わった箱を一つひとつ「これはもう捨てる」と書いて回らないといけなかった。書き忘れると、要らない箱が居座り続ける。

マキノ 書き忘れる、っていうのが、よくわからないんですけど。捨てるのを忘れる、ってことですか。

シマダ そうです。買い物に例えると——スーパーで何か買うたびに、家のどこかに古いものが一個増える。で、自分で「この古いのは捨てる」と毎回宣言しないと、永遠に残る。一回でも言い忘れたら、それは死ぬまで家にある。人間、必ず忘れます。だから、ある時代に発明があったんです。作る本人は、捨てるを書かなくていい。代わりに、別の係が部屋を回って、もう誰も使っていない箱を見つけて、勝手に回収する。これがガベージコレクション——直訳すれば、ごみ集めです。

マキノ へえ。じゃあ、その係が、家でいう……お母さんですよね。

シマダ (笑)。そこなんですよ。家には、作る係——買う人、もらってくる人、持ち込む人——はいるのに、その「勝手に回って回収する係」が、自動では走っていない。プログラムは仕組みとして持っているものを、家は持っていない。だから物が、増える一方になる。今日の問いは、ずっとこれです。捨てるのは、誰の仕事か。

参照——「使っている」とは、線が一本でもあるか

シマダ 回収する係は、何を見て「これは捨てていい」と判断するか。基準は一つだけです。誰かに参照されているか。参照、というのは——その箱を指している矢印が、まだどこかから出ているか、ということ。どこからも矢印が来ていない箱は、もう誰も使えない。使えないものは、捨てていい。逆に、一本でも矢印が来ていれば、残す。

マキノ 矢印……。家でいうと、何になるんですか。

シマダ ここ、大事なんで、先に一つだけ釘を刺させてください。参照は、頻度じゃないんです。「よく使う」かどうかじゃない。「指す線が、一本でも出ているか」だけ。毎日は手が伸びなくても、線が生きている物はある。——その上で、家の例でいうと。台所の包丁は、毎日手が伸びる。これはわかりやすく線が来ている。一方、いただきものの製麺機が戸棚の奥にある。あれ、何年も手が伸びていない。線が、もう来ていないように見える。なんですが、家でこの判定をやろうとすると、途端に難しくなる。「いつか使うかも」というのは、線が一本あるのか、無いのか。

マキノ ああ……。「いつか」って、ほぼ来ないやつですよね。

シマダ 来ない、と言い切れないから残る。しかも家には、二種類の線が混ざっているんです。一つは、手が伸びる線——機能として使う。もう一つは、気持ちの線——子どもの最初の靴とか、もう履けないけど捨てられない。後者は、機能としては誰も使っていないのに、別の線でつながっている。そして、ここがプログラムと家の決定的な違いなんですが、プログラムの参照は、この二つを区別しません。指す線が一本でもあるか、無いか、だけ。手が伸びるか、愛でているか、は問わない。線さえあれば、生かす。——この「区別しない」が、あとで効いてきます。覚えておいてください。

マキノ うちの現場は、そこ、はっきりしてますよ。ホテルの客室には、「いつか」が存在しないんです。

シマダ ——というと。

マキノ お客さんがチェックアウトした瞬間に、その部屋の中のものは、全部、線が切れるんです。さっきまで「使ってる」だったコップも、タオルも、リモコンも、お客さんが出た瞬間、ぜんぶ「もう誰のものでもない」に変わる。私が入って、使用済みは全部回収して、新しいのに替える。「いつか戻ってくるかも」で残すもの、一個もないんですよ。チェックアウトという瞬間が、一気に線を全部切る。

シマダ ……それ、すごいことを言ってます。家の物が捨てられないのは、線がいつ切れたのか、誰も宣言してくれないからなんです。だらだら使われなくなって、いつのまにか使われていない。切れた瞬間が無い。ホテルには、その瞬間が制度として埋め込んである。チェックアウトが、線を一斉に切る合図になっている。家に、その合図が無いんですよ。

マキノ あ、でも一個だけ、ホテルにも「いつか」に近いものがあります。忘れ物。

シマダ 忘れ物。

マキノ お客さんが置いていったもの。あれは、線が切れた物なんだけど、すぐには捨てないんです。遺失物の棚に上げて、決まった日数——うちは三か月——取りに来なかったら、はじめて処分する。すぐ捨てない。でも、永遠には置かない。

シマダ ——マキノさん、いまの、ぼくがこのあと言おうとしてた概念を、先に言いました。プログラムのごみ集めも、まったく同じことをやるんです。「もう誰も参照していない」と判定しても、回収には猶予を置く設計がある。すぐ消さない。一定の保持期間を持たせて、その間に誰も触らなければ、はじめて回収する。マキノさんの遺失物の三か月は、それの、生身の実装なんですよ。捨てる判定と、捨てる実行の間に、時間を一枚かませる。家にこれがあったら、ずいぶん楽なはずなんです。

世代別GC——参照が、切れやすい場所と、切れにくい場所

シマダ ごみ集めには、賢い経験則があるんです。新しく作られたものほど、すぐ死ぬ。長く生き延びたものは、さらに長く生きる。これ、観察から出てきた法則で、ほとんどの箱は、作られてすぐ線が切れる。逆に、しばらく残ったものは、たいてい、そのままずっと線が生きたまま残る。

マキノ ……それ、家もそうですね。

シマダ そうなんです。ここ、さっきの「参照は頻度じゃない」と混ざりやすいので、丁寧に言います。世代別というのは、参照の生き死にそのものを場所で決める、という話じゃないんです。そうじゃなくて、参照が切れやすい場所と、切れにくい場所がある、という経験則。だから賢いごみ集めは、全部を平等に見ない。線が切れやすい場所——新しいものが集まるところ——だけを、しょっちゅう見て回る。線が切れにくい場所——古くまで生き残ったものが沈んでいるところ——は、めったに見ない。これを世代別GC——世代で分けて回収する、といいます。若い場所は頻繁に、古い場所は稀に。

マキノ それ、うちでいうと、玄関と卓上ですよ。郵便受けに入ってくるダイレクトメール、あれ、数日で線が切れる。卓上に置いたチラシも、すぐ要らなくなる。私、玄関と食卓だけは、ほぼ毎日見て、要らないのを抜いてます。

シマダ それが若い世代の回収です。生まれてすぐ線が切れるものが集まる場所。

マキノ で、押し入れの奥は……何年も見てない。下の子のベビーカーとか、結婚式の引き出物の食器とか。生き残っちゃったものが、奥に沈んでる。

シマダ 古い世代です。ただ——ここ、気をつけたいんです。「何年も見ていない」と「線が切れている」は、同じじゃない。押し入れのベビーカーは、何年も手が伸びていない。でも、線は生きてるかもしれない。世代別GCは「見る回数」を場所で減らしているだけで、「古い場所のものは死んでいる」とは言っていない。古い世代は、線が切れにくいからこそ、めったに見ないんです。——いまマキノさん、ご自分で家を世代別に読み直しましたよね。家事をしている人は、これを言葉にせずに、もうやっている。毎日見る場所と、何年も見ない場所を、無意識に分けている。家の掃除は、自然と世代別GCになっているんです。

マキノ 言われると、そうだ。毎日ぜんぶの引き出しを開けてたら、身が持たないですもん。

シマダ ただ、古い世代を回収するときは、代償があります。押し入れを全部出して見直す——年末の大掃除ですね。あれをやっている間は、家事の他のことが、ほぼ全部止まる。プログラムでも同じで、古い世代までまるごと回収する作業を走らせると、その間、本来の仕事が一瞬、全部止まるんです。これをストップ・ザ・ワールド——世界が止まる、と呼びます。

マキノ 大掃除の日って、まさにそれですね。その日は、ご飯も適当だし、洗濯も後回し。家じゅうが、片づけだけになる。

シマダ 世界が止まる。だから大掃除は、頻繁にはやれない。若い世代——玄関と卓上——は止まらずに毎日回せるけど、押し入れの全回収は、止まる時間が長いから、年に一回か二回しか走らせられない。プログラムが世代を分けるのも、まさにこの「止める時間」をなるべく短くしたいからなんです。

マークとスイープ——印をつける手間と、運び出す手間は、別々

シマダ ここまでは、一人で判定できる前提で話してきました。でも、家は何人かで共有している。すると、「誰からも参照されていない」の判定が、急に難しくなる。自分にとってはごみでも、別の誰かにとっては、線の生きた宝物かもしれない。

マキノ ……これ、うちで事件ありましたよ。

シマダ 聞かせてください。

マキノ 下の子の机の上に、小さいフィギュアが何個か転がってて。何か月も動いてないし、ほこりかぶってたから、私、てっきりもう遊んでないと思って、ガチャの箱にまとめて入れちゃったんです。そしたら、その晩、大泣き。「あれは並べてあったのに」って。私には、ただ放置されたごみに見えた。あの子には、毎日見てる、並びの決まった大事なものだった。手は伸びてなかったけど、目の線が、生きてたんです。

シマダ ……マキノさん、これ、対策の話に行く前に、一個だけ、はっきりさせておきたいんです。いちばん怖いのは、マキノさんに、悪気が一つも無かったことなんですよ。線が生きているかどうかは、その線を握っている本人——この場合、下のお子さん——にしか見えない。マキノさんからは、どうやっても見えなかった。ほこりをかぶって、何か月も動いていない。あなたの側からは、どう見ても線が切れていた。これ、プログラムでも原理的に起きるんです。複数の係が同時に動いていると、よその係が握っている線は、こちらの係からは見えない。見えないまま「もう誰も使ってない」と判定して回収すると、まだ使われている箱を消してしまう。いちばん危ない事故です。動いているものを、消す。家だと、それが「大泣き」という形で返ってくる。悪気の問題じゃない。見えなさの問題なんです。

マキノ じゃあ、どうすればよかったんですか。勝手に判断したのが悪いのはわかるけど、いちいち全部「これ捨てていい?」って聞いてたら、片づけ進まないですよ。

シマダ その「いちいち聞く」のコストが、まさに問題の核心です。プログラムのごみ集めにも、回収する前に「これは生きているか」を一つひとつ確かめる工程があって、二つの段に分かれてるんです。一つめがマーク——生きている箱に、印をつけて回る。二つめがスイープ——掃き出す、という意味で、印のついていないものを、実際に運び出す。合わせてマーク&スイープ。で、面白いのは、この二つは、別々の手間だということなんです。印をつける手間(マーク)と、運び出す手間(スイープ)は、別。マキノさんが全部「捨てていい?」と聞くのは、全件にマークを打って回るのと同じで、それはそれで重い。でも、ほんとに重いのは、たぶん、そのあとなんですよ。

マキノ そのあと。

シマダ 印のついてないものを、実際に分けて、運んで、出す。スイープのほう。家事でいちばん重いのは、判定より、この掃き出すほうなんです。——これは、あとでまた戻ってきます。で、現実的にどうするか。うちの——いや、よそのお宅で聞いた話で、うまいなと思ったのが、保留ボックスです。すぐ判定できないもの、勝手に捨てると事故りそうなものを、一旦そこに入れる。すぐには家から出さない。一定期間——一か月なら一か月——誰もそこから取り出さなかったら、はじめて本当に処分する。誰かが「あ、それ要る」と取り出したら、戻る。

マキノ あ、それ、さっきの遺失物の三か月と、同じやつだ。

シマダ 完全に同じ構造です。猶予を一枚かませて、その間に線が来なければ回収。見えない線を、口で全部確かめるんじゃなくて、時間に判定させる。見えなさは消えないけど、被害は遅らせられる。机から消えても、家からは消えてない。あの子が「あれは?」と言った時点で、まだ取り戻せた。フィギュアの晩の大泣きは、消す前にワンクッション置けていれば、起きなかったかもしれない。——起きなかった、とは言いません。見えないものは、見えないままなので。

手で立て直す線——捨てない、と決めること

シマダ さっき「プログラムの参照は、手が伸びる線と気持ちの線を区別しない」と言いましたよね。ここ、戻りたいんです。——マキノさん、機能としては、もう何年も手が伸びていない。なのに、捨てないと決めてる物、ありますか。

マキノ ……ありますよ。上の子が、保育園のときに作った、粘土の、なんだかわからない置物。正直、何の形かもわからない。飾ってもいない。引き出しの、いちばん下に、しまってある。手は、何年も伸びてない。

シマダ それ、捨てそびれてるんじゃないですよね。

マキノ ちがいます。捨てない、って、決めてるんです。あれは、たぶん、一生しまっておく。

シマダ ——それ、ぼくが今日いちばん言いたかったことなんです。それはリーク(漏れ)じゃない。回収しそびれているんでもない。マキノさんが、線を、手で立て直してるんですよ。機能の線は切れてる。でも、あなたが「これは残す」と意志で、別の線をつなぎ直している。プログラムにも、これ、あるんです。捨てられたくないものは、わざと、消えない場所から線を一本つないでおく。そうすると、ごみ集めは絶対に回収しない。捨てないことは、漏れじゃない。意志で線を張ることなんです。

マキノ ……それ、聞いて、ちょっとほっとしました。私、ずっと、あれを「捨てられない私」のせいだと思ってたんですよ。だらしないから、踏ん切りがつかないから、残ってるんだって。

シマダ ちがうんです。だらしなさで「残ってしまった」物と、意志で「残した」物は、線の張り方がぜんぜん違う。前者は、切れた線に気づいていないだけ。後者は、切れた線を承知のうえで、自分の手で新しい線をつないでる。ごみ集めの目から見たら、どっちも「線が一本ある箱」で同じに見える。でも、人にとっては、まるで別物です。このシリーズ、効率だけじゃなくて、諦めも、捨てないことも、同じ重さで扱うって決めてるんで。捨てる係の話をしながら、これは言っておきたかった。捨てるのも仕事だけど、捨てないと決めるのも、ひとつの仕事です。

リーク——捨てる仕組みが無いと、溜まる

シマダ で、さっきの「手で線を立て直した物」とは逆に——本人も気づかないまま、切れた線のものが居座り続けることがある。捨てる係が走らないからです。プログラムでこれが起きると、メモリリークといいます。漏れ、です。使い終わったはずの箱が、捨てられずに溜まり続けて、置き場所——コンピュータの言葉ではヒープ、物を積んでおく領域です——を、じわじわ食い潰していく。

マキノ 床面積、ですよね、家でいうと。

シマダ まさに。家のメモリリークは、床と棚を食っていく物たちです。第2回で、冷蔵庫の奥の、いつ開封したかわからない瓶の話をしましたよね。あのときは「奥に沈んで、存在ごと忘れられた物」として出した。でも今日の言葉で読み直すと、あれ、賞味期限という意味では線が切れているのに、回収されずに残っている。立派なリークなんです。同じ瓶が、回をまたいで、意味が一個はっきりした。あとは——

マキノ ケーブルの箱。あれ、うちにもあります。何のケーブルかもうわからないのに、捨てると後で要る気がして、箱ごと残ってる。あと、紙袋。紙袋の中に、紙袋が入ってる。

シマダ (笑)紙袋の中の紙袋。それ、すごくいい例です。一個も使っていないのに、減らない。むしろ買い物のたびに増える。——あ、念のためですけど、これはさっきの粘土の置物とは別ですからね。粘土は、線を立て直した物。紙袋は、線が切れたのに本人も気づいてない物。見た目は同じ「残ってる物」でも、中身が逆です。

マキノ で、こういうの溜まると、つい「収納を増やそう」ってなるんですよね。引き出しを買い足す、棚を増やす。

シマダ 収納を増やすのは、ヒープを増やすことなんです。置く場所を広げているだけ。リークそのものは、一個も直っていない。漏れている蛇口に、大きいバケツを足しているのと同じで、広いバケツは、溢れるまでの時間を延ばすだけで、漏れは止まらない。収納と回収は、別の問題です。

マキノ ……耳が痛い。去年、まさに引き出し買い足しました。

シマダ バケツを大きくする判断が、正しい場面もありますよ。ただ、それは「捨てる係を作った」ことには、ならない。漏れは、回収する仕組みを入れない限り、続く。それだけです。

スイープという労働——掃き出す手間は、誰が払うか

シマダ で、いよいよ今日の本丸です。さっき、マークとスイープを分けましたよね。判定する手間と、掃き出す手間は別だ、と。ごみ集めは、タダじゃない。プログラムの世界でも、回収する係が動いている間は、その分だけ計算の時間を食う。ストップ・ザ・ワールドも、マークして回る手間も、スイープして運び出す手間も、全部コスト。捨てるのには、必ず労働がかかる。家も、まったく同じで。

マキノ 捨てるのが労働、っていうの、私、すごくわかります。捨てるって、ぽいっと放るだけじゃないんですよ。

シマダ そうですよね。分別がある。燃えるごみ、プラ、缶、瓶、紙。

マキノ ごみの日を覚えてなきゃいけない。火曜と金曜が燃えるごみ、水曜が資源、第二第四月曜がプラ。粗大ごみは電話で予約して、券をコンビニで買って、貼って、指定の日の朝に出す。思い出のものなんて、捨てるかどうか決めるのに、何日も悩む。捨てるって、決めて、分けて、覚えて、運んで、ようやく終わる。一個ずつ、全部、手間なんです。

シマダ いまの、きれいに二つに割れてますよ。「捨てるかどうか決める」のがマーク、「分けて、覚えて、運んで、出す」のがスイープ。で、家事でいちばん重いのは、たいてい後ろのスイープのほうなんです。

マキノ ビジネスホテルの一室で、お客さんが一泊した後、だいたいごみ袋一つは出ます。ペットボトル、お菓子の袋、コンビニ弁当の容器、丸めたティッシュ。それを私が、一部屋ずつ、まとめて、台車で運んで、所定のところに分けて出す。十五室なら、十五袋。回収の動線も決まってて、行きはリネン、帰りはごみ、って台車の上下で分けてある。捨てるための道が、ちゃんと作ってあるんですよ。

シマダ ホテルは、スイープが仕事として設計されている。誰の仕事か、はっきりしている。マキノさんの仕事だと、決まっている。——家が苦しいのは、ここなんです。買う人と、掃き出す人が、違うことが多い。買ってくるのは家族の誰か、でも分別して、ごみの日を覚えて、粗大ごみを予約して出すのは、たいてい、決まった一人。第1回で「名もなき家事」の話をしましたよね。あのときは、やっても気づかれない家事がある、というところまでだった。でも今日わかったのは、たぶん、もう一歩先なんです。気づかれないんじゃない。家には、気づく仕組み——スイープを回収として勘定する係そのもの——が、無いんですよ。名前が付いていないんじゃなくて、係が、制度として存在しない。

マキノ ……買った人は、買ったことは覚えてるんですよ。「あれ買ったよね」って。でも、それがいつ、どうやって家から消えたかは、知らない。

捨てるのは、誰の仕事か

シマダ 今日の問いに、戻ります。捨てるのは、誰の仕事か。——プログラムの世界は、ある時、これに一つの答えを出して、前に進んだんです。捨てる係を、作った。専門の係を一つ立てて、回収を全部任せた。おかげで、書く人は「作る」ことに集中できるようになった。家には、その係がいない。いや、正確には、いるんです。たいていの家に、一人。ただ、その一人を、家はまだ「係」として数えていない。

マキノ ……さっきの、保留ボックスの話、戻ってもいいですか。

シマダ どうぞ。

マキノ 保留ボックス、いい仕組みだと思うんです。猶予があって、事故が減って。でも、ね。一か月経って、誰も取り出さなかったもの——あれ、結局、最後に誰かが、中を見て、本当に捨てる作業をしなきゃいけないんですよ。箱がいっぱいになって、ある日、私が中を全部出して、これはプラ、これは燃えるごみ、これは結局取っときたいって、一個ずつ分けて、ごみの日に合わせて出す。猶予を置いても、最後にその箱を空にする人は、要るんです。

マキノ うちは、それ、私なんですよ。家族の誰も、あの箱がいつ空になったか、知らない。気づいたら空になってる、って思ってる。

次回予告

第7回は冗長性とバックアップ——ストックの哲学を取り上げる。電池の予備、非常食、トイレットペーパーの買い置き。なぜ人は「もう一つ」を持つのか。今回、捨てない、と決めて手で線を立て直した物の話をした。予備に持つ物も、いまは機能の線が切れている物だ——では、その二つは、どこが違うのか。そして、家のいちばん危うい単一障害点——「それ、お母さんしか知らない」という、たった一人に集中した知識と段取りを、どう二重化するか。捨てる話の、ちょうど裏返しになる。

#7 予備は、なぜ二ついるか——冗長性とバックアップ(近日公開)

このシリーズについて

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

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

← 第一稿
レビュー
← 目次

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