
2025.02.06
ポンコツ期、孤独期、成果独り占め期を経て… サイボウズのプロマネが振り返る、マネージャーの成長の「4フェーズ」
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.02.06
すかいらーく創業者が、社長を辞めて75歳で再起業したわけ “あえて長居させるコーヒー店”の経営に込めるこだわり
2025.02.03
「昔は富豪的プログラミングなんてできなかった」 21歳で「2ちゃんねる」を生んだひろゆき氏が語る開発の裏側
2025.02.03
手帳に書くだけで心が整うメンタルケアのコツ イライラ、モヤモヤ、落ち込んだ時の手帳の使い方
2025.02.04
日本企業にありがちな「生産性の低さ」の原因 メーカーの「ちょっとした改善」で勝負が決まる仕組みの落とし穴
PR | 2025.02.07
プロジェクトマネージャーは「無理ゲーを攻略するプレイヤー」 仕事を任せられない管理職のためのマネジメントの秘訣
2025.02.05
「納得しないと動けない部下」を変える3つのステップとは マネージャーの悩みを解消する会話のテクニック
2025.01.07
1月から始めたい「日記」を書く習慣 ビジネスパーソンにおすすめな3つの理由
2025.01.30
2月の立春までにやっておきたい手帳術 「スケジュール管理」を超えた、理想や夢を現実にする手帳の使い方
2025.02.06
落合陽一氏や松尾豊氏の研究は社会に届いているか? ひろゆき氏が語るアカデミアの課題と展望
2025.02.05
エンジニアとして成功するための秘訣とは? ひろゆき氏が語る、自由な働き方を叶えるアプリ開発とキャリア戦略