What is

Reactive Programming?
2016/02/17
Sendai.swift 第一回 Reactive Programming in Swift
田中賢治
• 田中賢治(22)

• Swift/Objective-C

• iOS開発もうちょっとで4年目

• Qiita/GitHub/Twitter/etc…

(@ktanaka117)

• ブログ「田中、仙台に生きる」
自己紹介
最近ハマってるもの
ハッカーとかエンジェル投資家とか、サイバー犯罪とか。

技術的に深くて楽しい。坂井さんが人間味あって味わい深い。萌え。
What’s “Reactive”?
• 最近話題のReactive Programming

• Functional Reactive Programming(FRP)とかもあ
るけれど、定義としては別物かな?

• いろいろ読んだところ、考え方は交錯している
印象。要素はそれぞれ取り入れられている
What’s “Reactive”?
“Reactive”とは?
What’s “Reactive”?
reactive / riˈæktɪv /
	 【noun】反応性
	 【adjective】反応的な
What’s “Reactive”?
reactive / riˈæktɪv /
	 【noun】反応性
	 【adjective】反応的な
What’s “Reactive”?
“反応”
Reactive Manifesto
• Responsive

• Resilient

• Elastic

• Message Driven
リアクティブなアプリケーションに関する重要な4つの要素
Reactive Manifesto
• Responsive

• Resilient

• Elastic

• Message Driven
Responsive: 即応性
• リアルタイムな更新処理

• Web Socketなどによって実現

• モバイルだとUIの描画処理など

• エンドユーザーに素早くレスポンスを与える
• 「ふぁぼ」

• 「Google Docs」

• 検索条件の絞り込みなど
Responsive: 即応性
Responsive: 即応性
Twitterのふぁぼ
クライアントのUI描画はまず先に

行われる。
その後サーバーと通信し、

リクエストが失敗したらふぁぼは

取り消される。
Responsive: 即応性
Google Docs
複数人でのテキストの同時編集。

各クライアントでテキスト入力は

スムーズに行われ、他のクライアント

とは都度同期が取られていく。
良いUXが求められる世の中
Responsive: 即応性
Reactive Manifesto
• Responsive

• Resilient

• Elastic

• Message Driven
Resilient: 耐障害性
• 障害に直面しても即応性を失わない

• コンポーネントの切り分け

クライアントとサーバーの境目など

• サーバーにおいては冗長化なども含む
Resilient: 耐障害性
ServerClient
UserAction, Request
Response
Resilient: 耐障害性
Server
_人人人人人人_
> 突然の死 <
 ̄Y^Y^Y^Y^Y ̄
Client
Response
UserAction, Request
Resilient: 耐障害性
Server
_人人人人人人_
> 突然の死 <
 ̄Y^Y^Y^Y^Y ̄
Client
UserAction
Response
・クライアントのみでも正しく動くように見せる

・行なわれた処理はクライアントに保持し、障害

 回復時に同期処理する、など
コンポーネントがクライアントとサーバーで

切り分けられた状態
Resilient: 耐障害性
良いUXが求められる世の中
Reactive Manifesto
• Responsive

• Resilient

• Elastic

• Message Driven
Elastic: 弾力性
• ワークロードが変化しても即応性を保つ

• サーバーのオートスケール
Reactive Manifesto
• Responsive

• Resilient

• Elastic

• Message Driven
Message Driven: メッセージ駆動
• Observerパターン

(KVOとか)

• 送信者と受信者がそれぞれ独立したライフサイク
ルを持つ。非同期にやりとりを行う

=リソースの有効活用
即応性
即応性
これを根底に置く考えがReactiveの哲学であり、

様々な実装方法、手法、アプローチが行われる。



Functional Reactive Programmingとは、

これを関数型プログラミング的に実装していく

Reactive Programmingの一つのアプローチである。

What is reactive programming?