全体概要

本セミナーは、「Reactive Programming(リアクティブ・プログラミング)」という概念を多角的に解剖し、その歴史的背景、技術的基盤、実装事例、そして思想的な骨格を体系的に提示するものです。

現代のソフトウェア開発が直面している本質的な問いは、「なぜイベント処理のコードはこれほど複雑で、バグが多いのか」という点にあります。Adobeのデスクトップアプリケーションのコードの3分の1がイベントハンドリングに費やされ、その半分のバグがそこに集中するという事実 [p.3] は、従来のプログラミングモデルの限界を端的に示しています。

Reactiveプログラミングの歴史は、スプレッドシートのような身近なアプリケーションにまで遡ります [p.5]。セルの値が変わると関連するすべての式が自動的に再計算されるという振る舞いは、まさにリアクティブの本質です。現代においてこの潮流を推進する力は二つあります。一つはWebのUI、すなわちユーザーが「すぐに反応する」体験を求めるResponsive UIへの欲求であり、もう一つはCPUのマルチコア化とクラウドへの大規模分散処理という全く異なる文脈での非同期・イベントドリブン処理への志向です [p.6]。

この文脈で画期的な役割を果たしたのが、Microsoftが2010年頃に公開した「Rx(Reactive Extensions)」です [p.6]。Rxは、イベントのソースを抽象化した「Observable」を中心概念として置き、LINQスタイルの検索演算子と組み合わせることで、非同期・イベントベースのプログラムを関数の合成によって記述する新しい手法を切り開きました。Rxはその後オープンソース化され、JavaScript、C++、Ruby、Pythonへ移植されるとともに [p.7]、NetflixがJavaへ移植したRxJavaを用いて大規模APIシステムを書き換えることに成功し、大規模実システムでの有効性を実証しました [p.7, p.83]。

セミナーの最後には「Reactive Manifesto」を精読し、イベントドリブン・スケーラブル・レジリエント・レスポンシブという四つの特質が相互に依存しながら一つの設計思想を形成することを明らかにします [p.4, p.215]。本セミナーは、WebフロントエンドからAndroidアプリ、サーバーサイドのAPI設計に至るまで、Reactiveというパラダイムがソフトウェア開発の全領域を横断する普遍的な思想であることを論証します。

講義のロードマップ

ここでは、セミナーの講演資料がどのようなパートから構成されているかを示します。また、それぞれのパートのポイントを紹介します。

■ Part I: WebとReactiveプログラミング

WebのUI開発とサーバーサイドのI/O処理という二つの文脈から、なぜ現代のプログラミングが「非同期」と「イベントドリブン」へと向かわなければならないのかを論証します。スプレッドシートを原点とし、Meteor、AngularJS、Polymer.dartという具体的なWebフレームワークの設計を通じて、ReactiveなUI開発の実像を示します [p.12]。

■ Part II: Reactive Extensionの基礎

MicrosoftのRxが依拠する数学的・構造的基盤を解説します。LINQにおける`IEnumerable`(pull型)とRxにおける`IObservable`(push型)の「双対性」を核心として、ObservableとObserverのインターフェース設計を明らかにします。さらにRxJS・RxJavaを用いたDOMイベント処理・非同期処理の実装パターンを具体的なコードで示します [p.78]。

■ Part III: Observableを活用する

Observableのストリームを変形・加工する合成可能な演算子群を体系化し、それらを組み合わせてNetflixの大規模APIを再構築した実例を詳細に解説します。関数の小さな合成から大規模システムを構築するという関数型アプローチの有効性を、現実のシステムで実証します [p.140]。

■ Part IV: Reactive Manifesto

2013年9月に公開されたReactive Manifesto(version 1.1)を精読し、現代のアプリケーションに求められる四つの特質—Event-driven(イベントドリブン)・Scalable(拡張可能)・Resilient(耐障害性)・Responsive(応答性)—の定義・意義・実現手段を体系的に解説します [p.209, p.214]。