2024.10.21
お互い疑心暗鬼になりがちな、経営企画と事業部の壁 組織に「分断」が生まれる要因と打開策
Functional Reactive Programming(全1記事)
リンクをコピー
記事をブックマーク
f氏:こんばんは! fです。僕は話し声がうるさいとよく言われるんですが大丈夫ですか? うるさかったらマイクなしでやるんですけど。いつも耳栓を持っていまして「うるさい」と言う人には配っています(笑)。今日はそんなに手持ちがないので……。
僕、今日のFRPの発表は2年前にLispのMeet upでしていて「話がぜんぜんわからん」と言われて1分で強制終了をさせられる痛い目にあったことがあります。それから2年越しでいろいろ学びました。ちょっと大人になったというか、結婚指輪もしていますし、実は今日は最愛の人が会場にいまして。MacBook Proなんですけど……。
(会場笑)
という感じで、いい感じに滑って1分で強制終了をさせられたんです。FRPはみなさんご存知ですか? Functional Reactive Programmingの略だということを聞いたことある人?
(会場挙手)
ほとんど聞いたことがある。それで、実際にFRPをやっている人はいらっしゃいます?
(会場挙手)
おお、あとでTwitterで話しましょう!(笑)。Reactive Programmingを実際にやっている人はいます? RxJSとかをつらつらと話していきます。ソースの設計なんですね。
なので、なんでそもそもReactive Programmingがいいのかを最初にしたいと思いますが、みなさんは関数型のプログラマだからforループは使いますか? 最近ここ1週間でforループを書いたという人?
(会場挙手)
けっこういますね。でもみなさんはmap、filter、reduceとかですよね? map、filter、reduceを使ったという人?
(会場挙手)
ほとんどですね。forループよりもmap、filter、reduceのほうがいいでしょ? というのはみなさん勘としてお持ちでしょうけどReactive Programmingで、map、filter、reduceというのは、要はテストやシーケンス型のものをmap、filter、reduceするじゃないですか。Reactive Programmingはmap、filter、reduceをする対象が時間軸のEventやBehaviorと言われるものです。
要はストリーミングだと思っていただけるといいんですけど、UIを作るときにクリックがいっぱいきたり、ボタンを誤操作されてテキストを入力されたり、入力がいっぱい来ますよね。それを全部ストリームだと見て、いろんな値が入ってきます。それに対して時間のリストに対してmapやfilterやreduceができるんですよ。
これはけっこう画期的だと思っています。だって普通の書き方をしていたら一つひとつクリックされたらifで処理する……さっきのアフターモデルじゃないですけど、その何かが起こったときにそれに対して、forループみたいな感じで「どうしましょう」となっちゃうわけですね。
だったらmap、filter、reduceで全部やったほうがいいので、僕はReactive Programmingをやるしかないと思っています。しかし、さっきのSimple Made Easyの話になって、今あるReactive ProgrammingのライブラリでHaskellの方たちがけっこういらっしゃるみたいですけど、超ラッキーですね。FRPの素晴らしいライブラリがいっぱいある。
でもHaskell以外の言語の人たちは残念ながら何もないんですよ。なぜかと言うとFRPとReactive Programmingは何がどう違うのか、Functionalが付いただけなんですけど、どっちもFunctionalなんですね。
Functional Reactive Programmingと呼ぶためには必要なことが2つあります。continuous timeとDenotational semantics、この2つがあることがFunctional Reactive Programmingの定義なんです。
これと違うことを言うと、いろんな人に怒られます。Functional Reactive Programmingのcontinuous timeとは何か。例えば温度や時間は常に値があるじゃないですか。常に値があるものってcontinuousですよね。今もこの部屋は何度という値があるし、何時何分何秒という時間もあるじゃないですか。それに対してクリックというのは散発的なもので「クリックしました」とか1回1回散発的に起こるものなんですよね。
これはReactive Programmingだと、両方とも同じに扱っちゃっているんですよ。これがさっき言ってたSimple Made Easyで、離散的なものとcontinuousなものを一緒くたに扱っちゃっている。コンプレクトしている感じです。そこをコンプレクトの反対でリコンプレクトしてほしいんです。それをするのが、まず1つ。
もう1つが、さっきのDenotational semanticsがあります。Schemeだとすごく数が少ないコアな関数から全部の言語を定義するんですね。それと同じでFunctional Reactive Programmingは、たった9つのオペレーターで全部が定義できちゃうんです。Reactive Programmingのドキュメントを見ていただければわかるんですけど、たくさん関数があるんですよ。100とかあって「そんな覚えられなくね?」みたいな。覚えられなくはないんですけど、全部ぐちゃぐちゃなんですよ。……言い方が適当ですね。
(会場笑)
FRPだと、数学的にここの9個だけを決めれば、全部見つけきれる証明がされていて、全部できる。美しくないですか? とくにHaskellの人は美しいと思うんじゃないでしょうか。僕はそれをやりたかった。Haskellの人には申し訳ないですけど、Haskellじゃなくて他の言語でやりたかった。なので、さっきの星1つのライブラリを2年前から作っています。なのにまだ星1つで……。
そのライブラリを作り始めたときに、僕はコワーキングスペースでよく仕事するんですけど、コワーキングスペースで人から声を掛けられたりするのがすごいイヤなので、僕はいつもこうやって……。
(文字の書かれたベストを取り出す)
「Do not disconnect」とするんですね。ヤフーの「LODGE」というコワーキングスペースなんですけど、これを付けていると本当に誰も話してこないんですよ。たまに「talk to me」を付けるんですが、これを付けても誰も話掛けてこないんです。
(会場笑)
というのをこれを付けてがんばって作っておりました。こんな感じですかね。
Denotational semanticsについてもうちょっとだけ話します。Denotational semanticsはモナドやファンクタなどを使うと、英語で言うとinstance meaning codes meaning instanceがあって、それがDenotational semanticsと出てくるんです。
それは何かと言うと、モナドやファンクタなどを意識して言語を作ったりすると、意味もすごく明瞭化されるんです。そういうことを考えないで作っちゃうとRxJSみたいになります。僕はFRPをずっと推しているんですけど「モナドとか覚えないと使えないとかありえなくね?」みたいに思われて、ぜんぜん広まらないという感じです。
最後に、2年前に「お前の話がぜんぜんわからないから1分半で終了!」と言われた人に「スティーブ・ジョブズの講演をYouTubeでよく見ろ」とアドバイスをされたので、今日はそのスティーブ・ジョブズの話をしようと思っています。
その前に僕、さっきMacを結婚指輪と言いましたけど、ずっとプログラミング言語を開発していて無職でニートなので、彼女から別れられてしまいました。……ちょっとこれはおもしろい話のはずだったんですけど。
(会場笑)
普通に同情だけされてドン引きされちゃった。という感じですけど、僕がみなさんに言いたいのはスティーブ・ジョブズの「Stay hungry, stay foolish」という有名な言葉がありますよね。僕のこれは結婚指輪じゃなくて非婚指輪と言って「僕はシングルで生きていくんだ」と「誰も寄って来るな」と言っているんですけど、そんなのを付けなくても誰も寄って来ないから安心しろということがこの話です。
(会場笑)
最後に、Stay hungry, stay foolish,stay single.Thank you very much.
以上です。
(会場拍手)
2024.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.20
成果が目立つ「攻めのタイプ」ばかり採用しがちな職場 「優秀な人材」を求める人がスルーしているもの
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.21
40代〜50代の管理職が「部下を承認する」のに苦戦するわけ 職場での「傷つき」をこじらせた世代に必要なこと
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.19
がんばっているのに伸び悩む営業・成果を出す営業の違い 『無敗営業』著者が教える、つい陥りがちな「思い込み」の罠
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2024.11.15
好きなことで起業、赤字を膨らませても引くに引けない理由 倒産リスクが一気に高まる、起業でありがちな失敗