
2025.02.19
アルペンの“店舗の現場”までデータドリブンを浸透させる試み 生成AI×kintone活用の3つのポイント
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.
以上です。
(会場拍手)
2025.03.07
部下へのフィードバックで最初に伝える一言 何度も指摘せずに済むマネジメントの秘訣
2025.03.04
チームが協力しないのはマネジメントの問題 “協働意識”を高めるマネージャーの特徴とは?
2025.03.05
「一人前のエンジニア」になるために必要なこと 未経験からフルスタックエンジニアへの道筋
2025.01.28
適応障害→ニート→起業して1年で年収1,000万円を達成できたわけ “統計のお姉さん”サトマイ氏が語る、予想外の成功をつかめたポイント
2025.01.07
1月から始めたい「日記」を書く習慣 ビジネスパーソンにおすすめな3つの理由
2025.03.03
大企業で成功したマネージャーが中小企業で苦戦する理由 “指示待ち”部下を主体的に動かす方法
2025.03.05
「はい、わかりました」と返事をした部下が“かたちだけ動く”理由 主体性を引き出すマネジメントの鍵
2025.03.06
細かく指示出し、何度も確認…部下に悪影響をもたらすマネジメント 過干渉にならない「適度な管理」と任せるコツ
2015.11.24
人は食事をしないとどうなるか 餓死に至る3つのステップ
2025.03.12
新規事業を継続するかどうかを見極める2パターンの判断軸 会社の規模別「撤退基準」の設け方