シュレディンガーの猫カフェでモナドを学ぼう!
「この番組は、エンジニアの成長は楽しい学びからをモットーに、昨日より少しだけ成長できる学びをお届けするテック系、エンタメ系、テック系ポッドキャストでございます」
「はい、ワイワイお届けしていきましょう」
「はい。じゃあ今日はですね、ちょっと関数型プログラミングの話をしようかなと思ってまして」
「おお、いいですね」
「『プログラマーが知るべき97のこと』っていう本がありますと」
「うん」
「で、これを読むとですね、あの97個の中になんか4つぐらい関数型はいいぞみたいなことが書かれてたりするんですよ」
「ああ、そうなんですね」

「これを学ぶと世界が変わるよみたいな」
「はいはい」
「あと、そういうことがあのーいろんなブログでも、まあ散見される」
「ほう、そうなんだ」
「書き方が変わるぞと」
「はいはい」
「思考のフレームワークが変わるぞと」
「うん」

「いやほんとかいなと思って」
「気になりますね」
「はい。で、まあここ2週間ぐらい浅く触ってたんですよ」
「ああ、ナイスアクションですね」
「全体像をつかむぐらいの浅さ」
「うん」
「結論ですね、浅く触ってたので何も変わっていないんですけど、僕自身は」
「うんうん」

「で、あとどう変わるかも、これはちょっと相当本腰入れて触んないと分かんないんじゃないって思いつつも、ちょっとうっすら思ってるのは、今のまあプログラミング言語ってオブジェクト指向であれ、その関数型のパラダイム的なものって結構もうエッセンスとして取り入れられてるなと思ってまして」
「はい」
「で、関数型プログラミング言語の特徴って何かっていうと、僕が思った中だと、えー副作用とそうじゃない部分をくっきり分けてプログラミングするっていうところだと思ってるんですよ」
「ほう、どういうことですか」
「で、副作用っていうのは、えー外の世界に影響を及ぼすものっていうイメージなんですけど、分かりやすいのだとデータベース。データベースの更新ってアプリケーションからやるじゃないですか、アプリケーションのソースコードから」
「はい、やりますね」
「でもそれってアプリケーションの外側の世界を更新してるじゃないですか」
「そうですね」

「つまり、外側が変わってる。これは要は状態が変わってるっていうとこなので、こういうのを副作用がある動きと言いますと」
「うんうんうん」
「あともうちょい、えーっと手前の部分だとI/Oですね」
「えー、インプット、アウトプット」
「インプット、アウトプット。例えば入力を受け取る部分とか。そういうのとかは副作用があると言われてますと」
「うんうん」
「で、そういう外部の世界と内側のロジックの部分っていうのをきれいに区分けして、で、その内側のきれいな部分っていうのを純粋関数みたいなって言ったりするんですけど、要はベクトル性がある処理ですね。同じインプットを入れたら同じものが返ってくるみたいな」
「本当に2回やっても3回やっても結果は変わらないというか、最終的な状態が変わらないみたいなイメージですね」

「うん。そう」
「うんうん」
「っていうようなものを積み上げて作っていくのが関数型プログラミングの特徴かなとまず思ってます」
「それって関数型プログラミングのどういうところがそうさせるんですか。そういうふうに書けないようなプログラミング言語になってるということ?」
「そう。まず状態をそもそも持てないようになってるな」
「うんうんうんうん」
「コードの中で」
「はい」

「で、外部に何か副作用があるものを書こうとしたときに、モナドっていう仕組みがあるんですけど」
「モナド?」
「はい」
「のまどみたいな?」
「えっとね、いや、あのーモナカドーナッツの略ですね」
「なんでそんな甘い食べ物急に出てくるんですか」
「ミスドの新作っぽいかなと思って出してみました」
「和洋折衷ですね、なんかモナカドーナッツは」

「もしミスドで働いてる方いたら、インスパイアを受けたら作ってみてください。ちょっとこの辺」
「外はサクサク、中はふわふわみたいになりそうですね」
「まあ、ドーナツ食って上顎にいろいろひっついてもらうのはちょっと困るけどね」
「まあね」
「うん。これモナドはね、何の略でもなくて普通にモナドという単語なんですけど」
「うん」
「で、今日のテーマなんですけど、ここに来て発表するんですが」
「関数型プログラミングの話かと思ってた」

「でしょ?」
「はい」
「モナドって何?っていう話です、今日は」
「確かに。いきなり言われてもピンときませんからね」
「そう。薄く広く触ったんで、あんま複雑なところまで触ってないんですけど、ざっと触った中でもモナドだけマジで理解できなかったんですよ、最初」
「ちょっと僕もWordから全く何も想像つかないですね」
「ね、Wordからは無理だと思う。なんかこれね、神話から来てるっぽいから、めちゃめちゃ元をたどると」
「何語なのかも分かんないもんな」

「なんか神話にあった単語を哲学者が引用してきて、それを数学者が引用してって、その数学の世界の中にできたモナドっていうのをプログラミングに取り込んだものなので」
「だいぶ薄まってますね、なんか」
「そう。元は神みたいなところ」
「うんうんうん。全然分かんないね」
「なので、単語から予測するのはおそらく無理であろうと思ってます」
「はい」
「このモナドを説明したいんですけど、今日はね、いい例えを持ってきましたよ」
「はい。全くピンとこないものを例えながら説明してくれるんですね」

「そうです。まあでも、まず最初にどういうものか言っておきますよ」
「はい」
「これはですね、文脈付きの値です」
「ほう。コンテキストが付いている値」
「文脈付きの値を取り扱うための包括的な仕組みみたいなものです」
「うーん。どう便利なんだ」
「で、それこそさっき言ってた副作用あるものっていうのは、実はこの文脈付きの値なんですよ」
「ほう」

「さっき出てきた例えばデータベースですね」
「はい」
「データベースってデータ取り出しますよね、中から」
「うんうん」
「でも取り出しに失敗することもありますよね」
「ありますね」
「例えばIDが存在しないとか」
「うん」

「それって取れるかもしれないし、取れないかもしれないと」
「うん」
「こういうね、状態をですね、文脈付きの値っていうんですよ。取れたらあるけど、取れなかったらないよね、みたいな」
「あー、なんか、あ、そういうこと。えっと、なんか最初にWordだけ聞いたときは、なんかそのー、なんだろうな、変数使い回してるみたいな?」
「うんうんうん」
「変数引き回して使ってるようなものを文脈付きの値みたいなことを思ったんですけど、そうではなくて、この定義した値は複数パターン分岐するよというか」
「うんうんうん」
「外側か。アプリケーションの外側の事情によって何かが条件というか状態が変わる値のことを文脈付きの値と呼ぶってことなんですね」

「そう」
「ほー」
「で、I/Oもそうで、何を入力するかによって入ってくる文字違うじゃないですか、なんか」
「そうですね、確かに。なんか申し込みフォームで言う名前とかは変わりますからね」
「そうそうそうそう」
「うん」
「とか、あとは実行すると失敗するかもしれないやつ」
「うんうんうんうんうん」

「そういう系は基本的に文脈付きの値と言われてて。あとね、これもなんだっていうので言うと、リスト」
「配列?」
「そう」
「それは外からのものとか関係なく?」
「関係なく、これも文脈付きのものになる。取り出した値によって中の値具体的に変わるんで」
「うん」
「そういう意味で、これも文脈あるよねっていうふうに、この関数型の中では捉えられてますと」
「えっと、配列の話で言うと、内側だけで使うリスト。例えば」

「あれか?」
「列挙型みたいなこと?」
「あ、列挙型。そう、列挙型は内側で使う配列みたいなやつですよね」
「うん」
「で、なおかつ文脈なさそうに思うんですけど、そのアプリケーションが完成した時点で絶対に動く配列が入ってるはずだから」
「うんうんうんうん」
「それは文脈付きの値っていうんですか」
「それはね、言いますね」

「あ、そうなんですね」
「でもそう言われると確かに、文脈関係なくねっていう気がしてくるんで、ここで改めてChatGPT君に立ち戻ってみますか」
「おお、頼りになるぜ。いつもありがとう」
「今リストを研究してて新たな事実がね、発覚しました」
「はい」
「モナドはですね、副作用のための仕組みと思われがちですが、必ずしもそうではありません」
「ほう」
「じゃあちょっとまずモナドについて説明するんですけど」

「はい」
「で、そういう副作用を区切るためのものとしてモナドってのがありますよと」
「うん」
「で、ただ、このモナドに関して言うと、副作用専用ではないです」
「うん」
「あくまでこのモナドっていう仕組みの中で、そういう副作用も取り扱うことができますよっていうぐらいのイメージ」
「うんうんうん」
「で、このモナドっていうのはですね、要は文脈付きの値っていうのを包括的に扱うための仕組みっていう、超分かりにくいあれなんですけど」

「はい」
「そういう値をですね、順番に処理していくためのルールっていう感じなんですね」
「うーん、なんかデザインパターンみたいな話?」
「あー、デザインパターンみたいな話ではない気がするな」
「プラクティス集があるっていうイメージでもない」
「なんかこれオブジェクト指向の考え方でないような概念な気がするな」
「はいはい」
「これに当てはまるみたいなやつが」

「うん」
「で、この文脈付きのやつっていうの、値っていうのがどんなのを指すのっていうのが、多分たくさん事例を出したら分かりやすいんですけど」
「うん」
「まずさっき言った副作用のところ」
「うん」
「もしかしたらデータがあるかもしれないっていうパターン」
「うん」
「ないかもしれないし、あるかもしれないっていうパターン」

「うんうん」
「それって要は、そういう事情がありますよね。であればその処理をやって次に進めるし、なければ止まりますよね」
「うん」
「で、I/Oも同じで、何が入力されるか受け取ってみるまで分かんないですよね。インプットの部分とかだと特に」
「うんうん」
「っていうのもあるし、あとリストですね」
「リスト」
「リスト。配列みたいなやつ」

「うん」
「で、これも例えば1、2、3って複数の値がありますよと」
「うん」
「で、これはどういうふうに取り扱うかっていうと、例えば数字だったらintじゃないですか」
「はい」
「で、intの候補が複数あるっていうふうに捉えるんですね、これを」
「ふーん、うん」
「で、それをマップとかだったら順番に処理していくっていうのをやってくんですけど」

「うん」
「だからなんて言うんだろうな、本当に複数の可能性があるというか」
「配列の順番が保証されてないようにみたいな話ですか」
「順番だけに限定してない気がするな」
「はいはいはい」
「型だけ決まってて、中身決まってないよねっていうことだと思う」
「うんうん」
「だからあれか、順番といえば順番なのか」

「うんうん」
「なんですけど、無限の可能性があるよねっていう、1個1個の値、何が入ってるかに関して言うと」
「まあそうですね。それでも全てに言えません。そんなことないか。int型だったとしても、intの範囲でいろんな値が入りうるよねみたいな話?」
「ああ、で、それで言うと、このモナドっていうのが、それを逐次処理していくための仕組みみたいな感じなので」
「ああ、はいはい」
「それゆえにリストが挙げられてるんだと思いますね」
「ああ、なるほど」
「うん。あとはJSの例だとPromiseとかも、それに当たるかなと」

「えーと、なんでしたっけ?非同期でやってくるやつでしたっけ?」
「そうです。で、値が受け取れたら次に進むよみたいな」
「はいはい」
「これって要は値受け取るまでは次に進まないっすよね」
「うん」
「っていう条件付いてるとか」
「ああ、なるほど」
「うん。なんかそれはね、すごいすっと入ってきません?なんか文脈付きなんとかっていう」

「うんうんうん。あとResult型とかもそうですね。Rustとかにあると思うんですけど」
「なんですか、それは」
「Result型は、何かを処理したあとの結果を表す型なんですけど」
「ほう」
「成功してる場合と失敗してる場合があるんですよ」
「はい」
「なんかサブクラス的な感じで作ってんのかな、これは。このResult型の」
「えー」

「型ではないんですけど、あれ確かRustってオブジェクト指向じゃないんで、クラスじゃないんですけど」
「はい」
「で、そのResultの中身を見て、成功してたらこの処理、失敗してたらこの処理みたいな分岐をするときに使うやつで」
「へー、そんなのあんだ」
「そう。で、それとかも要は成功してる可能性と失敗してる可能性、2つとも秘めてるじゃないですか」
「はい」
「こういうものとかはモナドで扱うようなパターンですね」
「ふーん」

「というので、今ちょっとモナドのどういうものなのって話をしたんですけど」
「うん」
「なんかふわっとしててむずいじゃないですか」
「まあ、なんかふわっとしたものを扱う何かぐらいの感じですね」
「そう。ということでですね、今日は久しぶりにこれを例えていこうかなと思ってまして」
「ちょっとよろしくお願いします、それは」
「はい。今回はですね、猫カフェで行こうと思ってます」
「あー、いいですね」

「はい」
「僕あんまり行ったことないんですけど、最近ちょいちょい行きましたよ」
「あ、ほんと?」
「はい」
「俺ね、今回のこの例えを作ったものの猫カフェに関しては1回も行ったことないんで」
「マジかよ」
「猫カフェ自体の解像度はすごい低いと思ってもらってください」
「よく例えられましたね。じゃあモナドのほうが詳しいじゃないですか、猫カフェ」

「いや、俺は多分猫カフェよりモナドのほうが詳しい」
「珍しい」
「ってことで、対照的に例えるのはですね、オブジェクト指向だった場合の普通の猫カフェですね」
「うんうんうんうん」
「と、今回はモナドを使っているシュレディンガーの猫カフェで行こうと思ってます」
「何それ?全然。まずオブジェクト指向の猫カフェもよく分かんない」
「あ、そっちも分かんない?」
「はい」

「これね、普通の猫カフェですね」
「どこが何なんだ?」
「どこが何で言うと、猫がオブジェクトですね」
「猫がオブジェクト、はい」
「で、猫は状態を持ってますと」
「うん」
「ちょっとまず猫カフェについて質問していいですか」
「ああ、いいっすよ」

「猫カフェってさ、猫に対してさ、なんかこうアクションできる?」
「できますできます」
「できるよね」
「餌買って餌あげたりとか」
「はいはいはい」
「あとはおもちゃ使っておもちゃ遊んだりとか」
「はい」
「あとはなんか触っていいよって言ってくれる子については、触らせてもらったりとか」

「え、触っていいよって猫が言ってくるの?」
「そうそうそうそう」
「あ、そうなんだ」
「いいよって。オッケーっつって」
「待って」
「うん。だめなやつはね、だめって首にかかってたりとかするんですけどね」
「あ、そうなんだ」
「はい」

「だめなやつはなんなの?ストレス耐性低いみたいな、そういうこと?」
「うーん、ちょっと機嫌悪いんじゃないですかね、今日」
「あ、そうなんだ。日によるんだ」
「日によると思いますよ」
「ええええ。じゃあね、大丈夫だわ、これで」
「はい」
「はい。じゃあ猫がまずオブジェクトですよと」
「うん」

「状態を持ってます」
「うん」
「例えばさっき言ってた機嫌とかまさにそうっすよね」
「そうっすね」
「うん」
「その辺の」
「空腹度とかね」
「そう、空腹度ね。空腹ステータスが例えば満腹だった場合って、餌あげても嫌がるじゃないですか、絶対」

「無視しますね、多分ね」
「無視するんだ。え、なんか店員さんに言われないの、これ?いや、さっき食べさせちゃったんですよね、みたいな」
「いやー、全員ハングリーですからね、大体」
「野生だな」
「はい」
「そうなんだ」
「すごい勢いで来るんで」
「ああ、じゃあ、ちょっと、でもさすがに満腹だったら食わないでしょってのはあるんで」

「まあ、そりゃそう思いますね」
「そういうステータスがありますよと」
「うん」
「で、オブジェクト指向の場合、猫をあげるっていうアクションをやりますよね」
「猫をあげる?」
「猫じゃねえや。餌をあげるっていう、じゃあアクションしたいですよと」
「はい」
「じゃあ、餌あげるメソッド呼びます」

「はい」
「でもそのときにまず条件分岐が入りますよね」
「うん」
「条件分岐で言うと。満腹かどうかみたいな」
「うん」
「条件分岐が入りますよと」
「うん」
「で、食べますと」

「うん」
「っていうシンプルな動きにしようかな」
「うん」
「っていうふうに作るじゃないですか」
「はい」
「で、じゃあ撫でるメソッド」
「うん」
「撫でますと」

「うん」
「でも機嫌が悪かったと」
「うん」
「そうなったら何が起きますか」
「反撃猫パンチですね」
「反撃猫パンチ?」
「うん」
「ですね」

「うん」
「この反撃猫パンチ、500エラーですね、つまり」
「バットリクエストではないんですね?」
「えっとね」
「500エラーはなんかもうわけ分かんなくなっちゃってる」
「いや、触った、500エラーは確かに猫パンチ食らったときのこっちのハンドリング次第かもしんないんだけど」
「はいはい」
「そういうことが起きますよと」

「はいはい」
「なので、条件に合わせてそういうエラーハンドリングっていうのをポンポンポンポン書いてってますよと」
「うん」
「っていうのが、このオブジェクト指向猫カフェのイメージですね」
「はい。すごい自然に馴染む」
「まあ、考えやすいよね」
「何も悪いところがない」
「うん。でもしこのエラーハンドリングやってなかった場合」

「うん」
「満腹なのに猫に餌をあげてしまった」
「うん」
「でもそのときに猫の満腹度をチェックしてなかったので」
「うん」
「チェックするロジック忘れてたんで」
「うん」
「猫は食べますと」

「うん」
「その結果、猫が爆発しますと」
「500エラーですね」
「500エラーを起こします」
「うん」
「これがオブジェクト指向プログラミング、間違えた。オブジェクト指向カフェ、猫カフェ」
「うん」
「の日常です」

「ああ、なるほど」
「はい」
「じゃあ、なんかあくまで設計された範囲で動くみたいなイメージなんですか」
「だから、うーんとね、というか条件を都度考えてハンドリングしていかなきゃいけないよねっていう世界ですかね」
「うんうんうん」
「はい。続いてシュレディンガーの猫カフェに行こうと思います」
「猫いるんですかね、それ」
「まずそう思うじゃないですか」

「はい」
「まずシュレディンガーの猫について簡単に、これシュレディンガーの猫が分からないとついていけなくなるんで」
「そうですね、お願いします」
「簡単に説明すると、まずこのシュレディンガーさんっていう人がいましたと」
「うん」
「で、その人による思考実験がこのシュレディンガーの猫っていうやつなんですけど。その量子力学の説明を見たときに、じゃあこれってもしかしてその箱の中に猫を入れて、50%の確率で毒ガスが出て猫が死んでしまう。で、50%の確率で出なくて生きていると」
「うん」
「でもその箱の中に入ってる限りどっちになってるかっていうのを確定してなくて、箱を開けて人間が観測した瞬間それが確定する。そんなばかなっていった思考実験なんですよ」

「はいはい」
「量子力学ってなんか、それを観測した瞬間に事実が確定するみたいな、なんかそういう話らしくて」
「うんうん」
「で、それを見て自分で考えた理論なのに、いやいやいや、そんなことはありえないでしょっていう、なんか思考実験的な感じで出てきたのがこのシュレディンガーの猫ってやつですよと」
「はい」
「このシュレディンガーの猫カフェの猫はですね、基本的に全て中身が全く見えない鋼鉄の箱に入った状態で猫が提供されます」
「うんうんうん」
「なので、店員さんが箱を持ってくるっていうタイプの新しい猫カフェですね、これ」

「なんか飲食店、カフェによりましたね、なんかね」
「いや、まあ箱カフェかもしんないね」
「まだギリギリついてってますよ」
「まだついてってる?」
「はい、ギリギリね」
「はい。これ猫見えないし触れないじゃないですか」
「そうっすね」
「お客様はこれを開けたいんですけど」

「はい」
「ここで箱を開ける行為っていうのは禁止されてますと」
「ほう」
「うん。直接そこに触ったらいけない」
「うん」
「なぜかというと、関数型の世界っていうのは、先ほども申し上げたとおりですね、純粋な関数の世界とそうじゃない副作用があったりとかする世界っていうのを明確に区切ろうとしてるんですね」
「うんうんうん」
「そのブロックに挟まれた結果、お客様はその箱を開けることはできません」

「何が楽しいん、それ」
「楽しさを考えたらおしまいだよ、これは」
「だめなんすか。だめなんですか」
「これは楽しさを考えたらおしまいのゲームだよ」
「分かりました」
「それで言うと結論はもう1個決まってて」
「はい」
「楽しくはないが正しいと思う」

「楽しくはないんですね」
「そりゃそうだろ」
「分かりました」
「飲食店プラス箱なんだから」
「うん」
「楽しい箱でもないしな」
「ちょっと箱がこっから箱の伸びしろないことが分かりました」
「うん。でもその中に猫の存在を感じられるよ」

「ああ、なんかじゃあ」
「いるかもな」
「ニャーニャーは言ってるんすか」
「いや、音は聞こえないっすね」
「だめなんだ」
「音もだめなんだ」
「存在がいるっていう可能性を感じられるぐらいに思ってもらったほうがいいかもしんないっすね」
「じゃあ店員さんはいる言うてるけど、気配は感じないぐらいの感じなんですね」

「そうです」
「なるほどね」
「はい」
「箱やん、じゃあ」
「箱です」
「うん。でもやっぱお世話したいじゃないですか」
「お世話っていうか触れ合いたいっすよね」
「触れ合いたいんだ」

「猫カフェだからね」
「あ、まあそっちが目的か」
「はい。お世話しに行ってるわけじゃないですからね」
「それで言うと、この猫カフェは、間違えた。箱カフェは」
「箱カフェになっちゃった」
「お世話はできるんですけど」
「はいはいはい」
「触れ合うことはちょっと禁じられてます」

「どういうことですか」
「すいません」
「どういうことですか、それは」
「すいません、これは。最初に言っておきます」
「めっちゃ、めっちゃ謝ってくるけど」
「はい。でもお世話はできます」
「お世話できるんですね」
「はい」

「どうやってお世話できるんですか」
「お世話をする方法なんですけど」
「はい」
「箱と一緒にですね、お世話マニュアルをですね、店員さんに渡します」
「こっち側が?」
「はい」
「こっち側が?」
「こっち側が」

「どういうこと?」
「そのままです」
「そのままなんですね」
「箱と一緒にお世話マニュアルを店員さんに渡します」
「例えばどんなマニュアルを渡すんですか」
「例えば餌をあげるですね」
「ああ、マニュアルっていうか、指示をするってこと?」
「えっとね」

「店員さんに」
「いや、マニュアルごと渡してますね、これは」
「じゃあ」
「厳密には」
「ハウも指定して」
「ハウもあります」
「ああ、そうなんですね」
「はい」

「じゃあ、なかなかお客さんを選ぶというか、箱に詳しい客じゃないといけないっすね」
「まあ、そうです」
「うん」
「箱にっていうか猫にかな」
「猫なんすね、そこは」
「うん。で、あと今回はじゃあちょっと3つお世話したいなと」
「うん」
「餌をあげて、ブラッシングをして、リボンをつけたいですと」

「うんうんうん」
「ってお世話をしたいよってなったら、箱とセットにその3つのマニュアルをね、渡します、店員さんに」
「箱も返しちゃうんですね?」
「箱も返します」
「じゃあ、なんで1回来たんだってことになってきますけど。まあ、いいでしょう」
「まあ、そうっすね。細かいことは切り捨ててね」
「はい」
「はい。で、そうすると店員さん、かしこまりましたって言って」

「うん」
「その箱とマニュアルを持って店の裏に行きますと」
「裏に行くんですね?」
「はい」
「はい。バックヤード」
「バックヤード行きます」
「うん」
「で、店員さん裏で箱を開けますと」

「うん」
「で、その箱の中に猫がいれば餌をあげます」
「ほう」
「いなければ何もしません」
「いなければっていう条件があるのやばすぎますね。じゃあ、最初にもらった箱なんだったんだってことになってきますけど」
「だからこれは猫っていうか、猫がいるっていう可能性を渡された感じですね」
「シュレディンガーの猫カフェだな」
「シュレディンガーの猫カフェなんで」

「はい」
「で、空っぽですと」
「はい」
「空っぽだったら、一旦箱を閉じます」
「うん」
「っていうか、新しい箱を用意します」
「新しい箱を用意してくれるんですね」
「はい」

「はい」
「で」
「ガチャだ、なんか」
「裏に店員さん、実は3人いるんですよ」
「3人、はい」
「はい。で、続いての店員さんにブラッシングするっていうマニュアルを渡しますと」
「はい」
「で、店員Bはその箱を開けて、猫がいればブラッシングをして、いなければしません」

「うん」
「で、また新しい箱を用意して、次の店員さんに渡しますと」
「うん」
「で、次の店員さんはリボンをつけるってマニュアルがあるんで」
「はい」
「猫がいたらリボンをつけて、いなければつけません」
「その全員いなかった場合、空き箱やり取りしてるだけになりますけど、そこも大丈夫なんですか」
「大丈夫なんです」

「大丈夫なんですね」
「はい」
「はい」
「で、その上で最終的に箱になりますと、また」
「うん」
「で、その箱がお客さんの元に帰ってくると」
「はいはいはい」
「これがモナドです」

「どこが?」
「これがですね、まず猫っていう、いるかいないか分かんないけど、どっちの可能性もある値がありますと」
「うん」
「で、これに対して逐次処理をしていきます」
「うん」
「例えば餌をあげる」
「うん」
「ブラッシングする」

「うん」
「リボンをつける」
「うん」
「この流れ」
「うん」
「これ要は逐次処理じゃないですか」
「そうですね」
「で、それらをやっていきますよと」

「はいはい」
「っていう流れがありますと。で、本来これがモナドない場合だったら、じゃあその結果がどうだったかとか」
「うん」
「なんかそういう条件チェックみたいな、さっきのようなオブジェクト指向猫カフェだったら、そういう条件チェックがあって」
「うん」
「だめだった場合に猫が爆発したりとか事件があったんですけど」
「事件っていうか即座にね、フィードバックがありますね」
「そう」

「うん」
「なんですけど、このモナドの仕組み」
「はい」
「の場合、猫がいなかったみたいな条件のときに、何もせずに次箱を渡してるんですよ」
「止まんないんですね、そこで処理が」
「そう」
「うん」
「っていうので、エラーハンドリングがすごい楽になるんですね」

「まあまあまあまあ、それはそうかもしんないっすね。えっと、ちょっと質問なんすけど」
「はい」
「どう失敗してもとりあえず次に渡せるような仕組みってことなんすか。なんか、例えば餌をあげるってなったときに」
「はい」
「満腹だから食べませんっていうときと」
「うん」
「そもそもこのおやつ好きじゃないから食べませんっていうときと」
「うん」

「あとはなんかこの猫、この餌は大人の猫用で、こいつは子猫だからあげちゃいけませんとか、なんかいろいろあるじゃないですか、条件は」
「はいはいはい」
「そもそも餌持ってませんでしたかもしんないし」
「うん」
「そのいずれにしても何かしら失敗したとして」
「うん」
「でも次に処理を進めるみたいな考え方ってことですか」
「そう」

「へえ」
「例えばですけど、満腹でしたと」
「はい」
「じゃあ満腹だった場合どうなるかっていうと」
「うん」
「最初の餌をあげる時点で猫が爆発するんですね」
「うんうんうん。それはシュレディンガーの猫カフェ?」
「はい」

「爆発しちゃうんすね、結局」
「爆発します」
「ああ、はい」
「で、爆発した上で」
「はい」
「爆発したらもう箱、新しい箱に、あ、で、店員さんと店員さんで受け渡すときに」
「うん」
「新しい箱に入れて渡してるんですよ」

「ああ、じゃあ引き継いだ猫か」
「はい」
「新しい猫かは次の店員さんは知らないんですね」
「引き継いだ猫か」
「そう、最初の餌やりが成功して」
「はい」
「その猫を新しい箱に入れてお渡ししてるのか」
「うん」

「最初の餌やりで猫が爆発して」
「うん」
「猫Bを新しい箱に入れてんのかは」
「うん」
「2人目の店員さんは分からない」
「分からない」
「うん」
「分からないです」

「うんうん」
「要は箱の中に猫がいるかどうかしか見てないっす」
「うんうんうん。しかも開けたときにね」
「はい」
「はい」
「で、なければ新しい箱を次に渡すだけなんで。安全に逐次処理ができますよと」
「感情を失ってますね、なんかすごい完全に」
「まあね」

「なんだろう、プログラミング的にはね、その猫のいるいないに関心があると言えるんですけど」
「うん」
「人間的には関心ないですね」
「人間的にはそう」
「そう、なんかいてもいなくてもまあみたいな感じで」
「箱とマニュアルに忠実なだけ」
「ってことっすよね」
「そう。で、例えば1個目の箱を開けて猫が爆発してしまいましたと」

「はい」
「そうなった場合、もう爆発した猫を新しく箱に入れるのはかわいそうなので。空箱のまま次に渡しますよと」
「あ、それはじゃあ猫補充はしないんですね?」
「しないっす」
「ああ、それはそのまま右から左に行く感じで」
「まあ、それは失敗した処理だったので」
「はいはいはい」
「で、次の人はもう、ああ、じゃあ箱だっつって次に新しい箱を渡して」

「うん」
「で、最後の人も空箱を受け取って新しい箱を用意して店員さんに箱を出てもらうと」
「うん」
「で、これ猫カフェにしてるせいで、何がメリットやねんってなってると思うんですけど」
「面白くなさそうですよ、そのカフェ」
「いや、あの」
「めっちゃコーヒーうまいとかじゃないと許さないっすよ」
「うん。コーヒーは普通っすね」

「ああ、許せないわけですね」
「猫重視なんで」
「許せない?」
「付加価値は」
「はい」
「うん、まあっていうか猫がいるって可能性?うん」
「なるほど」
「がやっぱ価値なんで」

「うん」
「あれなんですけど」
「はいはい」
「まあ、ここまであのとっちらかりにとっちらかったんですけど、でもよく考えてみてほしいんですよ」
「うん」
「えっと、このとき店員さんって純粋な関数だけをこう保ててるんですね」
「ああ、まあね。淡々と仕事ができますね」
「そう」

「うん」
「で、その店員さんは別に条件分岐してないというか」
「まあパワーというか、何がなんでも成功しても失敗しても次にやることは変わらない」
「そう」
「うん」
「で、別にそのなんだ、さっきは一応なんだ、満腹状態で食わせて爆発してしまったんですけど」
「うん」
「そこってマニュアル次第じゃないですか」

「ああ、なるほど」
「うん」
「お願いする側、はい」
「うん。なので、べき等じゃないものというのかな」
「うん」
「要はそういう状態を持ってるものとかいろんな可能性があるものっていうのをですね」
「うん」
「分離できてるんですよ、これ」

「うんうん」
「店員さん視点だと」
「そうですね」
「そう。っていう意味で、これがですね、プログラミングに当てはめたときに、そういういろんな可能性があるものっていうのを、可能性分岐しないものと分離して書くことができるんで、オブジェクト指向でも生きていきますよねっていう、そういうものなんすね」
「うんうんうんうん」
「この関数型っていうのが」
「はい」
「で、その中でおいて逐次処理みたいなところを滑らかにやるよっていうのをできてるのが、このモナドみたいな」

「へえ。モナドっていうのは、なんかそういう文脈付きの値を扱うとも限らないけど、大体それを中心としたやり方のカタログ集みたいな?」
「まず文脈付きの値を取り扱うものでいいです」
「あ、それは確定、はい」
「を逐次処理で取り扱うみたいな感じかな」
「はい」
「っていう認識で合ってると思います」
「うんうん。えーと、シュレディンガーの猫カフェで言うと、どっからどこまでが」
「うん」

「モナドなんですか」
「えーとね、店員さんのリレーの部分かな」
「ああ、そこの部分。店員さん自体というよりは、店員さんがリレーする部分がモナド?」
「いや、えっと」
「いや、それで言うともうちょい広いかもな」
「はいはいはい」
「この例で言うと、どこまでがモナドかというとですね」
「はい」

「まずこの箱」
「うん」
「箱自体がモナドの一部ですと」
「それはどういうところでそう言ってるんですかね」
「要はいろんな可能性があるものを箱でパッケージしているところ」
「ああ、同じような取り扱いができるような形にして受け渡しをしているという。ところが、まずこれ1個、これモナドだよねっていうポイントなんですね」
「そう」
「はいはい。で、あとはこの箱の中に猫を入れるという機能」

「うん」
「もモナドの一部ですと」
「なるほど。取り扱えるような、これなんて言うんすか、このインスタンスじゃなくて、なんて言うんですかね」
「これは猫です」
「猫?」
「はい」
「これもね、モナドの一部。はい」
「そう、箱とその箱に猫を入れるっていうことと」

「うん」
「その箱の中身に対して」
「うん」
「マニュアルを適用して」
「うん」
「新しい箱にして返すっていう部分っすね」
「はいはいはいはいはい」
「この3つが掛け合わさってモナドと呼ばれてます」

「ああ、ふわっと分かってきました。なるほど。なんかあれですね、オブジェクト指向のカプセル化とはちょっと違う考え方というか」
「うん」
「なんかどこを包み隠すんかみたいなところが違う視点で。なんか面白いっすね。なんか解釈合ってるか教えてほしいんですけど」
「うんうん」
「ここで言うモナドって結構手続き的というか。なんか外側から、これはこうやってこうこうこうやってこうやってやってね、よろって言って渡して」
「うん」
「で、それに外側からなんかいろいろ手続き的にというか、いろいろやり方を指定して投げているから」
「うん」

「投げられた側はすごくシンプルにできますよっていう」
「うん」
「ようなものなのかなと思ってて」
「うん」
「一方でオブジェクト指向のカプセル化っていう考え方は」
「うん」
「外側の人は何も知らない放たれ小僧で」
「うん。これやっといてよろしくってポーンって投げると裏側でいろいろ頑張って頑張って頑張って」

「うんうんうん」
「最終的な成果物をあげてくれる。だから呼び出す側シンプルだよねみたいな」
「うん」
「なんかそういうどこをシンプルに保つかみたいなところのなんか考え方が違うというか」
「ああ」
「っていう捉え方してるんですけど、どうなんです?」
「いや、そうだと思いますね」
「うん」

「で、このモナドの登場した背景みたいなところで言うと」
「はい」
「どうしてもやっぱアプリケーション触ったときに、そういういろんな可能性があるものって触らざるを得ないじゃないですか」
「そうっすね。厄介だし」
「そうそうそう。でも関数型プログラミングの思想って」
「うん」
「さっき言ったべき等性みたいなところがやっぱ一番強いのかなと思ってて」
「うん」

「同じ結果、同じ値を入れたら同じ結果が返ってきますよと」
「うん」
「で、関数の合成みたいなのをすごい使うんですよ」
「えっと、合成っていうのは」
「はい」
「漢字でどう書く合成?」
「えーっとね、これは風来の試練で出てくる合成の壺と同じ合成ですね」
「うわー、分かんねえけど」

「合わせなる」
「ああ、合わせなるのね。合体ね」
「合戦の我に」
「合戦ね」
「成分の成分」
「合戦でもいいか。はい」
「うん。が合成ですと」
「関数の合成」

「はい。で、関数の合成は、えーと」
「うーん、まあ、めっちゃシンプルに言うと、小さい関数いっぱい作って組み合わせて1個の動きを作るみたいな」
「うんうんうんうん。パズルのピースとか」
「うん」
「まあ、ほんとにシーケンス図みたいな考え、シーケンス図じゃねえや、状態遷移図というか」
「うん」
「子どもがやるプログラミングアプリみたいなノリのやつですね、なんか」
「ああ」

「パズルでつなげて1個の処理にするみたいな」
「そうかも」
「ん?」
「あれか、うん、そうかもしれないな。あんまそれ触ったことないんだけど」
「うん」
「CSVの読み取りだったら、例えばCSVを読み取る処理とパースする処理と画面に出す処理みたいな」
「うんうんうんうん」
「3つの関数作ってそれを組み合わせて作るみたいな」

「うんうんうん。これは関数の合成って言ってるんですね?」
「そうそうそうそうそう」
「はい」
「っていうのをやろうとしたときに、こう副作用があるとどうしてもそれができないと」
「ああ、なんか思ってもないというか、変な副作用があると、例えばファイルを変更しちゃうとか、例えば読み込む過程で」
「うん」
「読み込みやすい形に勝手に変えちゃうってなると」
「うん」

「それなんか合成して別の用途で使いづらいよねみたいな話?」
「あれかな、滑らかに書けないのかな、多分。ここでエラー出たらこの処理挟まなきゃみたいなのがちょいちょい出てきて」
「ああ、確かに」
「滑らかに書けないっていうほうがイメージ近いかもな」
「ありそう、ありそう、はい」
「うん。ってなったときに、このモナドを使うと、いろんな可能性の部分をさらに分離して書くことができるんで」
「うん」
「なんか関数型っぽい、なんか関数型っぽい書き方で言うと、特にオブジェクト指向で言うと、なんかメソッドチェーンとかイメージ近いかなって気がするんだけど」

「うん」
「という関数を連続して呼び出して結果を得るみたいな」
「うん」
「ああいう書き方をするときに、このモナドっていう仕組みを使うと、すごい関数型ライクに書けていいよねっていう」
「うんうんうん」
「イメージかな」
「そうじゃないと、いろんなこと想定して書かなきゃいけなくなっちゃうからってことか」
「だと思う」

「うん」
「っていうので、困ったプログラミングの言語設計者たち、Haskellの設計者たちが」
「はい」
「数学の世界のこれだってなって持ってきたやつっていう」
「数学の世界の話なんなのかがちょっとこうなってくると気になってきますけどね。どの部分?」
「数学の世界でなんか検論っていう分野らしいんですけど」
「検論?」
「なんか正倉拳の検にね、論語の論ですね」

「え、全然分かんないな。なんかそのへんの論、そのへんの論じるというか」
「うん」
「そのへんの論っていう」
「そのへんの論」
「うん」
「ちょっとね、検論は僕もあの文系なんで分かんないんですけど」
「はい。関係あんのかな、分離」
「まあでも理系のカイチが分かんなければ文系の俺が分かるはずない」

「急に俺に責任来たわ。急にね。聞いたことすらないわ」
「俺、数2Bまでしかやってないからさ」
「それ少ないですね、だいぶ」
「うん」
「機械学習の勉強したときに内積でつまづいた男だからね」
「つまづきますね、それは」
「うん。やり方は分かったけど、これ何よってなってそうだな」
「何よってなりますね」

「うん」
「っていうのを、から来てます」
「うん」
「モナドは」
「はい」
「数学でもモナドって言うらしい」
「さすがにね」
「うん、さすがに」

「はい」
「で、やっぱりこうやって今話しててじわじわ整理されてったんですけど、僕の中で」
「はい」
「やっぱりこのへんの考え方って」
「うん」
「このへんの考え方というか、関数型の考え方って最近のプログラミングだとやっぱオブジェクト指向書いててもなんかやっぱ言われてるなと思ってて」
「ほう」
「小さく関数かけよってなんか結構近い概念だと思うんだよな」

「うん。まあね、それはそうな気はする」
「とか、あと普通にやっぱJavaScriptとかだと最近もうforとかじゃなくてmapとか」
「うん」
「そういうので処理するじゃないですか」
「そうなんですね」
「なんかReactが特にそうかなって気がするんですけど」
「へえ」
「あれとかも要は関数型から来てる概念だし」

「はいはいはい」
「で、あとなんて言うんだろう。状態を書き換えないようにするみたいなのもやっぱ結構言われてるなと思ってて」
「うんうん」
「イミュータブルって言いますかね」
「はい。イミュータブルはよく言いますね」
「うん。最初にオブジェクト作ったらもうそれを書き換えるんじゃなくて、新しいオブジェクト生成して返しちゃえよみたいな」
「うん」
「あれとかも、考え方これ絶対関数型から来てるよなっていう」

「ああ、そうなんだ」
「うん」
「なるほど」
「っていう気がする」
「はいはい」
「あと変数の最大値を嫌うとか」
「うん」
「っていうので」

「保守性を高めるためになんだぐらいの解釈でしたけど。でもなんかいろんなところのプラクティス取った上で」
「うん」
「ってことなんだな、確かに」
「そう。で、そのへんが結構ミックスされてはいるんで」
「うん」
「これを深掘りしてったときに、どれくらい新しい発見があるのかはちょっと分かんなかったんですけど」
「はいはいはい」
「とはいえ、ね、結構コンフォートゾーンから外れた作業だったんで」

「うん」
「ためになりましたっていう」
「すごいですね。いや、ナイスチャレンジですわ、それは」
「というので、自分がその関数型やったときにモナドってなんやねんってなったんで」
「うん」
「今回例えたことによってより分かりにくくなった説もあるんですけど」
「いやいやいやいやいや、そんなことないですか」
「ちょっとすみません、本物の」

「うん」
「本物のモナドのほうがちょっと分かってないので」
「そっちのモナド迷子になってるね」
「その、なんだろうな、正しい理解できてんのか分かんないんですけど」
「うん」
「今日の話は理解できました」
「ああ、じゃあよかった」
「うん」

「このあとちゃんとモナドを見てみて」
「うん」
「復習したらなんかちゃんと知識定着するか、全然違うやんけってなるかのどっちかですね」
「そうっすね。全然違うやんけってなったらお便り送ってください」
「よろしくお願いします」
「はい。じゃあ、ライトアフタートークして終わろうかな」
「はい」
「最近ですね」

「うん」
「決意したんすよ」
「決意?」
「はい。人生を変えようと思って」
「のりさん、だいぶ去年も変えてましたけどね」
「いや、あのときは状況が変わっただけで」
「はい」
「内面が変わってなかったんすよ」

「ああ、なるほど」
「うん。状況が変わったことによって内面が今変わり始めてて」
「はい」
「その決心をしたのが先々週っていう感じなんすけど」
「はい」
「なんかこのまま延長線上で生きたら」
「うん」
「なんか良くないなって直感的に思ったんすよ」

「ほう」
「その思ったきっかけが」
「うん」
「マックのWebCMで」
「うん」
「去年M1で準決勝っていうか準優勝したドン・デ・コルテの渡辺銀次さんっていうのが出てる」
「はい」
「CMがありまして」

「はい」
「それを見たときに、なんか豊かな大人になりたいと思って」
「CMでそんなん言ってたんですね?」
「あ、そう、そうなんですよ」
「うんうんうん」
「これはちょっとリンク貼っておくんで見てほしいんですけど」
「すごいな」
「うん。で、豊かな人生ってなんだろうって思ったときに」

「うん」
「ChatGPTで自分の豊かな人生を言語化するのを手伝ってもらって」
「はい」
「いろいろとりあえず言語化しましたと」
「うん」
「で、これを達成するためには、これまでの延長線じゃだめだと」
「うん」
「普通の人になってしまうと」

「うんうん」
「っていうのに、急に切迫感を感じて」
「うん」
「あと会社の財務的にギリギリだったのもあって」
「うん」
「その2つがかみ合わさってですね」
「うん」
「マインドチェンジが起きまして」

「はい」
「3つのことを始めました」
「ほう」
「朝活」
「なんか読書してません、最近」
「はい」
「はい」
「スマホのクソゲー削除」

「いや、それは定期的にありますね、なんか」
「いや、今回は格が違う」
「はいはいはい。じゃあ、何消したんすか」
「全部」
「全部?」
「全部消しました」
「何があったんですか、クソゲーは」
「クソゲーすぎて名前が出てこないんです」

「はい」
「はい」
「でもいいですね」
「でも、どういうやつかっていうと」
「うん」
「なんかね、蛇みたいなウイルスをね、撃ちまくるやつっす」
「シューティングゲーム?」
「シューティングっぽいね」

「うん」
「シューティングっぽいわ」
「うんうん」
「と、変なバーベキューのパズル」
「ああ、はい。パズルは」
「うん」
「色揃えて消す系ですか」
「いや、食べ物揃えて消す系」

「ああ、一緒じゃないか、ほぼ」
「うん。食べ物揃えるやつっすね」
「はい」
「うん。消しました」
「どこでCM、見たことすらないよ、それ、CM」
「マジで?」
「はい」
「いや、絶対あると思うけどな」

「あんのか」
「うん。あと、3つ目が」
「はい」
「断酒」
「おお、断酒」
「はい」
「すごい、それは」
「断酒は自分ルールがあって」

「うん」
「家で飲まないだけ。飲み会は普通に行く」
「それめっちゃやりたい。素晴らしい」
「うん、飲み会は普通に行く」
「うん」
「そのときはちゃんと飲む」
「うん」
「でもそれ以外で無駄飲みしない」

「うんうんうんうんうん」
「っていうのをやりました」
「それ2週間前からっすか」
「2週間前から」
「はい」
「先週かもな、もしかしたら」
「先週?はい」
「うん。朝5時に起きて」

「うん」
「5AMクラブっていうYouTube見たんですけど」
「ほう」
「5時に起きると自尊心が高まると」
「うん」
「なぜなら、街が眠ってる間に自分だけ活動しているっていう優越感があるからだみたいな」
「うんうんうん」
「それを感じながらね」

「うん」
「朝は読書して」
「うん」
「で、6時ぐらい、ん?7時ぐらいか。から仕事を開始して」
「うん」
「で、夜はですね、もう10時になったら寝るようにするっていう」
「うんうんうん」
「のを今最近やってて」

「すごい」
「すごいね、精神的には豊かな状態になれてて」
「いいっすね」
「うれしいですっていう」
「朝活いいんっすよね。めっちゃ分かりますわ」
「めっちゃいい。でもね、その5AMクラブで見たやつはできなかった」
「なんですか」
「えっとね、朝の1時間まず確保しろと、5時に起きて」

「はい」
「で、何やるかっていうと、20分区切りで、まず最初の20分で筋トレをしろと」
「うん」
「で、その次の20分で内省する」
「うん」
「で、その次の20分で勉強するみたいな」
「20分、ああ、なるほどね。はい」
「そう。で、配分は多少変えてもいいんだけど、これがいいですよと」

「うんうん」
「言われてて。ほんとにね、起きた瞬間の筋トレが無理すぎて」
「無理ですね」
「毛細血管全部ぶっちぎれるんじゃないかと思って」
「うん」
「それだけはちょっとやめた」
「20分で筋トレできる人いんのかな」
「てか、朝起きて20分以内に動くことできないわ、俺」

「それ多分慣れですよ。分かんない。人によるのかな。僕も」
「うん」
「最近朝走って筋トレしてるんですけど」
「おお」
「5時半過ぎぐらいに起きて」
「うん」
「で、6時半に子どもを起こさなきゃいけないんで、それまでに筋トレ終わらして、シャワー浴びてって感じなんですけど」
「すげえな」

「うん。15分は走んないと筋トレできないです」
「あ、マジで?」
「うん。筋トレ無理」
「無理だよね」
「で、ジョギングも慣れるまで超きつかったっすね」
「そうだよね」
「うん」
「布団の上でプランクやってさ、5秒で諦めたもん」

「てか、なんでそんなすぐ寝れるとこでやるんすか」
「いや、違う。起きてすぐできるとこでやったんだよ。順番が逆だよ」
「筋トレしてすぐ寝れるとこでやってるじゃないですか」
「それはそうかもしれんけど」
「すごいっすね。なんで最近はジョギングしてる最中にのりさんの読書っていうSlackを見ますね」
「あ、そうそうそうそうそうそう」
「同じぐらいのときに順平もなんかやってるんすよね」
「そうだよね」

「うん」
「あいつ朝活っぽく見えるけど夜なんだよね、多分」
「あいつ夜ですね」
「うん」
「夜なのかな。夜でもないんじゃないですか」
「昼ぐらいか。16時間ならそうかも」
「16時ぐらいかな。16時間だからね」
「2時ぐらいだな」

「うん、昼過ぎぐらいなのかな」
「昼過ぎだね」
「うん」
「うん」
「いや、めっちゃいい。あと、断酒ってどうやってやりました?気持ちだけですか」
「いや、気持ちだけ、今」
「僕、どうやったらできるかなってすごい今悩んでて戦ってるんすけど」
「どんくらいで飲んでんの?」

「いや、週末だけ、毎週」
「ああ、はい」
「でも、ちょっとこれじゃあ、ここあえて宣言するんすけど、ゴールデンウィークは今実家帰省でしてて、実家で飲むからそれは置いといて」
「うんうんうん」
「こっから僕宣言するんすけど、断酒するために」
「うん」
「うわー、ビール飲みたい、ビール買おうっていうのを」
「うん」

「10回やめます」
「ああ」
「で、10回やめたらもう買わなくなるんじゃないかっていう仮説を持ってる」
「はいはいはい。ああ、そういうことか」
「うん」
「普通ノンアルなら飲むよ」
「あ、ノンアルなら別に僕も、はい」
「え、ああ、そうなんだ」

「それでもまだなんかあるんだ」
「なんかスーパードライ飲みたくなっちゃうんすよね」
「ああ、そういうことか。俺多分ノンアルでいいやってなっちゃうんだよね」
「そこまで持ってってほしい」
「これむずいな。これ最初からなってたな」
「そう」
「なんかね」
「あと、俺朝弱すぎてね、酒飲んだら多分睡眠の質下がると思ったらね、ちょっと飲むの怖くなる」

「僕もそれ思ってますよ」
「あれ?」
「全然。調子悪いし次の日」
「じゃあ台頭じゃん、もう今」
「酒飲むと調子悪いんすよね。調子悪いっていうか、なんだ、うん、調子悪いというか、なんか三角、コンディション丸じゃないみたいな」
「ああ、じゃあもう1工夫必要なんだ、なんか」
「そうなんすよね。だからちょっとゴールデンウィーク終わったら10回酒買うのやめてみるんで」
「買ってもいいけど捨てることっていうルールにしたら?」

「やばすぎるな」
「か」
「確かに。でもそれは買いたくなくなるな」
「でしょ?」
「うん」
「それってあえて金銭的ダメージを負うことによって」
「お金は別にどうでもいいんですけど、多分200円ぐらいだから」
「うんうんうん」

「もったいないなって気持ちになっちゃいますよね、やっぱね」
「ケースで買おうよ、じゃあ」
「やばすぎるな。いやー、ちょっとのりさん断酒してんだ。あんなにクラフトビール好きだったのに」
「そうなんです。それ言われたら急に飲みたくなってきたわ、最悪」
「いやー、ちょっと負けてらんないな」
「うん」
「まあ、ゴールデンウィーク終わったらやります」
「はい」

「はい」
「っていうので、ちょっと人生変えようと思って今やってるんで、効果が出たらいろいろ言っていきます」
「のりが実践した人生変わった3つのメソッドみたいなタイトルでエピソードを撮ってください」
「すごいな、クソYouTuberみたいな。クソYouTuberというか、なんだろうな」
「もう味しなくなってますよ、これ」
「ショート動画で。ショート動画でさ」
「はい」
「本人とか一切登場しないで」

「うん」
「生成AIで作った系の動画で」
「うん」
「ちょっと渋めのおじさんがしゃべってる系のやつだよね」
「あるある。そうそうそうそうそう」
「そうなるね」
「ある」
「それ作っていこうと思うんで」

「お願いします」
「はい。では、締めていきます」
「はい」
「この番組では皆様からの感想、ご意見、ご質問などをSNSのXで募集しております。ハッシュタグ、ひまじんプログラマーでポストしていただくと、我々がそれを探して見つけて、にんまりしたり、取り入れたりしていくので、皆様ぜひともよろしくお願いいたします」
「汚なきご意見を」
「お願いします。また、我々にもし直接お届けしたい質問とか感想がある場合は、番組のエピソード欄にあるGoogleフォームからお送りいただくと、お手紙が届くシステムとなっております。こちらもお気軽にご応募いただけたら、ご応募というか投稿いただけたらと思います。また、オンラインSlackコミュニティ、ひまプロ談話室というものも運営しております。こちらは今300名ちょっとの規模の団体となっておりまして、主には今日じゃあこういう勉強するとか、日々のつぶやきとか、そういうのがですね、ポンポンポンポン投稿されて、じわじわと盛り上がりを見せてるコミュニティでございますので、エンジニア友達見つけたいとか、ほかの人から刺激を受けたいという人はぜひともこちらもご応募ください」
「誰が、誰がというか、どんなことに周りの人気になってるんだろうなみたいなのも見てて楽しいので、ぜひ」
「ですね。個人的に結構助かってるのは、CVEが出たときに」

「うん」
「うわ、これ関係あるやつやっていうのが結構な確率であそこで気づくことが多いですね、僕」
「うん。確かに、確かに」
「はい。あれで焦ってセキュリティパッチ当てるみたいな」
「会社にそういう部署ないと取れないですよね、情報ね」
「そうなんですよ」
「うん」
「そういう意味ですごい助かってます」

「はい」
「また、この番組は各種ポッドキャストプラットフォームで配信しておりますので、参考になったよという方はですね、プラットフォームの評価欄から星を付けていただけると配信の励みになるので、こちらもぜひともよろしくお願いいたします」
「何卒」
「それではまた次回」
「バイバイ」
「初めて触ったMacBook。思い出がいっぱいのチーム開発。再起動したら直った。謎のバグ。僕たち」
「私たちは」
「卒業します」

「駆け出しエンジニアを卒業したあなたへ。ひまじんプログラマーの週末エンジニアリングレッスン、各種ポッドキャストで配信中」