GitBookObservableのライフサイクルRxJSのユースケースの前に、まず理解しておかなくてはならない前提知識を学びます。2種類のObservableObservableはいくつかの基準で、いくつかの種類に分類されることが多くあります。Observableは購読者がいるときだけストリームを流します。このように、Observableという単純な型だけでは表現できない振る舞いの違いは、Observableを扱うときには常に意識する必要があります。氏によるブログを参照してください。違いについて、その特徴と注意点を解説します。有限のObservableAngularアプリケーションでもっともよく目にするObservableといえば、HttpClientのメソッドから返されるHTTPレスポンスを表現したObservableでしょう。メソッドのサンプルコードです。有限のObservableです。有限なObservableは、内包した非同期処理の終了とともに自動的に完了するObservableです。フィールドに渡したコールバック関数が呼び出され、そのObservableを購読しているすべてのリスナー関数は解放されます。有限のObservableは、開始と終了がある非同期処理と1:1で対応します。非同期タスクを抽象化するためのObservableです。多くの場合、有限のObservableはColdなObservableでもあります。購読に合わせてタスクを開始し、必要な値をストリームに流したあと、タスクの終了をもってObservableが完了するのです。有限のObservableとPromiseは本質的に似ていますが、機能的な面で次のような違いがあります。よって中断できるPromiseは完了時に一回だけ値を流せるが、Observableは何回でも値を流せるある処理が非同期タスクであると定義したときに、PromiseとObservableのどちらを返すようにするか迷うかもしれません。依存ライブラリとしてRxJSを前提とできるならば、Observableで実装しておくことが推奨されます。メソッドで簡単にPromiseへ変換できるからです。メソッドの例は、次のように書き換えることもできます。メソッドによって、ObservableをPromiseに変換しています。メソッドはObservableが完了した時点での、最後に流れた値をもとに値を解決します。複数の値を流すObservableでは、途中の値は無視されることに注意しましょう。Angularのライブラリでは多くの場面でObservableを使って機能を提供していますが、これはアプリケーションも同じようにObservableを多用することを強制しているわけでは決してありません。ライブラリ間の共通インターフェースとして、Promiseよりも多機能なObservableを利用しているだけです。あなたがアプリケーションの開発で利点を感じなければ、Promiseに変換しasync/await構文などの組み合わせることで、TypeScriptとしてシンプルなソースコードを実現してよいのです。これがRxJSに振り回されずにAngularアプリケーションを開発する上でもっとも大切な考え方です。無限のObservable一方で、完了せず無限に生きるObservableもあります。Observableが、もっとも典型的なものです。次の例は、ルーティングの完了イベントを購読して、ナビゲーション後のURLを取得するサンプルコードです。無限のObservableです。無限なObservableは、自動的に完了することのないObservableです。購読者の有無にかかわらず発生するイベントを流し続けます。イベントストリームを抽象化するためのObservableです。addEventListenerメソッドは無限のObservableととてもよく似たものです。コールバックは実行されません。無限のObservableはDOMのイベントリスナーと同じように、購読を終えるための購読解除が必要になります。購読者よりもイベントストリームのほうが長く存在するため、購読したままにしておくと不要なリスナー関数がメモリリークの原因となるうえに、予期せぬリスナー関数の呼び出しがバグを引き起こす可能性もあります。非同期タスクを抽象化した有限のObservableと、イベントストリームを抽象化した無限のObservableがあることを学びました。ここからはそれぞれの注意点を整理しておきましょう。Observableが完了するまで呼び出されません。コールバックは呼び出されません。購読解除の必要性Observableに紐づくSubscriptionは、Observableが完了すると自動的に購読解除されます。有限のObservableが完了するまでの期間が十分に短い場合、リスナー関数を参照し続けることによるメモリリークは発生しません。そのため、明示的に購読解除をする必要性はありません。一方で、無限のObservableに紐づくSubscriptionは自動的に購読解除されることがありません。そのため先述のとおり明示的に購読を解除する必要があります。使用できるオペレーターの違いRxJSが提供するビルトインオペレーターの中には、Observableの完了を必要とするものがあります。無限のObservableには使えないオペレーターがあるということです。次のようなオペレーターです。オペレーターと似ていますが、値が更新されるたびに再計算します。無限のObservableに対して使用できます。このように、多くの場合で注意が必要なのは無限のObservableだけです。そのため、無限のObservableをライブラリから提供する際には、それが無限であることをわかりやすくしておくことが重要です。実は、Angularの公式APIにおいて、getterから返されるObservableは原則的に無限のObservableです。プロパティはその一例です。メソッドとして実装されています。getterによるObservableの取得はすでに存在するストリームであるという印象を与え、メソッド呼び出しは非同期タスクを開始する印象を与えます。サードパーティのライブラリを作る際や、アプリケーションの実装の中でも、Observableを提供するAPIはこの慣習に従っておくことをおすすめします。GitHubContents2種類のObservable有限のObservable無限のObservableそれぞれの。