2015/12/16

PubSubって知ってますか?

って不意に聞かれて「あぁはい!かなり使ってました」なんて言ってしまったんだけど。
まぁ嘘では無い。というか懐かしい感じ。

実はだいぶ前にinfoScoopの開発にちょっと関わったことがある。スクリーンショットを見れば分かるが、ブラウザの画面内でガジェットというミニアプリみたいなのがいくつも動くんだけど、それらはPubSubで情報をやり取りさせて連携して動かすことができた。

ガジェット一つ一つは独立していて、Publish(発信)と、Subscribe(受信)で動作する。
大きな特徴はそれぞれのガジェットがお互いを全く、本当に全然!知らなくてもちゃんと動くという気持ち悪い仕組み。
発信する時は普通のJson文字列をPublish({xxx})ってやると他のガジェット全部で{xxx}が受信されてSubscribeが動く。
確かチャンネルとかなんかを決めて無駄に動かないようにはするんだけど。でも基本的な仕組みというか概念は、発信側は相手を指定せず全体に発信し、受信側は神の啓示のごとく突然受信する、みたいな感じ。出版・購読モデルというらしい。
Publish!ってやると全部に届けてやるような裏方で動く仕組みがもちろん必要だけど、infoScoopも含めてPubSubで何か作るって場合、その仕組みは用意されているので利用するだけだ。

なんで今急にそんなこと聞かれたかというとReduxを使ったサンプルアプリを作ってみていて、どうもReduxでのアプリの作り方が理解できなかったので、
ちょうど「React-Reduxで開発してみた」みたいな発表があったので聞きに行ってみたのだ。
どうでもいい話だが発表枠が10分しかなくて、あまり深い話は無いだろうなと思ってたんだけど、なんと場所を間違えて10分遅刻してしまったのだ。もう発表終わったんだろうな、と暗澹たる思いで会場に入ったら「でわ、はじめます」という感じでちょうど始まるところだった。なぜか全体のスケジュールが10分遅れになったらしい。
その最初の10分に何があったのか興味があるが。。

で10分の発表ではやはり深い話は無かったがgulpとか使った最近のJavaScript開発環境の話などがちょっと面白かった。でその後「Redux難しく無いですか?」って直接聞きに行ったときに「MVCだと思うと理解できないかもしれないけど、PubSubだと思うと分かりやすいかもです。・・・あ、PubSubって知ってますか?」って言われた。
全くその発想は無かったんだけど、確かにただのobjectをdispatch(obj)ってやるのと、受け側はそのobjectを受け取って自分に関係するものだった場合だけ処理する、ってやりかたがPubSubだと思うと分かりやすいかも。
Fluxを調べるときはPubSubのことも思い出せって書いておいてくれればもっと早く理解できたかもしれないのに。まぁ、そう書いたところでPubSubってそんなにメジャーじゃなさそうだし結局「PubSubって知ってますか?」ってことになっちゃうんだけど。