アプリコンテキストの使い方
Published: 2024-07-09 06:49:29

PubNub[App Contextは](https://www.pubnub.com/products/app-context/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)、User、Channel、およびMembership情報のサーバレスストレージメカニズムを提供することで、複雑なリアルタイム機能の開発を簡素化します。 App Contextはデータが変更されるたびにイベントをトリガーし、アプリをリアルタイムで更新できるようにします。また、保存されたデータは[Illuminate](https://www.pubnub.com/products/illuminate/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)、[Functions](https://www.pubnub.com/products/functions/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)、その他のPubNubサービスで使用でき、よりスマートな意思決定を行うことができます。 また、[BizOps Workspaceを](https://www.pubnub.com/how-to/manage-users-and-channels-with-bizops-workspace/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)使用することで、コード不要の直感的なインターフェイスでこのデータを管理できます。

アプリコンテキストとは？
------------

[アプリコンテキスト](https://www.pubnub.com/docs/general/metadata/channel-metadata?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)（旧称オブジェクト）により、次のことが可能になります：

-   アプリケーション内のユーザーとチャネル、およびそれらの間の関係に意味を持たせます。
-   すべてのエンティティのメタデータをサーバーに保存し、クライアントにグローバルな真実のソースを簡単に提供できます。 Userは人間を表す必要はなく、代わりにデバイスのステータスをUserオブジェクトに保存するのが一般的です。
-   オブジェクトの値が変更されると、即座にリアルタイムのイベントを受け取ることができる。

どんなアプリケーションでも App Context を使用することができますが、[チャットソリューションを](https://www.pubnub.com/solutions/chat/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)作成する開発者には特に人気があります。

App Context は、[ユーザーと](https://www.pubnub.com/docs/general/metadata/users-metadata?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja) [チャンネルに](https://www.pubnub.com/docs/general/metadata/channel-metadata?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)推奨されるフィールドのセットと、それらの間の[メンバーシップに](https://www.pubnub.com/docs/general/metadata/membership-metadata?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)推奨されるフィールドを提供します。 これらのフィールドのほとんどはオプションなので、どのフィールドを入力するか選択したり、独自のカスタムフィールドを提供することができます。

![Diagram showing user management, memberhip, channel management](https://www.pubnub.com/cdn/3prze68gbwl1/5ICbXWgNTJNc5kXAAQ4qJI/40b24d228d9ed97e17e47b027469bcdf/app_context_diagram.png "How-to - BizOps Workspace Manage Users and Channels - Image 01")

App Contextの使用例
---------------

前述の通り、App Context はチャットソリューションを作成する開発者に特に人気がありますが、様々なユースケースで使用することができます：

-   **チャット：**ユーザー情報（名前、プロフィール写真、「休暇中」ステータス、役職）、チャンネル情報（アイコン、説明、視聴者）、ユーザーの役割を保存し、チャンネルごと、ユーザーごとに最後に読まれたメッセージを追跡します。
-   **スポーツ、メディア、エンターテイメント**ライブ投票、ライブトリビア、リアルタイム入札、商品やプロモーションのCTA（コール・トゥ・アクション）オーバーレイ。
-   **ゲーム**プレイヤーレベル、獲得ゲーム、バッジを含むリアルタイムのプレイヤー統計、リーダーボードのトラッキングと管理
-   **その他**ユーザー不在/アクティブステータス、不正検出のためのユーザー信頼スコア、ユーザー位置追跡、バッテリー残量や最後のセンサー読み取り値などのIoTデバイスステータス

アプリコンテキストを有効にする方法
-----------------

App Contextは、以下の手順で有効にできます：

1.  [管理者ポータルに](https://admin.pubnub.com/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)ログインする。
2.  ポータルの左側にある「Apps（アプリ）」タブをクリックします。
3.  アプリケーションをクリックします。 このアプリケーションのキーセットページが表示されます。
4.  まだ作成していない場合は、「Create New Keyset」ボタンをクリックして新しいキーセットを作成します。 キーセットの設定ページが表示されます。
5.  スライダーをクリックしてApp Contextを有効にします。
6.  **Bucket Region（バケット領域**）の設定は、データが保存される領域です。 キーセットの変更を保存した後は、このリージョンを変更できないことに注意。
7.  **User Metadata Eventsと** **Channel Metadata Events**の設定が有効な場合、後述するように、データベースにデータが設定または削除されると、ユーザとチャネルのイベントがトリガされます。
8.  **メンバーシップ・イベント**\]設定が有効な場合、後述するように、メンバーシップが追加、更新、または削除されると、メンバーシップ・イベントがトリガされます。
9.  残りのオプションはこの記事の範囲外ですが、詳細については[App Contextのドキュメントを](https://www.pubnub.com/docs/general/metadata/basics#configuration?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)参照してください。
10.  **Save Changesを**クリックして、更新された変更を保存します。

ユーザーアプリコンテキスト
-------------

新しいユーザーがあなたのアプリケーションに登録されると、おそらく外部のIDプロバイダを介して、PubNubに対してそのユーザーを一意に識別する何らかの方法があるでしょう。 これは、ユーザーのクライアントがPubNub SDKを初期化するために使用する[ユーザーID](https://www.pubnub.com/docs/general/setup/users-and-devices?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)です。 PubNubユーザーIDは、同じユーザーを識別するためにソリューションの他の場所で使用するIDと同じではないかもしれないので、'外部ID'フィールドでそれを追跡しておくことをお勧めします。

User Name、Email、Profile URLは説明の必要はありませんが、App Context内にこれらのフィールドを保持する利点は、ユーザーがこれらのフィールドのいずれかを変更した場合、当社のすべてのSDKでサポートされているApp Contextイベントを使用して、すべてのリスニングクライアントに変更をスケールで伝播できることを意味します。

### App ContextでUser representationを作成するには？

App Context Userを作成するには、2つの方法があります。

1.  PubNubの管理ポータル内にある[BizOps Workspaceを](https://www.pubnub.com/docs/bizops-workspace/basics?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)使用してユーザーを作成、管理できます。 これはコードを必要とせず、別記事で例を挙げてプロセスを説明しています：[BizOps Workspaceでユーザーとチャンネルを管理する方法](https://www.pubnub.com/how-to/manage-users-and-channels-with-bizops-workspace/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)
2.  ユーザを作成するためのAPIは各SDKを通じて公開されています。 例えば、チャット[SDKの](https://www.pubnub.com/docs/chat/chat-sdk/overview?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)['createUser()](https://www.pubnub.com/docs/chat/chat-sdk/build/features/users/create?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)'メソッドは、JavaScriptの[setUUIDMetadataを呼び出して](https://www.pubnub.com/docs/sdks/javascript/api-reference/objects#set-user-metadata?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)ユーザーを作成します。 チャットSDK以外のSDKを使用している場合、App Contextデータを変更するための専用APIが提供されています。JavaScriptの[setUUIDMetadata](https://www.pubnub.com/docs/sdks/javascript/api-reference/objects#set-user-metadata?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)APIについてはすでに触れましたが、[Java](https://www.pubnub.com/docs/sdks/java/api-reference/objects?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)、[Swift](https://www.pubnub.com/docs/sdks/swift/api-reference/objects?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)、[Kotlin](https://www.pubnub.com/docs/sdks/kotlin/api-reference/objects?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)、[Python](https://www.pubnub.com/docs/sdks/python/api-reference/objects?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)、[Unityなど](https://www.pubnub.com/docs/sdks/unity/api-reference/objects?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)、私たちのすべてのAPIに同等のものがあります。

チャンネルアプリのコンテキスト
---------------

PubNubはユーザーがチャンネルを購読または公開するたびに自動的にチャンネルを作成しますが、チャンネルはおそらくアプリケーションにとって意味のあるものを表しています。例えば、チャットアプリでは、通信にチャンネルを使用するグループチャットがあるかもしれませんし、ライブイベントでは投票を管理するために専用のチャンネルを使用するかもしれません。

チャネルに App Context を指定すると、そのチャネルに関連する任意のメタデータが保存・更新され、オプションでその更新がすべての関係クライアントに伝搬されます。 チャネルに 'ユーザ A とユーザ B のチャット' などの名前を付けることができ、チャネルがドキュメントの保存に関連している場合は、カスタムの 'URI' フィールドで追跡することができます。

### App Contextでチャネルを作成するには？

Usersと同様に、App Context Channelを作成するには2つの方法がある。

1.  チャンネルは[BizOps Workspaceを使って](https://www.pubnub.com/docs/bizops-workspace/basics?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)作成・管理できる。 これはコードを必要とせず、別記事で例を挙げてプロセスを説明している：[BizOps Workspaceでユーザーとチャネルを管理する方法](https://www.pubnub.com/how-to/manage-users-and-channels-with-bizops-workspace/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)
2.  チャネルを作成するためのAPIは、各SDKを通じて公開されています。 例えば、['Create](https://www.pubnub.com/docs/chat/chat-sdk/build/features/channels/create?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)channel'メソッドのファミリーは、JavaScriptの[setChannelMetadata()](https://www.pubnub.com/docs/sdks/javascript/api-reference/objects#set-channel-metadata?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)を呼び出します。 チャットSDK以外のSDKを使用している場合は、[JavaScript](https://www.pubnub.com/docs/sdks/javascript/api-reference/objects#set-channel-metadata?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)、[Java](https://www.pubnub.com/docs/sdks/java/api-reference/objects?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)、[Swift](https://www.pubnub.com/docs/sdks/swift/api-reference/objects?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)、[Kotlin](https://www.pubnub.com/docs/sdks/kotlin/api-reference/objects?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)、[Python](https://www.pubnub.com/docs/sdks/python/api-reference/objects?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)、[Unityなど](https://www.pubnub.com/docs/sdks/unity/api-reference/objects?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)、アプリコンテキストデータを変更するための専用APIが提供されます。

メンバーシップApp Context
------------------

ユーザとチャネルの両方にApp Contextを定義したので、ユーザがチャネルの['メンバー'](https://www.pubnub.com/docs/general/metadata/membership-metadata?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)であるかどうかを指定することで、2つの関係を定義することができます。

ユーザーがチャンネルに参加すると、同じチャンネルの他のメンバーに関するアップデートを受け取ることができる。ユーザーが`参加`したり`脱退したりした`ときや、そのユーザーのApp Contextが更新されたとき（例えば、ユーザーが自分の名前を更新したとき）にはいつでも通知を受け取ることができる。

これは、特にチャットアプリの開発者にとって、**多くの価値を提供する強力な**メカニズムです。 App Context を使用しない場合、すべてのユーザーを自分で追跡し、そのユーザーがどのチャネルのメンバーであるかを追跡し、そのユーザーが参加または退会したときに同じチャネルの他の全員に通知する必要があります。 この課題は直線的にスケールしないため、ソリューションのユーザーが増えれば増えるほど、この情報をすべて一元管理しようとするのは難しくなります。

App Contextを使用することで、チャットクライアントが内部状態を維持するために必要なすべての情報が提供され、PubNub[Access Managerで](https://www.pubnub.com/docs/general/security/access-control?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)そのデータを完全に制御して不正アクセスを防ぐことができます。

### メンバーシップの作成方法は？

ユーザーやチャンネルと同様に、メンバーシップを作成するには2つの方法があります。

1.  メンバーシップは、[BizOpsワークス](https://www.pubnub.com/docs/bizops-workspace/basics?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)ペースを使用してコードを記述することなく作成および管理できます。 詳細については、ドキュメントの「[メンバーシップの管理](https://www.pubnub.com/docs/bizops-workspace/channel-management#manage-membership?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)」セクションを参照してください。
2.  チャネルを作成するためのAPIは、各SDKを通じて公開されています。 例えば、['Create](https://www.pubnub.com/docs/chat/chat-sdk/build/features/channels/create?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)channel'メソッドのファミリーは、JavaScriptの[setMembershipsを隠れて](https://www.pubnub.com/docs/sdks/javascript/api-reference/objects#set-channel-memberships?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)呼び出します。 チャットSDK以外のSDKを使用している場合は、[JavaScript](https://www.pubnub.com/docs/sdks/javascript/api-reference/objects#set-channel-memberships?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)、[Java](https://www.pubnub.com/docs/sdks/java/api-reference/objects?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)、[Swift](https://www.pubnub.com/docs/sdks/swift/api-reference/objects?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)、[Kotlin](https://www.pubnub.com/docs/sdks/kotlin/api-reference/objects?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)、[Python](https://www.pubnub.com/docs/sdks/python/api-reference/objects?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)、[Unityなどの](https://www.pubnub.com/docs/sdks/unity/api-reference/objects?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)App Contextデータを変更するための専用APIが提供されます。

App Context変更時のリアルタイムイベントの受信
----------------------------

App Context データが変更されると、アプリケーションはリアルタイムで変更内容を通知するイベントを受け取ります。これにより、更新のためにサーバーをポーリングすることなく、応答性の高いアプリケーションを作成できます。

### PubNub SDK（チャットSDKを除く）によるApp Context変更の受信

すべてのPubNub SDKは "イベントリスナー "を公開しており、これらのリスナーを通じてApp Contextデータが変更されるたびに発生する`オブジェクト`イベントをリッスンすることができます。

[イベントエンジンとイベントリスナーのアップデートに関するこのブログで](https://www.pubnub.com/blog/updates-to-the-event-engine-and-event-listeners/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)説明されているように、執筆時点では、いくつかのSDKは「イベントリスナー」の新しいフォーマットをサポートしています。イベント・リスナーの形式にかかわらず、原則は同じです。あなたのアプリは、SDKが提供するリスナーを通じてアプリ・コンテキスト・イベントを受信するように登録する必要があります。

あなたのアプリは、SDKが提供するリスナーを通じてアプリコンテキストイベントを受信するように登録する必要があります。[JavaScript SDKのドキュメントに](https://www.pubnub.com/docs/sdks/javascript/api-reference/publish-and-subscribe#add-listeners?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)詳述されているように、アプリコンテキストイベントの登録は以下のようになります：

```js
const channel = pubnub.channel('channel_1');
const subscription = channel.subscription();
subscription.onObjects = 
  (objectsEvent) => { console.log("Objects event: ", objectsEvent); };
```

他の言語でのApp Contextイベントの登録方法を説明したドキュメントは、以下の場所にあります： [Java](https://www.pubnub.com/docs/sdks/java/api-reference/publish-and-subscribe#add-listeners?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)、[Swift](https://www.pubnub.com/docs/sdks/swift/api-reference/publish-and-subscribe#add-listeners?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)、[Kotlin](https://www.pubnub.com/docs/sdks/kotlin/api-reference/publish-and-subscribe#add-listeners?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)、[Python](https://www.pubnub.com/docs/sdks/python/api-reference/publish-and-subscribe#add-listeners?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)（Pythonはイベントを「メタデータ」と呼び、他のSDKはイベントを「オブジェクト」と呼ぶことに注意）、[Unityなど](https://www.pubnub.com/docs/sdks/unity/api-reference/configuration#event-listeners?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)。

作業例とインタラクティブなデモについては、[BizOps Workspaceでユーザーとチャンネルを管理](https://www.pubnub.com/how-to/manage-users-and-channels-with-bizops-workspace/#h-7?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)する方法の記事を参照してください。

### PubNub Chat SDKでアプリのコンテキスト変更を受け取る

PubNub Chat SDKは[streamUpdates()](https://www.pubnub.com/docs/chat/chat-sdk/build/features/channels/membership#get-updates?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)APIファミリを通じてApp Contextイベントを公開します。

いくつかの例は、Web用の[チャットSDKデモアプリから](https://github.com/PubNubDevelopers/Chat-SDK-Demo-Web)抜粋したものです：

```js
//  Detect changes to the current User
useEffect(() => {
  return currentUser.streamUpdates(updatedUser => {
    if (updatedUser.name) {
      setName(updatedUser.name)
    }
    if (updatedUser.profileUrl) {
      setProfileUrl(updatedUser.profileUrl)
    }
  })
}, [currentUser])
```

```js
//  Detect changes to an array of Channels
useEffect(() => {
if (chat && privateGroups) {
    return Channel.streamUpdatesOn(privateGroups, channels => {
    //  The array of channels, privateGroups, has been updated
}
}, [chat, privateGroups])
```

チャットSDKのよりシンプルな'getting stated'サンプルに基づく作業例については、[BizOps Workspaceでユーザーとチャネルを管理する](https://www.pubnub.com/how-to/manage-users-and-channels-with-bizops-workspace/#h-10?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)方法の記事を参照してください。

アプリコンテキストとPubNub Illuminate
---------------------------

[PubNub Illuminateは](https://www.pubnub.com/products/illuminate/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)、組織独自のユースケースに合わせてカスタマイズ可能なリアルタイムの意思決定および分析製品です。 この製品は、プロダクトマネージャーやアナリストを念頭に置いて設計されており、以下のことが可能です：

-   カスタム・リアルタイム集計メトリクスの定義
-   条件とアクションを伴う決定ルールの設定と展開。
-   追跡しているメトリクス、実行されたアクション、その結果を即座に可視化する。

エンジニアリングチームを進行中のプロジェクトから引き離すことなく、これらすべてをリアルタイムで実行できます。

PubNub Illuminteがどのようなもので、どのようにデータに対して即座に実行可能な洞察を提供できるのかについての詳しい説明はこの記事の範囲外ですが、詳細については[ドキュメントと](https://www.pubnub.com/docs/illuminate/basics?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja) [製品](https://www.pubnub.com/blog/real-time-decisioning-with-illuminate/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)概要を参照してください。

要約すると、アプリケーションに関連する**メトリクス**、つまり測定したいものを定義します。 例えば、資産追跡のシナリオでは、注文が取られてからの時間数などです。 そのメトリクスに関連する何らかの[**条件が**](https://www.pubnub.com/docs/illuminate/decisions/basics#conditions?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)満たされたとき、例えば「注文からの時間」がある値を超えたとき、何らかの**アクションを**取ることができます。

どの[アクションを](https://www.pubnub.com/docs/illuminate/decisions/basics#actions?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)取るかは自由ですが、可能なアクションのうち3つはApp Contextに関するものです：

![How-to - Use App Context - Image 02](https://www.pubnub.com/cdn/3prze68gbwl1/A2XZHFCSuF3nUxDjLDFjX/9b018c14ac44df085c2ad40b40619602/illuminate_app_context.png "How-to - Use App Context - Image 02")

### PubNub Illuminateでユーザーを更新する

定義済みまたはカスタムのユーザーメタデータを設定できます。 下のスクリーンショットではID 123のユーザのステータスが静的な値「New Status」に設定されているが、**アクションの**トリガーとなった**条件に基づいて**動的な値を設定することも可能だ。

![How-to - Use App Context - Image 03](https://www.pubnub.com/cdn/3prze68gbwl1/4Rx8xBy406xLFdGoA38Ll2/f7b62aa24fdba0df4cec6d035a8e5812/illuminate_app_context_user.png "How-to - Use App Context - Image 03")

### PubNub Illuminateでチャンネルを更新する

定義済みまたはカスタムのチャンネルメタデータを設定できます。 下のスクリーンショットではID 123のチャンネルの名前が静的な値'New Name'に設定されていますが、**アクションの**トリガーとなった**条件に基づいて**動的な値を設定することも可能です。

![How-to - Use App Context - Image 04](https://www.pubnub.com/cdn/3prze68gbwl1/5bVUjl1DTF1IENrhLv6T9v/b88e265164dce7dd1f39ed5437467611/illuminate_app_context_channel.png "How-to - Use App Context - Image 04")

### PubNub Illuminateでメンバーシップを更新する

定義済みまたはカスタムの会員メタデータを設定できます。 下のスクリーンショットはユーザID123のチャンネル123のメンバーシップのステータスが静的な値「New Status」に設定されていることを示しています。 **アクションを**トリガーした**条件に基づいて**動的な値を設定することも可能です。

![How-to - Use App Context - Image 05](https://www.pubnub.com/cdn/3prze68gbwl1/ZfrPMbbrj55hsyGpihCC3/44b519ccedde12e574bd44835ce799a3/illuminate_app_context_membership.png "How-to - Use App Context - Image 05")

アプリコンテキストとPubNub関数
------------------

PubNubはPubNubプラットフォームで発生しているイベントをキャプチャするためのFunctionsを提供します。Functionsを使用すると、コードを書いたり、既存の統合機能を活用して、データの変換、リルート、拡張、フィルタリング、さらには集計を行うことができます。 PubNub Functionsの詳細な概要については、[Functionsのドキュメントを](https://www.pubnub.com/docs/serverless/functions/overview?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)参照してください。

### PubNub Functions内からApp Contextを更新する

Functionsが実行される環境は[PubNubモジュールに](https://www.pubnub.com/docs/serverless/functions/functions-apis/pubnub-module?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)アクセスできます。このモジュールはキーセットのApp Contextに完全にアクセスできます。ドキュメントから抜粋した例を以下に示します。 :

[Get User App Context Metadataの](https://www.pubnub.com/docs/serverless/functions/functions-apis/pubnub-module#get-user-metadata?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)例

```js
export default (event) => {
  const pubnub = require('pubnub');

  return pubnub.objects.getUUIDMetadata({
    uuid: 'my-uuid',
    include: {
      customFields: false,
    },
  })
  .then((resp) => {
    console.log(resp);
    return event.ok('Fetched UUID metadata successfully.');
  })
  .catch((err) => {
    console.log(err);
    return event.abort('Failed to fetch UUID metadata');
  });
};
```

[Set Channel App Context Metadataの](https://www.pubnub.com/docs/serverless/functions/functions-apis/pubnub-module#set-channel-metadata?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)例

```js
export default (event) => {
  const pubnub = require('pubnub');

  return pubnub.objects.setChannelMetadata({
    channel: 'my-channel',
    data: {
      name: 'channel-name',
      description: 'What a great channel',
      custom: {
        foo: 'bar',
      },
    },
    include: {
      customFields: false,
    },
  })
  .then((resp) => {
    console.log(resp);
    return event.ok('Set channel metadata successfully.');
  })
  .catch((error) => {
    console.log(err);
    return event.abort('Failed to set channel metadata.');
  });
};
```

コード例の包括的なセットについては、[PubNubモジュールの](https://www.pubnub.com/docs/serverless/functions/functions-apis/pubnub-module?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)ドキュメントを参照してください。

### アプリコンテキストが変更されたときにPubNub関数をトリガーする

[Event Typesのドキュメント](https://www.pubnub.com/docs/serverless/functions/overview#event-types?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)で詳しく説明されているように、関数をトリガーできるイベントタイプは数多くあります。 これらには、メッセージやシグナルが送信されたときに検出する機能、プレゼンスイベントが発生した後に関数をトリガする機能、指定した間隔またはオンデマンドで関数を実行する機能などがあります。 この記事を書いている時点では、App Contextの更新後にFunctionを実行することは**できませんが**、アプリケーションがこれを必要とする場合は、[サポート](https://support.pubnub.com/hc/en-us?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)チームにご連絡ください。

次のステップ
------

App Context の動作を確認するには、App Context を当社の Chat SDK と一緒に使用して、サーバーレスストレージを使用したチャットアプリがどのように見えるかを示す[Chat Demo](https://www.pubnub.com/demos/chat/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)をご覧ください。 Chat Demoでは、UserやChannelのメタデータを設定し、その変更が他のリスナーやメンバーにリアルタイムで反映される様子を見ることができます。

また、App Contextに依存するBizOpsワークスペースに関する関連する3つのパートからなるシリーズもご覧ください：[ユーザーとチャネルの管理](https://www.pubnub.com/how-to/manage-users-and-channels-with-bizops-workspace/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)、[会話の監視とモデレート](https://www.pubnub.com/how-to/monitor-and-moderate-conversations-with-bizops-workspace/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)、[チャットの安全なモデレート](https://www.pubnub.com/how-to/securely-moderate-chat-and-users/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)。

最後に、DevRelチーム[（devrel@pubnub.com](mailto:devrel@pubnub.com)）までお気軽にお問い合わせください。また、PubNubの開発に関するどのようなことでも[サポート](https://support.pubnub.com/hc/en-us?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)チームにお問い合わせください。

PubNubはどのようにお役に立ちますか？
=====================

この記事は[PubNub.comに](https://www.pubnub.com/how-to/use-app-context/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)掲載されたものです。

私たちのプラットフォームは、開発者がWebアプリ、モバイルアプリ、およびIoTデバイスのためのリアルタイムのインタラクティブ性を構築、配信、管理するのに役立ちます。

私たちのプラットフォームの基盤は、業界最大かつ最もスケーラブルなリアルタイムエッジメッセージングネットワークです。世界15か所以上で8億人の月間アクティブユーザーをサポートし、99.999%の信頼性を誇るため、停電や同時実行数の制限、トラフィックの急増による遅延の問題を心配する必要はありません。

PubNubを体験
---------

[ライブツアーを](https://www.pubnub.com/tour/introduction/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)チェックして、5分以内にすべてのPubNub搭載アプリの背後にある本質的な概念を理解する

セットアップ
------

[PubNubアカウントに](https://admin.pubnub.com/signup/?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)サインアップすると、PubNubキーに無料ですぐにアクセスできます。

始める
---

[PubNubのドキュメントは](https://www.pubnub.com/docs?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)、ユースケースや[SDKに](https://www.pubnub.com/docs?utm_source=devto&utm_medium=syndication&utm_campaign=off_domain&utm_content=ja)関係なく、あなたを立ち上げ、実行することができます。