2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
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.12.20
日本の約10倍がん患者が殺到し、病院はキャパオーバー ジャパンハートが描く医療の未来と、カンボジアに新病院を作る理由
2024.12.19
12万通りの「資格の組み合わせ」の中で厳選された60の項目 532の資格を持つ林雄次氏の新刊『資格のかけ算』の見所
2024.12.16
32歳で成績最下位から1年でトップ営業になれた理由 売るテクニックよりも大事な「あり方」
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
PR | 2024.12.20
モンスター化したExcelが、ある日突然崩壊 昭和のガス工事会社を生まれ変わらせた、起死回生のノーコード活用術
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.18
「社長以外みんな儲かる給与設計」にした理由 経営者たちが語る、優秀な人材集め・会社を発展させるためのヒント
2024.12.17
面接で「後輩を指導できなさそう」と思われる人の伝え方 歳を重ねるほど重視される経験の「ノウハウ化」
2024.12.13
ファシリテーターは「しゃべらないほうがいい」理由 入山章栄氏が語る、心理的安全性の高い場を作るポイント
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
Climbers Startup JAPAN EXPO 2024 - 秋 -
2024.11.20 - 2024.11.21
『主体的なキャリア形成』を考える~資格のかけ算について〜
2024.12.07 - 2024.12.07
Startup CTO of the year 2024
2024.11.19 - 2024.11.19
社員の力を引き出す経営戦略〜ひとり一人が自ら成長する組織づくり〜
2024.11.20 - 2024.11.20
「確率思考」で未来を見通す 事業を成功に導く意思決定 ~エビデンス・ベースド・マーケティング思考の調査分析で事業に有効な予測手法とは~
2024.11.05 - 2024.11.05