<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: PubNub [日本語]</title>
    <description>The latest articles on Forem by PubNub [日本語] (@pubnub-jp).</description>
    <link>https://forem.com/pubnub-jp</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F7933%2F4b7b4a92-bf99-44fa-b4ca-0e8cdfb7d18d.jpg</url>
      <title>Forem: PubNub [日本語]</title>
      <link>https://forem.com/pubnub-jp</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/pubnub-jp"/>
    <language>en</language>
    <item>
      <title>アプリコンテキストの使い方</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Tue, 09 Jul 2024 06:49:29 +0000</pubDate>
      <link>https://forem.com/pubnub-jp/apurikontekisutonoshi-ifang-112i</link>
      <guid>https://forem.com/pubnub-jp/apurikontekisutonoshi-ifang-112i</guid>
      <description>&lt;p&gt;PubNub&lt;a href="https://www.pubnub.com/products/app-context/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;App Contextは&lt;/a&gt;、User、Channel、およびMembership情報のサーバレスストレージメカニズムを提供することで、複雑なリアルタイム機能の開発を簡素化します。 App Contextはデータが変更されるたびにイベントをトリガーし、アプリをリアルタイムで更新できるようにします。また、保存されたデータは&lt;a href="https://www.pubnub.com/products/illuminate/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;Illuminate&lt;/a&gt;、&lt;a href="https://www.pubnub.com/products/functions/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;Functions&lt;/a&gt;、その他のPubNubサービスで使用でき、よりスマートな意思決定を行うことができます。 また、&lt;a href="https://www.pubnub.com/how-to/manage-users-and-channels-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;BizOps Workspaceを&lt;/a&gt;使用することで、コード不要の直感的なインターフェイスでこのデータを管理できます。&lt;/p&gt;

&lt;h2&gt;
  
  
  アプリコンテキストとは？
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/general/metadata/channel-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;アプリコンテキスト&lt;/a&gt;（旧称オブジェクト）により、次のことが可能になります：&lt;/p&gt;

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

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

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

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8Gm6KiDx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5ICbXWgNTJNc5kXAAQ4qJI/40b24d228d9ed97e17e47b027469bcdf/app_context_diagram.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8Gm6KiDx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5ICbXWgNTJNc5kXAAQ4qJI/40b24d228d9ed97e17e47b027469bcdf/app_context_diagram.png" title="How-to - BizOps Workspace Manage Users and Channels - Image 01" alt="Diagram showing user management, memberhip, channel management" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  App Contextの使用例
&lt;/h2&gt;

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

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

&lt;h2&gt;
  
  
  アプリコンテキストを有効にする方法
&lt;/h2&gt;

&lt;p&gt;App Contextは、以下の手順で有効にできます：&lt;/p&gt;

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

&lt;h2&gt;
  
  
  ユーザーアプリコンテキスト
&lt;/h2&gt;

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

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

&lt;h3&gt;
  
  
  App ContextでUser representationを作成するには？
&lt;/h3&gt;

&lt;p&gt;App Context Userを作成するには、2つの方法があります。&lt;/p&gt;

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

&lt;h2&gt;
  
  
  チャンネルアプリのコンテキスト
&lt;/h2&gt;

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

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

&lt;h3&gt;
  
  
  App Contextでチャネルを作成するには？
&lt;/h3&gt;

&lt;p&gt;Usersと同様に、App Context Channelを作成するには2つの方法がある。&lt;/p&gt;

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

&lt;h2&gt;
  
  
  メンバーシップApp Context
&lt;/h2&gt;

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

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

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

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

&lt;h3&gt;
  
  
  メンバーシップの作成方法は？
&lt;/h3&gt;

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

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

&lt;h2&gt;
  
  
  App Context変更時のリアルタイムイベントの受信
&lt;/h2&gt;

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

&lt;h3&gt;
  
  
  PubNub SDK（チャットSDKを除く）によるApp Context変更の受信
&lt;/h3&gt;

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

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

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;channel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;channel_1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;subscription&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;subscription&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;subscription&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onObjects&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;objectsEvent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Objects event: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;objectsEvent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

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

&lt;h3&gt;
  
  
  PubNub Chat SDKでアプリのコンテキスト変更を受け取る
&lt;/h3&gt;

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

&lt;p&gt;いくつかの例は、Web用の&lt;a href="https://github.com/PubNubDevelopers/Chat-SDK-Demo-Web" rel="noopener noreferrer"&gt;チャットSDKデモアプリから&lt;/a&gt;抜粋したものです：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//  Detect changes to the current User&lt;/span&gt;
&lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;currentUser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;streamUpdates&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;updatedUser&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;updatedUser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nf"&gt;setName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;updatedUser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;updatedUser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;profileUrl&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nf"&gt;setProfileUrl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;updatedUser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;profileUrl&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;currentUser&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//  Detect changes to an array of Channels&lt;/span&gt;
&lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;privateGroups&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;Channel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;streamUpdatesOn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;privateGroups&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;channels&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;//  The array of channels, privateGroups, has been updated&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;privateGroups&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;h2&gt;
  
  
  アプリコンテキストとPubNub Illuminate
&lt;/h2&gt;

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

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

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

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

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

&lt;p&gt;どの&lt;a href="https://www.pubnub.com/docs/illuminate/decisions/basics#actions?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;アクションを&lt;/a&gt;取るかは自由ですが、可能なアクションのうち3つはApp Contextに関するものです：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZzqfRlop--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/A2XZHFCSuF3nUxDjLDFjX/9b018c14ac44df085c2ad40b40619602/illuminate_app_context.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZzqfRlop--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/A2XZHFCSuF3nUxDjLDFjX/9b018c14ac44df085c2ad40b40619602/illuminate_app_context.png" title="How-to - Use App Context - Image 02" alt="How-to - Use App Context - Image 02" width="800" height="232"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  PubNub Illuminateでユーザーを更新する
&lt;/h3&gt;

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

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sxO8sTRv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/4Rx8xBy406xLFdGoA38Ll2/f7b62aa24fdba0df4cec6d035a8e5812/illuminate_app_context_user.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sxO8sTRv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/4Rx8xBy406xLFdGoA38Ll2/f7b62aa24fdba0df4cec6d035a8e5812/illuminate_app_context_user.png" title="How-to - Use App Context - Image 03" alt="How-to - Use App Context - Image 03" width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  PubNub Illuminateでチャンネルを更新する
&lt;/h3&gt;

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

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ILHCobfC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5bVUjl1DTF1IENrhLv6T9v/b88e265164dce7dd1f39ed5437467611/illuminate_app_context_channel.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ILHCobfC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5bVUjl1DTF1IENrhLv6T9v/b88e265164dce7dd1f39ed5437467611/illuminate_app_context_channel.png" title="How-to - Use App Context - Image 04" alt="How-to - Use App Context - Image 04" width="800" height="504"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  PubNub Illuminateでメンバーシップを更新する
&lt;/h3&gt;

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

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--P0jKJfDZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/ZfrPMbbrj55hsyGpihCC3/44b519ccedde12e574bd44835ce799a3/illuminate_app_context_membership.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P0jKJfDZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/ZfrPMbbrj55hsyGpihCC3/44b519ccedde12e574bd44835ce799a3/illuminate_app_context_membership.png" title="How-to - Use App Context - Image 05" alt="How-to - Use App Context - Image 05" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  アプリコンテキストとPubNub関数
&lt;/h2&gt;

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

&lt;h3&gt;
  
  
  PubNub Functions内からApp Contextを更新する
&lt;/h3&gt;

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

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/serverless/functions/functions-apis/pubnub-module#get-user-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;Get User App Context Metadataの&lt;/a&gt;例&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pubnub&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getUUIDMetadata&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my-uuid&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;include&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;customFields&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Fetched UUID metadata successfully.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;abort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Failed to fetch UUID metadata&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/serverless/functions/functions-apis/pubnub-module#set-channel-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;Set Channel App Context Metadataの&lt;/a&gt;例&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pubnub&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setChannelMetadata&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my-channel&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;channel-name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;What a great channel&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;custom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;foo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;include&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;customFields&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Set channel metadata successfully.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;abort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Failed to set channel metadata.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;コード例の包括的なセットについては、&lt;a href="https://www.pubnub.com/docs/serverless/functions/functions-apis/pubnub-module?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;PubNubモジュールの&lt;/a&gt;ドキュメントを参照してください。&lt;/p&gt;

&lt;h3&gt;
  
  
  アプリコンテキストが変更されたときにPubNub関数をトリガーする
&lt;/h3&gt;

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

&lt;h2&gt;
  
  
  次のステップ
&lt;/h2&gt;

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

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

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

&lt;h1&gt;
  
  
  PubNubはどのようにお役に立ちますか？
&lt;/h1&gt;

&lt;p&gt;この記事は&lt;a href="https://www.pubnub.com/how-to/use-app-context/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;PubNub.comに&lt;/a&gt;掲載されたものです。&lt;/p&gt;

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

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

&lt;h2&gt;
  
  
  PubNubを体験
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/tour/introduction/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;ライブツアーを&lt;/a&gt;チェックして、5分以内にすべてのPubNub搭載アプリの背後にある本質的な概念を理解する&lt;/p&gt;

&lt;h2&gt;
  
  
  セットアップ
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://admin.pubnub.com/signup/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;PubNubアカウントに&lt;/a&gt;サインアップすると、PubNubキーに無料ですぐにアクセスできます。&lt;/p&gt;

&lt;h2&gt;
  
  
  始める
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;PubNubのドキュメントは&lt;/a&gt;、ユースケースや&lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;SDKに&lt;/a&gt;関係なく、あなたを立ち上げ、実行することができます。&lt;/p&gt;

</description>
    </item>
    <item>
      <title>ドキュメント・リリースノート - 2024年6月</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Mon, 08 Jul 2024 12:46:27 +0000</pubDate>
      <link>https://forem.com/pubnub-jp/dokiyumentoririsunoto-2024nian-6yue-cbm</link>
      <guid>https://forem.com/pubnub-jp/dokiyumentoririsunoto-2024nian-6yue-cbm</guid>
      <description>&lt;p&gt;この記事は&lt;a href="https://www.pubnub.com/docs/release-notes/2024/june?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;https://www.pubnub.com/docs/release-notes/2024/june&lt;/a&gt;に掲載されたものです。&lt;/p&gt;

&lt;p&gt;こんにちは！今月は新しいアップデートをお届けします。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  データの一貫性を保つための新しい参照整合性フラグを導入しました。&lt;/li&gt;
&lt;li&gt;  管理者ポータルから直接チャンネルグループの上限を設定できるようになりました。&lt;/li&gt;
&lt;li&gt;  InsightsからBizOpsにデータをインポートして、その機能を試してみてください。&lt;/li&gt;
&lt;li&gt;  さらに、プレゼンス・マネジメントのルック＆フィールが刷新されました。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;その他にも、PubNubを使う上で疑問に思っていることを解消できるような、小さいけれども重要な改善をたくさん行いました。&lt;/p&gt;

&lt;p&gt;これからもPubNubをよろしくお願いします！&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠️
&lt;/h2&gt;

&lt;h3&gt;
  
  
  FCMペイロードのカスタムフィールド
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;タイプ&lt;/strong&gt;改善&lt;/p&gt;

&lt;p&gt;FCMモバイルプッシュ通知のペイロードに追加できるPubNubのカスタムパラメータ&lt;code&gt;pn_debug&lt;/code&gt;、&lt;code&gt;pn_exceptions&lt;/code&gt;、&lt;code&gt;pn_dry_runを&lt;/code&gt;追加して、&lt;a href="https://pubnub.com/docs/general/push/android#step-5-construct-the-push-payload" rel="noopener noreferrer"&gt;Androidモバイルプッシュ通知の&lt;/a&gt;ドキュメントを修正しました。&lt;/p&gt;

&lt;p&gt;これらのパラメータを使用すると、通知をテストまたはデバッグしたり、通知を受信しないように選択したデバイスを除外したりできます。&lt;/p&gt;

&lt;p&gt;以下は、カスタムフィールドを含むFCMペイロードのサンプルです：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pn_fcm&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;notification&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;title&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;My Title&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;body&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Message sent at&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
 &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pn_collapse_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;collapse-id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pn_exceptions&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;optional-excluded-device-token1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
 &lt;span class="p"&gt;]&lt;/span&gt;
 &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pn_debug&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pn_dry_run&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  チャネルグループの制限
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;タイプ&lt;/strong&gt;新機能&lt;/p&gt;

&lt;p&gt;管理ポータルのStream Controllerに、有料&lt;a href="https://www.pubnub.com/pricing/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;プランの&lt;/a&gt;お客様向けに&lt;a href="https://pubnub.com/docs/general/metadata/basics#configuration" rel="noopener noreferrer"&gt;チャンネルグループ制限&lt;/a&gt;オプションが追加されました。デフォルトの上限である1,000チャンネルを下げることも、2,000チャンネルまで増やすこともできます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pIhkfMKU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/channel-group-limit-0dce418184343bd3e6e213b7f21f2038.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pIhkfMKU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/channel-group-limit-0dce418184343bd3e6e213b7f21f2038.png" alt="Channel group limits" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  アプリコンテキストのユーザーメタデータイベント
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;タイプ&lt;/strong&gt;改善&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User Metadata Events&lt;/strong&gt;オプションを有効にすると、ユーザー・エンティティの変更&lt;code&gt;（設定と&lt;/code&gt; &lt;code&gt;削除&lt;/code&gt;）がメンバーシップ関連にイベント通知を送信するため、そのユーザーとそのユーザーがメンバーであるチャネルの両方にイベント通知が送信されることを明確にするため、ドキュメントを改善しました。詳細は&lt;a href="https://pubnub.com/docs/general/metadata/basics#app-context-events" rel="noopener noreferrer"&gt;ドキュメントを&lt;/a&gt;参照してください。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iSi8-HI4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/user-metadata-events-2774cded452142e6d79bdf1a92e95174.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iSi8-HI4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/user-metadata-events-2774cded452142e6d79bdf1a92e95174.png" alt="User metadata events" width="800" height="693"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  アプリコンテキスト設定の依存関係
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;タイプ&lt;/strong&gt;改善&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pubnub.com/docs/general/metadata/basics#configuration" rel="noopener noreferrer"&gt;App Contextの設定オプションに関する&lt;/a&gt;ドキュメントを更新し、重要な依存関係についての情報を追加した。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--u1z1QWAq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/get-all-metadata-bf21a99e67f554e65c818b7b71fb9011.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--u1z1QWAq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/get-all-metadata-bf21a99e67f554e65c818b7b71fb9011.png" alt="Get all user or channel metadata" width="800" height="624"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disallow Get All Channel Metadata&lt;/strong&gt;」と「&lt;strong&gt;Disallow Get All User Metadata&lt;/strong&gt;」オプションは一見わかりやすいように見えますが、これらのオプションはAccess Managerが有効な場合にのみ機能するという注意点があります。&lt;/p&gt;

&lt;p&gt;言い換えると、Access Managerがない場合、これらのアクティブなオプションは、実際にはキーセットのユーザーまたはチャンネルに関するメタデータの取得を無効にしない。同時に、Access Managerを有効にすると、デフォルトでキーセット上のすべてのオブジェクトへのアクセスが制限されるため、細かい権限スキーマを作成しなくても、これらの設定オプションの両方のチェックを外すことで、ユーザーとチャンネルに対するAccess ManagerのGET制限を簡単に回避することができる。&lt;/p&gt;

&lt;p&gt;Admin Portal UIにも、この依存関係がまもなく反映される予定です。&lt;/p&gt;

&lt;h3&gt;
  
  
  App Contextの新しい参照整合性フラグ
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;タイプ&lt;/strong&gt;新機能&lt;/p&gt;

&lt;p&gt;管理ポータルのアプリのキーセットでApp Contextを有効にすると、デフォルトでオンになる新しい&lt;a href="https://pubnub.com/docs/general/metadata/basics#configuration" rel="noopener noreferrer"&gt;&lt;strong&gt;Enforce referential integrity for memberships&lt;/strong&gt;&lt;/a&gt;オプションを追加した。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QjGUW3Kf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/referential-integrity-2288af8171ffc0c8a5c8b67d82106247.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QjGUW3Kf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/referential-integrity-2288af8171ffc0c8a5c8b67d82106247.png" alt="Referential integrity flag" width="800" height="624"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;このフラグにより、メンバーシップを作成したユーザIDとチャネルIDの両方が存在する場合にのみ、新しいメンバーシップを設定できるようになります。同時に、親ユーザまたはチャネルのメタデータ・エンティティを削除すると、その削除されたエンティティの子メンバーシップ関連付けが自動的に削除されます。こうすることで、キーセット上のメンバーシップ・オブジェクトに不具合や欠落が生じないようにすることができる。&lt;/p&gt;

&lt;h2&gt;
  
  
  SDK 📦 Pythonドキュメントの改善
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Pythonドキュメントの改善
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;タイプ&lt;/strong&gt;改善&lt;/p&gt;

&lt;p&gt;頂いたフィードバックに従い、メソッドの使用法と実行に関する情報を拡張しました。その結果、&lt;a href="https://pubnub.com/docs/sdks/python/api-reference/publish-and-subscribe" rel="noopener noreferrer"&gt;Python SDKドキュメントの&lt;/a&gt;各Returnsセクションでは、各メソッドが返すデータフィールドについて説明するようになりました。また、同期(&lt;code&gt;.sync()&lt;/code&gt;)と非同期(&lt;code&gt;.pn_async(callback)&lt;/code&gt;)リクエストの実行が、各メソッドの戻りデータにどのように影響するかも説明しています。&lt;/p&gt;

&lt;h3&gt;
  
  
  React SDKは廃止されました。
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;タイプ&lt;/strong&gt;非推奨のお知らせ&lt;/p&gt;

&lt;p&gt;しばらくReact SDKの開発を積極的に行っていなかったため、最終的に正式に非推奨とし、&lt;a href="https://pubnub.com/docs/sdks/react" rel="noopener noreferrer"&gt;ドキュメント&lt;/a&gt;内の&lt;a href="https://pubnub.com/docs/sdks#call-for-contributions" rel="noopener noreferrer"&gt;Call For Contributions&lt;/a&gt;セクションに移動することにしました。&lt;/p&gt;

&lt;p&gt;React SDKのバグを見つけたり、機能を拡張したい場合は、遠慮なく&lt;a href="https://github.com/pubnub/react" rel="noopener noreferrer"&gt;リポジトリに&lt;/a&gt;プルリクエストを作成し、私たちのフィードバックをお待ちください！&lt;/p&gt;

&lt;h2&gt;
  
  
  機能
&lt;/h2&gt;

&lt;h3&gt;
  
  
  イベント＆アクションからファンクションのログをエクスポートする
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;タイプ&lt;/strong&gt;新機能&lt;/p&gt;

&lt;p&gt;各PubNubファンクションは内部の&lt;code&gt;bocks-output-*&lt;/code&gt;チャンネルにログを保存します。&lt;code&gt;bocks-output-NSPiAuYKsWSxJl4yBn30の&lt;/code&gt;ように、新しいログが上書きされる前に最大250行のログを保存できます。古いログを失いたくない場合は、イベント＆アクションを使用して、&lt;a href="https://pubnub.com/docs/general/portal/functions#export-logs-through-events--actions" rel="noopener noreferrer"&gt;これらのログを&lt;/a&gt;外部サービスに&lt;a href="https://pubnub.com/docs/general/portal/functions#export-logs-through-events--actions" rel="noopener noreferrer"&gt;エクスポート&lt;/a&gt;できるようになりました。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YdztgBWT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/functions-log-c9c6bfa2ae883d738837c6fee563167d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YdztgBWT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/functions-log-c9c6bfa2ae883d738837c6fee563167d.png" alt="Functions log" width="800" height="568"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  インサイト ↪So_1F4CA
&lt;/h2&gt;

&lt;h3&gt;
  
  
  REST APIドキュメントのユーザー期間とデバイスメトリクス
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;タイプ&lt;/strong&gt;改善&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pubnub.com/docs/release-notes/2024/may#device-metrics-dashboard" rel="noopener noreferrer"&gt;先月&lt;/a&gt;、管理ポータルのPubNub Insightsの&lt;code&gt;User Behavior&lt;/code&gt;ダッシュボードにデバイスメトリクスを導入しました。今月は、&lt;a href="https://pubnub.com/docs/sdks/rest-api/introduction-16" rel="noopener noreferrer"&gt;REST APIドキュメントを&lt;/a&gt;更新し、ユーザー期間とデバイスメトリクスの両方を含めるようにしました。これにより、PubNub Insights APIを直接呼び出して、関心のあるメトリクスを取得できます。&lt;/p&gt;

&lt;h2&gt;
  
  
  BizOpsワークスペース 🏢 🏢 ←クリック
&lt;/h2&gt;

&lt;h3&gt;
  
  
  トップ20ユーザー/チャンネル
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;タイプ&lt;/strong&gt;新機能&lt;/p&gt;

&lt;p&gt;App Contextを使用してユーザーとチャネルを保存および管理しない場合でも、テストデータをインポートすることで、関連するBizOps Workspace機能をテストできます。&lt;/p&gt;

&lt;p&gt;PubNub Insightsにアクセスできる場合は、管理者ポータルのBizOps Workspaceの&lt;strong&gt;User Management&lt;/strong&gt;モジュールと&lt;strong&gt;Channel Management&lt;/strong&gt;モジュールにアクセスし、[&lt;strong&gt;Import from Insights&lt;/strong&gt;]ボタンをクリックします。&lt;/p&gt;

&lt;p&gt;その結果、アプリのキーセットから、直近1日以内に最も多くのメッセージを公開した最大20人のユーザーがインポートされます（昨日メッセージが送信されていない場合、ユーザーは前日のデータに基づいてインポートされます）。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--edam1-8B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/top-20-users-346c252e218d37df861ff5ac04538f48.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--edam1-8B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/top-20-users-346c252e218d37df861ff5ac04538f48.png" alt="Top 20 users" width="800" height="167"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ユーザーと同様に、アプリのキーセットから、直近1日以内に公開されたメッセージ数が最も多いチャンネルを最大20チャンネルまでインポートできます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6mfK6c4r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/top-20-channels-53fad13cd8e1f9a7619aee7330b2fffa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6mfK6c4r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/top-20-channels-53fad13cd8e1f9a7619aee7330b2fffa.png" alt="Top 20 channels" width="800" height="165"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;このテストデータを使用して、BizOps Workspaceが提供するものを探求してください。&lt;/p&gt;

&lt;h3&gt;
  
  
  プレゼンス管理UXの刷新
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;タイプ&lt;/strong&gt;改善&lt;/p&gt;

&lt;p&gt;最近、BizOps Workspaceの&lt;a href="https://pubnub.com/docs/bizops-workspace/presence-management" rel="noopener noreferrer"&gt;プレゼンス管理&lt;/a&gt;モジュール全体のデザインを変更し、ルール作成ウィザードを簡素化し、バッジの色をより包括的なものに変更し、キーセットのプレゼンス設定のデフォルトの「すべてのチャンネルでプレゼンスを有効にする」設定を反映する「キャッチオール」パターン設定を追加しました。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--K4-MWVm9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/presence-management-7799538afb99b2c891fc6d957737d819.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--K4-MWVm9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/presence-management-7799538afb99b2c891fc6d957737d819.png" alt="Presence Management" width="800" height="614"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;新しいルック＆フィールを気に入っていただければ幸いです！&lt;/p&gt;

</description>
      <category>pubnub</category>
      <category>documentation</category>
      <category>releases</category>
      <category>releasenotes</category>
    </item>
    <item>
      <title>ドキュメント・リリースノート - 2024年5月</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Mon, 08 Jul 2024 11:17:12 +0000</pubDate>
      <link>https://forem.com/pubnub-jp/dokiyumentoririsunoto-2024nian-5yue-2dp9</link>
      <guid>https://forem.com/pubnub-jp/dokiyumentoririsunoto-2024nian-5yue-2dp9</guid>
      <description>&lt;p&gt;この記事は&lt;a href="https://www.pubnub.com/docs/release-notes/2024/may?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;https://www.pubnub.com/docs/release-notes/2024/may&lt;/a&gt;に掲載されたものです。&lt;/p&gt;

&lt;p&gt;今月のリリースノートへようこそ！PubNubはあなたの作業を効率化し、利便性を高めるためのアップデートをお届けします。&lt;/p&gt;

&lt;p&gt;パッケージの中身は？&lt;/p&gt;

&lt;p&gt;App Contextのデータフィルタリングのドキュメントを統一し、PythonとAsyncioのイベントリスナーアーキテクチャを刷新し、安全なチャットモデレーションを始めるための新しいツールを追加しました。&lt;/p&gt;

&lt;p&gt;管理者ポータルの面では、詳細なデバイスメトリックスでゲームをアップグレードし、バッチとエンベロープオプションでイベント管理を改善し、Illuminateでスタイリッシュな新しい積み上げ棒グラフと変数機能を展開しました。&lt;/p&gt;

&lt;p&gt;さらに、弊社のドキュメントとウェブサイトには、AIを相棒にした新しい検索エンジンが搭載され、必要なものを正確に見つけることができるようになりました。&lt;/p&gt;

&lt;p&gt;さっそくその魅力に触れてみてください！&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠️
&lt;/h2&gt;

&lt;h3&gt;
  
  
  App Contextデータのフィルタリングに関する統一情報
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;タイプ&lt;/strong&gt;機能強化&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;説明&lt;/strong&gt;フィードバックに基づき、PubNubのApp Context APIを使用したユーザー、チャンネル、メンバーシップデータのフィルタリングに関する様々なSDKからの情報を見直し、統一しました。その結果、データフィルタリングクエリのエントリポイントとして機能する&lt;a href="https://pubnub.com/docs/general/metadata/filtering" rel="noopener noreferrer"&gt;App Context Filtering&lt;/a&gt;ドキュメントを1つ作成しました。&lt;/p&gt;

&lt;p&gt;学びましょう：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  どのユーザー、チャネル、およびメンバーシップデータをフィルタリングできるか。&lt;/li&gt;
&lt;li&gt;  どのフィルタリング演算子を使用するか。&lt;/li&gt;
&lt;li&gt;  実践的な例を通して、どのようにデータをフィルタリングできるか。
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;   &lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getAllChannelMetadata&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
       &lt;span class="na"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;["description"] LIKE "*support*"&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
   &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  SDK 📦 イベントリスナーアーキテクチャの更新
&lt;/h2&gt;

&lt;h3&gt;
  
  
  PythonとAsyncioのイベントリスナーアーキテクチャの更新
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;タイプ&lt;/strong&gt;新機能&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;説明&lt;/strong&gt; &lt;a href="https://pubnub.com/docs/sdks/python/api-reference/publish-and-subscribe" rel="noopener noreferrer"&gt;Pythonと&lt;/a&gt; &lt;a href="https://pubnub.com/docs/sdks/asyncio/api-reference/publish-and-subscribe" rel="noopener noreferrer"&gt;Asyncio&lt;/a&gt;SDKのための新しいイベントリスナーアーキテクチャは、以前のモノリシックなPubNubオブジェクトと比較して、サブスクリプションを管理し、イベントをリッスンする、より狭いスコープの方法を導入しています。&lt;/p&gt;

&lt;p&gt;PubNubオブジェクトは依然としてグローバルスコープとして機能し、下位互換性を維持していますが、新しいアーキテクチャでは、Subscriptionオブジェクトを返すチャネル、チャネルグループ、ユーザーメタデータ、チャネルメタデータなどの「エンティティ」オブジェクトを提供しています。&lt;/p&gt;

&lt;p&gt;これらのSubscriptionは、単一のエンティティに固有のsubscribe/unsubscribeメソッドと&lt;code&gt;addListener/&lt;/code&gt;&lt;code&gt;removeListener&lt;/code&gt;メソッドを可能にし、リアルタイムイベントを管理する、より柔軟で独立した方法を提供し、グローバルな状態管理の必要性を低減します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;entity&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;based&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;local&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;scoped&lt;/span&gt;
&lt;span class="nx"&gt;subscription&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;f&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;{channel}&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;subscription&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;with_presence&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;bool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Chat 💬チャット
&lt;/h2&gt;

&lt;h3&gt;
  
  
  チャットSDKの安全なモデレーション用サンプル
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;タイプ&lt;/strong&gt;新機能&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;説明&lt;/strong&gt;チャットチームは、Access ManagerでチャットSDKアプリを保護するためのエンドツーエンドのシナリオを理解するのに役立つシンプルな&lt;a href="https://github.com/pubnub/js-chat/blob/master/samples/access-manager-api/README.md" rel="noopener noreferrer"&gt;Access Manager APIサービスを&lt;/a&gt;作成しました。このサービスはシンプルなエンドポイントをモックし、Access Managerを有効にしたチャットSDKアプリのサーバーサイド認証をセットアップするために使用できるサンプル権限セットを含んでいます。&lt;/p&gt;

&lt;p&gt;私たちのReact Native Chat App（ユーザーとの対話用）、Channel Monitor（ミュートや禁止などのユーザーモデレーション用）、およびAccess Manager API（認可トークンの生成用）を使用して、すべてのテストシナリオを実行します。&lt;/p&gt;

&lt;p&gt;詳細な手順については、&lt;a href="https://www.pubnub.com/how-to/securely-moderate-chat-and-users/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;BizOps Workspace&lt;/a&gt;ブログの&lt;a href="https://www.pubnub.com/how-to/securely-moderate-chat-and-users/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;How to Securely Moderate Chat and Usersを&lt;/a&gt;参照してください。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KI6SFqVa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/muted-user-b18b4534be183d6d207ceeff685e5b44.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KI6SFqVa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/muted-user-b18b4534be183d6d207ceeff685e5b44.png" alt="Muted user" width="800" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  インサイト ↪So_1F4CA
&lt;/h2&gt;

&lt;h3&gt;
  
  
  デバイスメトリクスダッシュボード
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;タイプ&lt;/strong&gt;機能強化&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;説明&lt;/strong&gt;インサイトの&lt;code&gt;ユーザー行動&lt;/code&gt;ダッシュボードを拡張し、&lt;a href="https://pubnub.com/docs/pubnub-insights/dashboards/user-behavior" rel="noopener noreferrer"&gt;デバイスタイプのメトリクスを&lt;/a&gt;追加しました。これにより、デバイスタイプごとのユーザーの行動を深く掘り下げることができます。今後、アプリのユーザーが最も頻繁に公開または購読する場所（iOS、Android、Windows）を観察し、デバイスタイプごとのユニークユーザー数を確認できます。&lt;/p&gt;

&lt;p&gt;この洞察は、デバイス別にカスタム機能を構築し、顧客体験を向上させるのに役立ちます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aE1MRxwy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/device-type-1ba35d904878d48813e07a9f581193d5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aE1MRxwy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/device-type-1ba35d904878d48813e07a9f581193d5.png" alt="User behavior &amp;amp; devices" width="800" height="723"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  イベントとアクション ⚡ ウェブフックアクションがバッチ処理に対応しました。
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Webhookアクションがバッチ処理に対応
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;タイプ&lt;/strong&gt;機能強化&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;説明&lt;/strong&gt;イベント＆アクションの&lt;a href="https://pubnub.com/docs/serverless/events-and-actions/events#batching" rel="noopener noreferrer"&gt;バッチ&lt;/a&gt;機能を使うと、イベントを個別に送信するのではなく、1つのリクエストで送信することで、大量のイベントを管理できます。この機能は5月より&lt;a href="https://pubnub.com/docs/serverless/events-and-actions/actions/create-webhook-action" rel="noopener noreferrer"&gt;Webhookアクション&lt;/a&gt;タイプでも利用できるようになりました。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UuXPtdsa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/batching-e3cf9a2f9881bf32f6c8a0782ac4efff.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UuXPtdsa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/batching-e3cf9a2f9881bf32f6c8a0782ac4efff.png" alt="Batching feature" width="726" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  (アン)エンベロープ
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;タイプ&lt;/strong&gt;機能拡張&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;説明&lt;/strong&gt;全てのアクションのペイロードを&lt;a href="https://pubnub.com/docs/serverless/events-and-actions/events#envelope" rel="noopener noreferrer"&gt;エンベロープで&lt;/a&gt;ラップできるようになった。つまり、ペイロードスキーマに詳細なEvents &amp;amp; Actions JSONメタデータを含めるかどうかを選択できる。ペイロードが送信されたチャンネルや、それをトリガーしたリスナーに関する情報のように、ペイロード以外のメタデータを使いたい場合に役立つかもしれません。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---Op_HGbc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/envelope-a629b278f2f637155ddfe6486c3441b5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---Op_HGbc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/envelope-a629b278f2f637155ddfe6486c3441b5.png" alt="Envelope feature" width="678" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  イルミネーション 💡。
&lt;/h2&gt;

&lt;h3&gt;
  
  
  積み上げ棒グラフ
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;タイプ&lt;/strong&gt;新機能&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;説明&lt;/strong&gt;棒グラフと折れ線グラフに加えて、Illuminateダッシュボードでは、1つのチャート上に多くのディメンションと値がある場合にデータの可読性を向上させる、新しい積み&lt;a href="https://pubnub.com/docs/illuminate/dashboards/basics#settings" rel="noopener noreferrer"&gt;重ね棒&lt;/a&gt;タイプのチャートを提供するようになりました。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Zem7lnII--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/stacked-bar-chart-1c8ca3660f7fcba4c54d4e6b0c60c757.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Zem7lnII--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/stacked-bar-chart-1c8ca3660f7fcba4c54d4e6b0c60c757.png" alt="Stacked bar chart" width="800" height="547"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  変数
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;タイプ&lt;/strong&gt;機能強化&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;説明&lt;/strong&gt;Decisionsでアクションを作成するとき（収集したメトリクスで何をしたいかを記述する）、アクション構成テーブルに&lt;a href="https://pubnub.com/docs/illuminate/decisions/basics#decision-structure" rel="noopener noreferrer"&gt;変数を&lt;/a&gt;追加して、参照するものを制御し、動的に変更することができます。定義済みの条件を参照したり&lt;code&gt;（${と&lt;/code&gt;入力してリストから選択）、新しい変数&lt;code&gt;（${変数}）を&lt;/code&gt;設定したりすることで、より柔軟に変数を使用できます。変数はアクションの&lt;strong&gt;ペイロードや&lt;/strong&gt; &lt;strong&gt;ボディだけ&lt;/strong&gt;でなく、ほとんどのアクションフィールドで利用できるようになりました。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1MD1SbGJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/variables-7d466ce2dfd4f14a521e2257ab92c582.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1MD1SbGJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/variables-7d466ce2dfd4f14a521e2257ab92c582.png" alt="Variables" width="800" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  データマッピングフィールドの改善
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;タイプ&lt;/strong&gt;機能強化&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;説明&lt;/strong&gt;ビジネスオブジェクトを作成し、メジャー（追跡したいデータ）またはディメンション（追跡するものをセグメント化する）を定義するとき、Illuminateにこのデータを探すべき場所を知らせるために、フィールド名をペイロードの実際のフィールドにマッピングする必要があります。これまでは、特定のペイロードフィールドの正確なマッピングを手動で入力する必要がありました。5月現在、Illuminateは、正確なPublishおよびApp Contextデータの場所を見つけるために、よりユーザーフレンドリーな&lt;a href="https://pubnub.com/docs/illuminate/business-objects/basics#data-mapping" rel="noopener noreferrer"&gt;ドロップダウンメニューを&lt;/a&gt;提供しています。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ml0E_Zqm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/json-menu-5f7606df253bb033f38a900b97f66626.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ml0E_Zqm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pubnub.com/assets/images/json-menu-5f7606df253bb033f38a900b97f66626.png" alt="JSON menu" width="774" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  その他
&lt;/h2&gt;

&lt;h3&gt;
  
  
  新しい検索とAIアシスタント
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;タイプ&lt;/strong&gt;新機能&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;説明&lt;/strong&gt;最後になりましたが、PubNubの学習アドベンチャーをより正確でインタラクティブなものにするために、ドキュメント内のAlgolia検索を新しい検索とAIアシスタントの組み合わせに変更しました。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kWNcuv_i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://pubnub.com/assets/images/search-88e1601c53cfce296c5b54947b3b32f5.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kWNcuv_i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://pubnub.com/assets/images/search-88e1601c53cfce296c5b54947b3b32f5.gif" alt="Search and AI Assistant" width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;新しいAIアシスタントと検索機能であなたのコーディングゲームをレベルアップし、友達を作りましょう。皆さんからのフィードバックをもとに改良していきますので、足りないものがあれば必ずアップデートします。ハッピーコーディング！🚀&lt;/p&gt;

</description>
      <category>pubnub</category>
      <category>documentation</category>
      <category>releases</category>
      <category>releasenotes</category>
    </item>
    <item>
      <title>データ・ストリーミング技術の概要</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Mon, 08 Jul 2024 09:47:05 +0000</pubDate>
      <link>https://forem.com/pubnub-jp/detasutoriminguji-shu-nogai-yao-3i3n</link>
      <guid>https://forem.com/pubnub-jp/detasutoriminguji-shu-nogai-yao-3i3n</guid>
      <description>&lt;p&gt;大量のデータ（ビッグデータ）をリアルタイムで処理する能力は、多くの組織にとって極めて重要になっており、そこで&lt;a href="https://www.pubnub.com/solutions/data-streaming/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;データ・ストリーミング・テクノロジーの&lt;/a&gt;出番となる。これらのテクノロジーにより、大量のデータをリアルタイムまたはほぼリアルタイムで処理することが可能になり、企業は即座に洞察を得て、一刻を争うデータ主導の意思決定を行うことができる。&lt;/p&gt;

&lt;p&gt;これらのテクノロジーの核心は、イベント・ストリームとも呼ばれるデータ・ストリームの概念である。データ・ストリームは、ソーシャルメディア・フィード、モノのインターネット（IoT）デバイス、ログ・ファイル、科学的データ・セットなど、さまざまなソースから生成されるシーケンスです。これらのデータ・ストリームは、データ・ストリーミング技術によって取り込まれ、処理される。&lt;/p&gt;

&lt;p&gt;もう一つの重要な側面は、データストリームのスケーラビリティである。データ量が増加するにつれて、テクノロジーは負荷の増加に対応できるように拡張され、企業はリアルタイムの分析結果を得ることができる。つまり、企業は生成されたデータを分析し、迅速な意思決定を行うことができる。これは、不正行為の検出や顧客体験の最適化など、タイミングが重要なシナリオで特に役立つ。&lt;/p&gt;

&lt;p&gt;データ・ストリーミング・テクノロジーは、SQLデータベースのような構造化データから、ライブ・イベントやソーシャルメディア・フィードのような非構造化データまで、さまざまな形式をサポートしているため、企業はソースや形式に関係なく、あらゆる種類のデータを処理・分析できる。例えば、実装と管理には高度なデータエンジニアリングスキルが必要で、特に大量のデータを扱う場合には低レイテンシーと高スループットが要求される。&lt;/p&gt;

&lt;h2&gt;
  
  
  データストリーミング技術の基本概念
&lt;/h2&gt;

&lt;p&gt;データ・ストリーミング・テクノロジーは、いくつかの基本概念の上に成り立っている。これらの概念を理解することは、リアルタイム・データ処理のパワーを十分に活用する上で極めて重要です：&lt;/p&gt;

&lt;h3&gt;
  
  
  データストリーム
&lt;/h3&gt;

&lt;p&gt;データ・ストリームは、IoTデバイス、ログ・ファイル、株式市場など、さまざまなソースからの連続的なデータ・フローです。これらのデータ・ソースは、多くの場合、リアルタイムまたはリアルタイムに近い高速でデータを生成し、生成されたデータは通常、時間に敏感である。&lt;/p&gt;

&lt;h3&gt;
  
  
  ストリーム処理
&lt;/h3&gt;

&lt;p&gt;ストリーム処理とは、データ・ストリームをリアルタイムで処理することである。スケジュールされた間隔でデータを処理するバッチ処理とは異なり、ストリーム処理はデータが到着するとすぐに処理する。このためレイテンシーが低く、ユーザーのポジション追跡や商品価格とその値に基づく意思決定など、時間に敏感なアプリケーションには不可欠です。&lt;/p&gt;

&lt;h3&gt;
  
  
  バッチ処理とストリーム処理
&lt;/h3&gt;

&lt;p&gt;バッチ処理とストリーム処理は、データ処理に対する2つの異なるアプローチを表している。バッチ処理は、一度に大量のデータをスケジュールされた間隔で処理し、時間に敏感でないデータ分析タスクに適しています。一方、ストリーム処理はデータが生成されるとすぐに処理し、リアルタイムの洞察を提供する。&lt;/p&gt;

&lt;p&gt;また、データ・ストリーム処理について語る際に「マイクロバッチ」という言葉を目にすることがあるが、このアプローチはバッチ処理とストリーム処理の中間に位置し、非常に新鮮なデータが必要な場合に用いられるが、必ずしもリアルタイムではない。&lt;/p&gt;

&lt;h2&gt;
  
  
  データ・ストリーミング・アーキテクチャ
&lt;/h2&gt;

&lt;p&gt;データ・ストリーミング技術の典型的なアーキテクチャには、データ・ソース、データ取り込みシステム、ストリーム処理システム、データ・ストレージ・システムが含まれる。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;データ・ソースはデータのストリームを生成する。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Apache KafkaやAmazon Kinesisのようなデータ取り込みシステムは、処理のためにこれらのデータストリームを取り込む。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Apache FlinkやApache Spark Streamingなどのストリーム・プロセッサーは、取り込まれたデータをリアルタイムで処理する。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;処理されたデータはデータレイクやデータウェアハウスに保存され、さらなる分析や可視化ダッシュボードに利用される。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;データは、&lt;a href="https://www.pubnub.com/developers/kafka/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;PubNub Kafkaブリッジなどの&lt;/a&gt;システムを使用して、ネットワークのエッジに直接ストリーミングすることができます。&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;データはデータパイプラインでソースからデスティネーションまでアーキテクチャを流れます。要するに、データ・パイプラインは、データの起点から取り込み、処理、そして最終的にストレージや可視化までのデータの旅を表している。&lt;/p&gt;

&lt;h3&gt;
  
  
  データの一貫性
&lt;/h3&gt;

&lt;p&gt;データの一貫性はデータ・ストリーミングにおける重要な関心事である。データ・ストリーミング・テクノロジーは、一貫性を確保するために、イベントの順序付け、完全一致処理、フォールト・トレランスなどの様々なテクニックを使用する。これらの技術は、データが正しい順序で処理され、データが失われたり複数回処理されたりすることがなく、データが失われることなくシステムが障害から回復できることを保証します。&lt;/p&gt;

&lt;p&gt;例えば、PubNubはリードレシート、メッセージ順序付け、キューイングなど、&lt;a href="https://www.pubnub.com/message-delivery-guarantee/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;メッセージ配信を保証&lt;/a&gt;するいくつかの方法を提供しています。&lt;/p&gt;

&lt;h3&gt;
  
  
  データストリーミング技術のためのツール
&lt;/h3&gt;

&lt;p&gt;データ・ストリーミング技術を実装するための様々なオープンソースおよび商用ツールが利用可能である。Apache Kafka、Apache Flink、AWS Kinesis、Microsoft Azure Stream Analyticsなどだ。各ツールにはそれぞれ長所と使用事例があり、ツールの選択はデータストリーミングアプリケーションの特定の要件に依存します。&lt;/p&gt;

&lt;h2&gt;
  
  
  PubNubデータストリーミングの次のステップ
&lt;/h2&gt;

&lt;p&gt;データストリーミング技術の基本的な概念とアーキテクチャを理解したら、次のステップはこれらの技術を自分のシステムに実装することです。PubNubは、既存のアーキテクチャに簡単に統合できる堅牢でスケーラブルなリアルタイムデータストリーミングプラットフォームを提供します。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YVmNlsZK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/4821PXPFoWt6Lxhru8nTx7/da5aee77c5ff80c7f351907b22b5fa4a/twitter_short.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YVmNlsZK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/4821PXPFoWt6Lxhru8nTx7/da5aee77c5ff80c7f351907b22b5fa4a/twitter_short.png" title="Data Streaming Demo image" alt="Image showing real-time data streaming" width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ここでは、PubNubデータストリーミングを始めるための手順を説明します：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;デモを見る&lt;/strong&gt;PubNubは&lt;a href="https://www.pubnub.com/demos/real-time-data-streaming/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;リアルタイムデータストリーミングのデモを&lt;/a&gt;提供しており、プラットフォームの仕組みを理解するのに役立ちます。このデモは、チャットアプリからIoTデバイス制御まで、幅広いユースケースに適用できます。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;基本を理解&lt;/strong&gt;する：PubNubは、&lt;a href="https://www.pubnub.com/learn/glossary/data-streaming/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;データストリーミングに関する&lt;/a&gt;項目を含む、主要な用語や概念を説明する包括的な用語集を提供しています。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;PubNub Illuminateを理解&lt;/strong&gt;する：&lt;a href="https://www.pubnub.com/products/illuminate/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;PubNub Illuminate&lt;/a&gt;を使用すると、オンザフライで収益化戦略を調整し、ユーザーの行動をインセンティブにリンクし、カスタム、リアルタイム集計およびデバイスメトリクスですべてのアクションを追跡し、即座に結果を確認することができます - すべてあなたの開発チームに負担をかけることなく。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;登録&lt;/strong&gt;PubNubアカウントに登録します。&lt;a href="https://admin.pubnub.com/#/register?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;登録&lt;/a&gt;ページから登録できます。PubNubアカウントの無料層は制限に余裕があり、アップグレードするまでクレジットカードを必要としません。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ビルドを開始&lt;/strong&gt;します：基本をマスターしたら、独自のデータストリーミングアプリケーションを構築しましょう。PubNubは、&lt;a href="https://www.pubnub.com/tutorials/real-time-data-streaming/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;リアルタイムデータストリーミングアプリケーションの構築に関するチュートリアルを&lt;/a&gt;含む、さまざまなタイプのアプリケーションの構築をガイドするチュートリアルのホストを提供しています。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;APIを探索&lt;/strong&gt;する：PubNubは、アプリケーションの構築に使用できる幅広いAPIとSDKを提供しています。詳細は&lt;a href="https://www.pubnub.com/docs/sdks?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;SDKドキュメントのページを&lt;/a&gt;ご覧ください。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;価格を理解&lt;/strong&gt;する：構築を完了する前に、どのくらいの費用がかかるかを知っておくと便利です。PubNubの価格についての詳細は&lt;a href="https://www.pubnub.com/pricing/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;価格&lt;/a&gt;ページをご覧ください。&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  データ・ストリーミング・テクノロジーのユースケースを詳しく見る
&lt;/h2&gt;

&lt;h3&gt;
  
  
  リアルタイムデータ分析
&lt;/h3&gt;

&lt;p&gt;データ・ストリーミング・テクノロジーの主なユースケースの1つは、リアルタイムのデータ分析です。データ・ストリームをリアルタイムで処理・分析することで、企業は業務に関する洞察を即座に得て、情報に基づいた迅速な意思決定を行うことができる。これは金融などの業界で特に有用で、リアルタイムデータ分析は不正行為の検出や市場動向分析などに利用できます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/products/illuminate/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;PubNub Illuminateは&lt;/a&gt;リアルタイム分析プラットフォームの一例である。しかし、PubNub Illuminateは単なるデータ管理のためのプラットフォームではなく、データメトリクスに基づいて条件を定義することもでき、その条件がトリガーされると、そのデータに基づいて動的なアクションが実行されます。&lt;/p&gt;

&lt;h3&gt;
  
  
  モノのインターネット（IoT）
&lt;/h3&gt;

&lt;p&gt;データ・ストリーミング・テクノロジーのもう一つの重要なアプリケーションは、モノのインターネット（IoT）で、デバイスがデータ・ストリームを生成し、それをリアルタイムで処理して貴重な洞察を提供することができます。例えば、産業機器の性能を監視することで、企業は機器の故障につながる前に問題を検出し、対処することができる。&lt;/p&gt;

&lt;h3&gt;
  
  
  ソーシャルメディア分析
&lt;/h3&gt;

&lt;p&gt;ソーシャルメディア・プラットフォームは、毎秒大量のデータを生成します。データ・ストリーミング技術は、このデータをリアルタイムで処理できるため、企業はトレンドを監視し、顧客の感情を追跡し、顧客のフィードバックに即座に対応することができます。&lt;/p&gt;

&lt;h3&gt;
  
  
  電子商取引
&lt;/h3&gt;

&lt;p&gt;Eコマース業界では、データ・ストリーミング技術はリアルタイムで顧客の行動を追跡することができ、企業はパーソナライズされた推奨を提供し、顧客体験を改善し、売上を増加させることができます。&lt;/p&gt;

&lt;h2&gt;
  
  
  データストリーミング技術の今後の動向
&lt;/h2&gt;

&lt;h3&gt;
  
  
  機械学習やAIとの統合
&lt;/h3&gt;

&lt;p&gt;データ・ストリーミング技術の重要なトレンドの1つは、機械学習と生成AIの統合である。機械学習モデルは、正確でタイムリーな予測を行うために必要なリアルタイムのデータを提供することができる。これは特に予知保全に有用で、機械学習モデルはリアルタイムのデータに基づいて部品の故障を予測することができる。例えば、モバイル機器のバッテリーの放電サイクルは、バッテリーの予想寿命を推定するために使用することができる。&lt;/p&gt;

&lt;h3&gt;
  
  
  オープンソース・フレームワークの利用拡大
&lt;/h3&gt;

&lt;p&gt;Apache Kafka、Apache Flink、Spark Streamingなどのオープンソースのフレームワークは、データストリーミング技術を実装するための一般的なツールとなっている。これらのフレームワークは、大量のデータをリアルタイムで処理するための堅牢な機能を提供し、オープンソースの性質上、高度にカスタマイズ可能で、さまざまなユースケースに適応できる。今後、これらのフレームワークやその他のオープンソース・フレームワークの利用が増えると予想される。&lt;/p&gt;

&lt;h3&gt;
  
  
  データ・セキュリティとプライバシーの重視の高まり
&lt;/h3&gt;

&lt;p&gt;企業が機密データを処理するためにデータ・ストリーミング・テクノロジーにますます依存するようになるにつれ、データ・セキュリティとプライバシーがより重視されるようになるだろう。これには、データ・ストリームを不正アクセスから保護し、データ・プライバシー規制を確実に遵守するための強固なセキュリティ対策の導入が含まれる。&lt;/p&gt;

&lt;h3&gt;
  
  
  より高度なデータエンジニアリング技術
&lt;/h3&gt;

&lt;p&gt;ストリーム処理、データ・パイプラインの最適化、データの一貫性の確保など、エンジニアがこのテクノロジーに習熟するにつれて、より高度なデータ・エンジニアリング技術が登場すると予想される。&lt;/p&gt;

&lt;h2&gt;
  
  
  結論
&lt;/h2&gt;

&lt;p&gt;データ・ストリーミング・テクノロジーの未来は明るい。リアルタイムでより優れた業務上の洞察をビジネスに提供することで、過去のデータに頼ることなく即座に行動を起こすことができ、顧客満足度、効率性、収益性が向上する。顧客管理、eコマース、IoT、ソーシャルメディア分析など、業種を問わず、データ・ストリーミング技術はビジネスのあり方を変革する可能性を秘めている。&lt;/p&gt;

&lt;p&gt;PubNubは、ストリーミングデータによるビジネスの変革をお手伝いします。PubNubの開発に関するどのようなことでも、&lt;a href="//mailto:devrel@pubnub.com"&gt;devrel@pubnub.com&lt;/a&gt;、DevRelチームまたは&lt;a href="https://support.pubnub.com/hc/en-us?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;サポート&lt;/a&gt;チームまでお気軽にお問い合わせください。&lt;/p&gt;

&lt;h1&gt;
  
  
  PubNubはどのようにお役に立ちますか？
&lt;/h1&gt;

&lt;p&gt;この記事は&lt;a href="https://www.pubnub.com/blog/data-streaming-technologies-overview/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;PubNub.comに&lt;/a&gt;掲載されたものです。&lt;/p&gt;

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

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

&lt;h2&gt;
  
  
  PubNubを体験
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/tour/introduction/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;ライブツアーを&lt;/a&gt;チェックして、5分以内にすべてのPubNub搭載アプリの背後にある本質的な概念を理解する&lt;/p&gt;

&lt;h2&gt;
  
  
  セットアップ
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://admin.pubnub.com/signup/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;PubNubアカウントに&lt;/a&gt;サインアップすると、PubNubキーに無料ですぐにアクセスできます。&lt;/p&gt;

&lt;h2&gt;
  
  
  始める
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;PubNubのドキュメントは&lt;/a&gt;、ユースケースや&lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;SDKに&lt;/a&gt;関係なく、あなたを立ち上げ、実行することができます。&lt;/p&gt;

</description>
    </item>
    <item>
      <title>OpenAIによるチャット・モデレーション</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Wed, 03 Jul 2024 15:27:08 +0000</pubDate>
      <link>https://forem.com/pubnub-jp/openainiyorutiyatutomoderesiyon-5f9o</link>
      <guid>https://forem.com/pubnub-jp/openainiyorutiyatutomoderesiyon-5f9o</guid>
      <description>&lt;p&gt;&lt;a href="https://www.pubnub.com/solutions/chat/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;アプリ内チャットを&lt;/a&gt;含むアプリケーションは、ユーザーが交換できるメッセージを規制し、モデレートする何らかの方法が必要です。 人間のモデレーターですべての不適切なコンテンツをモデレートすることは不可能なので、モデレーション・システムは自動的でなければなりません。 ユーザーはモデレーションを回避しようとすることが多いので、機械学習、生成AI、大規模言語モデル（LLM）［およびGPT-3やGPT-4などのGPTモデル］は、コンテンツをモデレートする一般的な方法です。&lt;/p&gt;

&lt;p&gt;モデレーションは複雑なトピックであり、PubNubはすべての開発者のユースケースを満たすために様々なソリューションを提供しています。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/serverless/functions/overview?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;PubNubファンクションは&lt;/a&gt;、宛先に到達する前にメッセージをインターセプトして変更することができます。外部REST APIを呼び出すなど、Function内でカスタムロジックを適用することができ、メッセージモデレーションに任意の外部サービスを使用することができます。 この記事ではOpenAIと統合するためにこのアプローチを使用します。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;PubNub Functionsは、&lt;a href="https://www.pubnub.com/integrations/lasso-moderation/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;Lasso Moderation&lt;/a&gt;、&lt;a href="https://www.pubnub.com/integrations/tisane-labs-nlp/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;Tisane&lt;/a&gt;、&lt;a href="https://www.pubnub.com/integrations/chat-message-profanity-filter/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;RegExベースの冒涜フィルタ&lt;/a&gt;、&lt;a href="https://www.pubnub.com/integrations/lexalytics/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;Lexalytics&lt;/a&gt;、&lt;a href="https://www.pubnub.com/integrations/communitysift/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;Community Siftなど&lt;/a&gt;、コンテンツモデレーションとセンチメント分析をサポートする&lt;a href="https://www.pubnub.com/integrations/?page=1&amp;amp;sortBy=Most%20recent&amp;amp;utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;カスタム統合を&lt;/a&gt;提供します。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;PubNubのBizOps Workspaceは、メッセージの編集と削除を含む&lt;a href="https://www.pubnub.com/how-to/monitor-and-moderate-conversations-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;会話の監視とモデレーションを&lt;/a&gt;行うことができます。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Open AIモデレーション・エンドポイント
&lt;/h2&gt;

&lt;p&gt;この記事では、&lt;a href="https://platform.openai.com/docs/guides/moderation/overview"&gt;OpenAIのModeration APIについて見て&lt;/a&gt;いく。このAPIは、人工知能（AI）を使用して、提供されたテキストに有害な用語が含まれているかどうかを判断するREST APIである。 このAPIの意図は、開発者が有害なコンテンツをフィルタリングまたは削除できるようにすることであり、執筆時点では、英語しかサポートしていないが、&lt;strong&gt;無料で&lt;/strong&gt;提供されている。&lt;/p&gt;

&lt;p&gt;Moderation APIの背後にあるモデルは、提供されたテキストを次のように分類します（&lt;a href="https://platform.openai.com/docs/guides/moderation/overview"&gt;APIドキュメントから&lt;/a&gt;引用）：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ヘイト：&lt;/strong&gt;人種、性別、民族、宗教、国籍、性的指向、障害の有無、カーストに基づくヘイトを表明、扇動、促進するコンテンツ。保護されていないグループ（例：チェスプレイヤー）に向けた憎悪のコンテンツは、ハラスメントです。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;憎悪／脅迫：&lt;/strong&gt;人種、性別、民族性、宗教、国籍、性的指向、障害の状態、またはカーストに基づき、対象となるグループに対する暴力または深刻な危害も含む憎悪的な内容。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ハラスメント：&lt;/strong&gt;あらゆるターゲットに対して嫌がらせの言葉を表現、扇動、促進するコンテンツ。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ハラスメント／脅迫：&lt;/strong&gt;暴力や深刻な危害を含むハラスメントコンテンツ。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;自傷行為：&lt;/strong&gt;自殺、切り傷、摂食障害などの自傷行為を助長、奨励、描写するコンテンツ。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;自傷／意図：&lt;/strong&gt;自殺、切断、摂食障害などの自傷行為に関与している、または関与する意思があることを表明するコンテンツ。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;自傷／指示：&lt;/strong&gt;自殺、切断、摂食障害などの自傷行為の実行を奨励する内容、またはそのような行為の実行方法について指示や助言を与える内容。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;性的なもの：&lt;/strong&gt;性行為の描写など性的興奮を喚起する内容、または性的サービスを宣伝する内容（性教育や健康増進を除く）。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;性的／未成年：&lt;/strong&gt;18歳未満の個人を含む性的コンテンツ。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;暴力：&lt;/strong&gt;死、暴力、身体的傷害を描写するコンテンツ。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;暴力 / グラフィック：&lt;/strong&gt;死、暴力、身体的傷害を生々しく描写したコンテンツ。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;結果は以下のようなJSON構造で提供されます（これもAPIドキュメントから引用）：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;modr-XXXXX&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;model&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text-moderation-007&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;results&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;flagged&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;categories&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sexual&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hate&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;harassment&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;self-harm&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sexual/minors&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hate/threatening&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;violence/graphic&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;self-harm/intent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;self-harm/instructions&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;harassment/threatening&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;violence&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;category_scores&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;//  Out of scope for this article&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  PubNubからOpen AI Moderation APIを呼び出す
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;モデレーションAPIを任意のPubNubアプリケーションに統合するには&lt;/strong&gt;、このステップバイステップのチュートリアルに従って&lt;strong&gt;PubNub Functionsを使用して簡単に&lt;/strong&gt;できます：&lt;/p&gt;

&lt;p&gt;関数を使用すると、メッセージの送受信など、PubNubプラットフォームで発生するリアルタイムのイベントをキャプチャできます。その後、必要に応じてメッセージを変更、再ルーティング、補強、またはフィルタリングするために、これらの関数内にカスタムサーバーレスコードを記述できます。&lt;/p&gt;

&lt;p&gt;この関数タイプはメッセージが配信される&lt;em&gt;前に&lt;/em&gt;呼び出され、メッセージが受信者に配信されるようにリリースされる前に実行を終了する必要があります。 PubNubの&lt;a href="https://www.pubnub.com/docs/serverless/functions/overview#what-function-type-to-use?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;ドキュメントには&lt;/a&gt;より多くの背景と詳細が記載されていますが、要約すると、"Before Publish or Fire "は&lt;em&gt;メッセージまたはそのペイロードを変更&lt;/em&gt;できる同期呼び出しです。&lt;/p&gt;

&lt;h3&gt;
  
  
  PubNub関数を作成する
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;PubNub&lt;a href="https://admin.pubnub.com?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;管理ポータルに&lt;/a&gt;ログインし、モデレートしたいアプリのアプリケーションとキーセットを選択します。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Build'タブの下にある'Functions'を選択します。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;CREATE NEW MODULE'を選択し、モジュールに名前と説明を付けます。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;CREATE NEW FUNCTION'を選択し、関数に名前を付けます。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;イベントタイプに'Before Publish or Fire'を選択する。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;チャンネル名には「&lt;strong&gt;*」を&lt;/strong&gt;入力します（このデモでは&lt;strong&gt;「*」を&lt;/strong&gt;使用しますが、アプリケーションによってはここでモデレートしたいチャンネルのみを指定することもできます）。&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;PubNub関数を作成したら、Open AI APIキーをシークレットとして提供する必要があります。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;MY SECRETS'を選択し、'OPENAI_API_KEY'という名前で新しいキーを作成します。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open&lt;a href="https://platform.openai.com/account/api-keys"&gt;AI APIキーを生成&lt;/a&gt;し、そのキーがmoderate APIにアクセスできることを確認します。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;生成したAPIキーを先ほど作成したPubNub関数のsecretに渡します。&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;PubNub関数の本体は以下のようになります：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;xhr&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;xhr&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;vault&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vault&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;messageText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;getOpenaiApiKey&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;apiKey&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;openAIModeration&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;messageText&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;aiResponse&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;//  Append the response to the message&lt;/span&gt;
        &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;openAiModeration&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;aiResponse&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="c1"&gt;//  If the message was harmful, you might also choose to report the message here.&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
      &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;OPENAI_API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getOpenaiApiKey&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Use cached key&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="c1"&gt;// Fetch key from vault&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;vault&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;apikey&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;OPENAI_API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;apikey&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;openAIModeration&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;messageText&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.openai.com/v1/moderations&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;http_options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;method&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;headers&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Authorization&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;body&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;input&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;messageText&lt;/span&gt;
    &lt;span class="p"&gt;}),&lt;/span&gt;
    &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;9500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;retries&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;xhr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;http_options&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Open AI Timed out&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;関数自体は非常に簡単です：&lt;/p&gt;

&lt;p&gt;受信した各メッセージに対して&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;受け取った各メッセージをOpen AIモデレーション関数に渡す&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;返されたモデレーションオブジェクトをメッセージ(JSON)オブジェクトの新しいキーとして追加する。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;関数を保存し、モジュールが起動していることを確認します。&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  遅延
&lt;/h3&gt;

&lt;p&gt;今作成したPubNub関数はメッセージが送信されるたびに同期的に実行され、関数の実行が終了するまでそのメッセージは配信されません。 関数には外部APIへの呼び出しが含まれているため、配信レイテンシはOpen AIへのAPI呼び出しが返す速度に依存します。&lt;/p&gt;

&lt;p&gt;ユーザーエクスペリエンスの低下を軽減する方法はいくつかある。ほとんどのデプロイメントでは、メッセージが送信されたことを送信者に即座にフィードバックし、メッセージが配信された（または報告された）ことを示すリードレシートに依存しています。&lt;/p&gt;

&lt;h3&gt;
  
  
  クライアント・アプリケーションの更新
&lt;/h3&gt;

&lt;p&gt;典型的なチャットアプリのほとんどの機能を表示するために&lt;a href="https://www.pubnub.com/docs/chat/overview?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;PubNub Chat SDKを&lt;/a&gt;使用するReactアプリケーションである&lt;a href="https://www.pubnub.com/demos/chat/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;Chat Demoを&lt;/a&gt;使用して、アプリケーション内でモデレーションペイロードを処理するために必要なものを考えてみましょう。&lt;/p&gt;

&lt;p&gt;潜在的に有害なメッセージを表示すべきかどうかを追跡する属性を設定します：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;showHarmfulMessage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setShowHarmfulMessage&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;また、有害な可能性のあるメッセージをデフォルトで表示しないようにするためのロジックを、この場合は&lt;a href="https://github.com/PubNubDevelopers/Chat-SDK-Demo-Web/blob/90447262583c251c983f04f23ffb23adcbbd6d25/chat-sdk-demo-web/app/chat/ui-components/message.tsx"&gt;message.tsx&lt;/a&gt;内に追加します：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{(&lt;/span&gt;
  &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;openAiModeration&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; 
  &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;openAiModeration&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;flagged&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; 
  &lt;span class="nx"&gt;showHarmfulMessage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;
&lt;span class="p"&gt;)}&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;showHarmfulMessage&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; 
  &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;openAiModeration&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;flagged&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; 
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;span&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Message&lt;/span&gt; &lt;span class="nx"&gt;contains&lt;/span&gt; &lt;span class="nx"&gt;potentially&lt;/span&gt; &lt;span class="nx"&gt;harmful&lt;/span&gt; &lt;span class="nx"&gt;content&lt;/span&gt; 
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;span&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text-blue-400 cursor-pointer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; 
    &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;setShowHarmfulMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)}}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Reveal&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/span&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/span&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ygaqd9Nx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/1qmBAFCDiDwwKdp7TLSCaw/516d3b1de50c22784996f1e43a65fdc7/Screenshot_2024-07-01_at_10.59.58.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ygaqd9Nx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/1qmBAFCDiDwwKdp7TLSCaw/516d3b1de50c22784996f1e43a65fdc7/Screenshot_2024-07-01_at_10.59.58.png" title="Chat Moderation with OpenAI - Image 01" alt="Chat Moderation with OpenAI - Image" width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;これらの変更は&lt;a href="https://www.pubnub.com/demos/chat/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;チャットデモの&lt;/a&gt; &lt;strong&gt;ホストされた&lt;/strong&gt;バージョンには存在しませんが、&lt;a href="https://github.com/PubNubDevelopers/Chat-SDK-Demo-Web/blob/main/README.md"&gt;ReadMe には&lt;/a&gt;チャットデモをビルドし、自分のキーセットから実行するための&lt;a href="https://github.com/PubNubDevelopers/Chat-SDK-Demo-Web/blob/main/README.md"&gt;完全なインストラクションが含まれて&lt;/a&gt;います。&lt;/p&gt;

&lt;h2&gt;
  
  
  まとめ
&lt;/h2&gt;

&lt;p&gt;これで、Open AI を使ってアプリケーションにモデレーションとセンチメント分析の両方を追加する手軽で簡単な（そして無料の）方法ができました。&lt;/p&gt;

&lt;p&gt;Open AIとPubNubの統合の詳細については、以下の他のリソースをチェックしてください：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.pubnub.com/blog/openai-gpt-api-integration-with-functions/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;OpenAI GPT APIと関数の統合&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.pubnub.com/blog/build-a-chatbot-with-pubnub-and-chatgpt-openai/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;PubNubとChatGPTでチャットボットを構築&lt;/a&gt;する（PubNubショーケースにチャットボットを追加する）&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.pubnub.com/blog/enhance-geo-app-with-pubnub-and-openai-chatgpt/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;PubNubとChat GPT / OpenAIでジオ・アプリを強化する&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;あなたのPubNub開発のどのような側面についても、&lt;a href="//mailto:devrel@pubnub.com"&gt;devrel@pubnub.com&lt;/a&gt;、お気軽にDevRelチームに連絡するか、または私たちの&lt;a href="https://support.pubnub.com/hc/en-us?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;サポート&lt;/a&gt;チームにお問い合わせください。&lt;/p&gt;

&lt;h1&gt;
  
  
  PubNubはどのようにお役に立ちますか？
&lt;/h1&gt;

&lt;p&gt;この記事は&lt;a href="https://www.pubnub.com/blog/chat-moderation-with-openai/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;PubNub.comに&lt;/a&gt;掲載されたものです。&lt;/p&gt;

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

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

&lt;h2&gt;
  
  
  PubNubを体験
&lt;/h2&gt;

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

&lt;h2&gt;
  
  
  セットアップ
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://admin.pubnub.com/signup/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;PubNubアカウントに&lt;/a&gt;サインアップすると、PubNubキーに無料ですぐにアクセスできます。&lt;/p&gt;

&lt;h2&gt;
  
  
  始める
&lt;/h2&gt;

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

</description>
    </item>
    <item>
      <title>イルミネーションを使ってゲームバランスを調整する方法</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Wed, 03 Jul 2024 06:41:02 +0000</pubDate>
      <link>https://forem.com/pubnub-jp/iruminesiyonwoshi-tutegemubaransuwodiao-zheng-surufang-fa-3cob</link>
      <guid>https://forem.com/pubnub-jp/iruminesiyonwoshi-tutegemubaransuwodiao-zheng-surufang-fa-3cob</guid>
      <description>&lt;p&gt;PubNubの最新製品リリースであるIlluminateは、ゲーム開発者、プロダクトマネージャー、プロジェクトマネージャーがPubNubプラットフォーム内で構築、反復、実験できるように構築したスケーラブルな意思決定ツールです。&lt;/p&gt;

&lt;p&gt;優れたUIで一から設計されたIlluminateを使用することで、より良いゲーマー体験を促進し、収益化を加速させるための意思決定をリアルタイムで行うことができます。&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;では、ゲームバランスとは何か、リアルタイムでどのように使えるのか？&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;ゲームバランスとは、難易度と公平性のバランスを取ることでゲームプレイとユーザー体験を向上させるゲームデザインの一分野です。ゲームバランスは、ゲームの報酬、チャレンジ、および/または要素を調整して、意図されたプレイヤー体験を作り出します。&lt;/p&gt;

&lt;p&gt;ゲームバランスは一般的に、プレイヤーに公平性をもたらすものとして理解されています。これには以下が含まれます；&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;難易度の調整&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;勝敗条件の変更&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ゲーム状態&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;経済バランス&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ゲームバランスの調整に関する詳しい情報は &lt;a href="https://en.wikipedia.org/wiki/Game_balance"&gt;ウィキペディア&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;ゲームバランシングをリアルタイムで使用することで、プレイヤーを飽きさせず、新規プレイヤーを歓迎し、ゲームプレイを収益化できる可能性があります。&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Illuminateはどのようにプレイヤーを夢中にさせることができますか？&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;前述したように、Illuminateはその場での意思決定ツールです。 プレイヤーを飽きさせないために、私たちは新規プレイヤー、つまりゲームに初めて参加し、ゲームの進め方に慣れるために手助けが必要になる可能性のあるプレイヤーに焦点を当てます。&lt;/p&gt;

&lt;p&gt;この例では、JavaScriptで書かれた昔ながらのasteroidsのコピーをPubNub関数でホストしています。PubNub関数については&lt;a href="https://www.pubnub.co"&gt;https://www.pubnub.co&lt;/a&gt; &lt;a href="https://www.pubnub.com/docs/serverless/functions/overview?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;m/docs/serverless/functions/overview。&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;まず、シーンを設定します。&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;新しいプレイヤーがあなたのゲームに参加し、プレイを始めたとします。彼らは負けてしまい、進行のなさに飽き始めたとします。&lt;/p&gt;

&lt;p&gt;パブリッシュを経由して、ゲームからPubNubにプレイヤーの進行状況とスコアをIlluminateに通知するメッセージを送ることができます。Illuminateは事前に定義された指標に基づいていくつかの決定を下し、そのプレイヤーに3つのライフを購入するか、2つのライフを得る代わりに有料プロモーションを視聴するオプションを提供するメッセージを送り返します。&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;画面を見てみよう。&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dvjKtS3o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5ELOgmKIhdlJDGcsRfeLRr/ea1c9bd24814904ca26d9add6fd150ce/image2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dvjKtS3o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5ELOgmKIhdlJDGcsRfeLRr/ea1c9bd24814904ca26d9add6fd150ce/image2.png" title="Use Illuminate to Balance your Games - Image - 01" alt="Use Illuminate to Balance your Games" width="800" height="579"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ゲームは通常通りスタートするが、ご覧の通り、私は本当に優れたプレーヤーではなく、わずか70点で死んでしまった。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Wa3NuixJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/25ixCXROWywRJGXEfuZ1ww/f674cfdcbe0452c50e9a4006b61407cb/image3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Wa3NuixJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/25ixCXROWywRJGXEfuZ1ww/f674cfdcbe0452c50e9a4006b61407cb/image3.png" title="Use Illuminate to Balance your Games - Image - 02" alt="Use Illuminate to Balance your Games" width="800" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;イルミネイトは私がプレイを続けられるように、この点数を受け取り、ライフを買うか、広告を見てライフを得る機会を提供するべきだと計算した。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rJbLh6TP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/6JROao8WMMGqV8dfKIj3XV/e584b545d64fc7edde4332e76c3b2d2b/image5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rJbLh6TP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/6JROao8WMMGqV8dfKIj3XV/e584b545d64fc7edde4332e76c3b2d2b/image5.png" title="Use Illuminate to Balance your Games - Image - 03" alt="Use Illuminate to Balance your Games" width="800" height="509"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;お金を使うことを選んだ私は、ライフを買うことができ、すぐにゲームに戻ることができた。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2wJApHCr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5tUDTkcymTnRqZfkLobWly/1e8982bd6b68b3a1e183e8e292f1c809/image4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2wJApHCr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5tUDTkcymTnRqZfkLobWly/1e8982bd6b68b3a1e183e8e292f1c809/image4.png" title="Use Illuminate to Balance your Games - Image - 04" alt="Use Illuminate to Balance your Games" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;イルミネートの舞台裏&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;IlluminateはPubNubのアカウントポータル &lt;a href="https://admin.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;https://admin.pubnub.com/、&lt;/a&gt;"Optimize "の下にあります。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HEU8DB6M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/2N5rjdq2zVsuvvJNcihzEV/e924e81bf6edade34287bfd7308524c5/image7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HEU8DB6M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/2N5rjdq2zVsuvvJNcihzEV/e924e81bf6edade34287bfd7308524c5/image7.png" title="Use Illuminate to Balance your Games - Image - 05" alt="Use Illuminate to Balance your Games" width="291" height="227"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;まず最初に、Business Objectsを調べます。Business ObjectsはIlluminateにデータを取り込む方法で、どのようなデータをどこから取り込む必要があるかを定義するのに役立ちます。&lt;/p&gt;

&lt;p&gt;メジャーを追加することで追跡したいデータを定義し、ディメンションを追加することでそのデータをどのようにセグメント化したいかを定義できます。&lt;/p&gt;

&lt;p&gt;セットアップやIlluminateのセットアップの理解についてヘルプが必要な場合は、 &lt;a href="https://www.pubnub.com/docs/illuminate/basics?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;https://www.pubnub.com/docs/illuminate/basics&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;ゲームのバランスを取るには、何を追跡したいのか、新しいプレーヤーを引きつけるために何を提供したいのかという知識が必要です。&lt;/p&gt;

&lt;p&gt;コーディングすることなく、変数を追加、削除、修正することで、さまざまなプレイヤーに提供するものに磨きをかけ、調整することもできる。&lt;/p&gt;

&lt;p&gt;この単純な例では、ゲームのスコアを測定することにしたが、他の測定も簡単に追加できる；&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;プレーヤーはゲストか、それともゲームプラットフォームにアカウントを持っているか。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;総プレイ時間&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;デバイスの種類 - ウェブ、モバイルテレビ&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;過去のイベントやゲームで、御社から何かを購入したことがあるか。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;私のビジネス目標に戻り、私が取り組んでいる施策をお見せしましょう。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oozHcE3I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5j3WZoN5vgm83pxBmPwqbo/86b0b2ded611de919de4f73b7f061447/image6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oozHcE3I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/5j3WZoN5vgm83pxBmPwqbo/86b0b2ded611de919de4f73b7f061447/image6.png" title="Use Illuminate to Balance your Games - Image - 06" alt="Use Illuminate to Balance your Games" width="800" height="698"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;これを分解すると&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;施策：&lt;/strong&gt;測定または加算できる数値。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;次元：&lt;/strong&gt;尺度を区分するために使用できる定性的な値。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;メトリクス：&lt;/strong&gt;選択したディメンションによってセグメント化されたメジャーの集約。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;デシジョン：&lt;/strong&gt;条件とアクションのコレクション。条件が満たされると、対応するアクションがトリガされます。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ダッシュボード：&lt;/strong&gt;メトリクスと意思決定を視覚化するリアルタイム・チャートのコレクション。&lt;/p&gt;

&lt;p&gt;私の例では、スコアが500点以下のときにクライアントがイルミネイトに助けを求めていることを1つの指標として使っています。&lt;/p&gt;

&lt;p&gt;そして、これを意思決定にマッピングした：「プレーヤーが500点以下の場合、ライフを購入するか広告を見る機会を提供する。&lt;/p&gt;

&lt;p&gt;プレーヤーが広告を見るか、ライフを購入するかを選択すると、それが指標としてフィードバックされ、ダッシュボードに表示されます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vdC8zk66--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/1s61i2Z2ILWGnj4HUhnvPr/f117994e40465a9c34ae34fea2ad8e76/image1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vdC8zk66--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pubnub.com/cdn/3prze68gbwl1/1s61i2Z2ILWGnj4HUhnvPr/f117994e40465a9c34ae34fea2ad8e76/image1.png" title="Use Illuminate to Balance your Games - Image - 07" alt="Use Illuminate to Balance your Games" width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;これが私のゲームバランスダッシュボードの簡略図です。どのプレーヤーが500点未満になったか、どのプレーヤーが広告を見る代わりにライフの支払いを選択したかを追跡していることがわかります。&lt;/p&gt;

&lt;p&gt;ここでも、複雑さを拡大する余地は非常に広い；&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;もしライフが安ければ、より多くのプレーヤーがライフのためにお金を払うだろうか？&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;30秒の広告を見るか、3分の広告を見るか？&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;対従来のアプローチ？&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;ストラテジーゲーム？オンラインゲーム？すべてのプレイヤーにゲーム体験とゲームメカニクスのバランスをとるには、長いプロセスが必要です。ローンチ前には、様々なゲーム要素をプレイテストし、導入チュートリアルを作成し、プレイヤーの行動に基づいて、プレイ時間を最大化し、ゲームが簡単すぎるのを防ぐための漸進的なレベルデザインを確保します。ローンチ後は、プレイヤーのフォーラムを監視し、プレイヤーの定着率やプレイヤーの行動を分析し、バランスの問題に対処するためのパッチをリリースします！&lt;/p&gt;

&lt;p&gt;これは非常に長い分析とリリースサイクルになる可能性があり、Illuminateが役立つのはこの点です。ゲームの種類に関係なく、リアルタイムで決定を下すことができます：FPSやRPGのようなマルチプレイヤーゲーム、Steamのシングルプレイヤー格闘ゲーム、League of Legendsのようなバトルアリーナなどです。ビデオゲームがオンラインであり、その瞬間の行動によってプレイヤーのバランスに影響を与えることができる限り、Illuminateはプレイヤー体験を向上させることができる。&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;まとめ&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;PubNubのIlluminateを使ってゲームバランスを調整することは、あなたのアプリに即座の意思決定リアクションやツールを導入し、プレイヤー体験をより優れたものにするための、コード不要で迅速な方法です。&lt;/p&gt;

&lt;p&gt;リアルタイムアクションを使った初めてのゲーム作成について詳しく知りたい方は、 &lt;a href="https://www.pubnub.com/products/Illuminate-gaming/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;ゲーム用Illuminate&lt;/a&gt;ページと&lt;a href="https://www.pubnub.com/docs/illuminate/basics?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;ドキュメントを&lt;/a&gt;ご覧ください。次回のGDCカンファレンスでPubNubを使って作ったものをぜひお聞かせください！&lt;/p&gt;

&lt;h1&gt;
  
  
  PubNubはあなたのお役に立ちますか？
&lt;/h1&gt;

&lt;p&gt;この記事は&lt;a href="https://www.pubnub.com/blog/how-to-use-illuminate-to-balance-your-games/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;PubNub.comに&lt;/a&gt;掲載されたものです。&lt;/p&gt;

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

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

&lt;h2&gt;
  
  
  PubNubを体験
&lt;/h2&gt;

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

&lt;h2&gt;
  
  
  セットアップ
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://admin.pubnub.com/signup/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;PubNubアカウントに&lt;/a&gt;サインアップすると、PubNubキーに無料ですぐにアクセスできます。&lt;/p&gt;

&lt;h2&gt;
  
  
  始める
&lt;/h2&gt;

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

</description>
    </item>
    <item>
      <title>Google Maps APIを使ったJavaScriptの位置情報トラッキング</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Fri, 31 May 2024 14:22:55 +0000</pubDate>
      <link>https://forem.com/pubnub-jp/google-maps-apiwoshi-tutajavascriptnowei-zhi-qing-bao-toratukingu-1047</link>
      <guid>https://forem.com/pubnub-jp/google-maps-apiwoshi-tutajavascriptnowei-zhi-qing-bao-toratukingu-1047</guid>
      <description>&lt;p&gt;キーワードをシームレスに埋め込んだ最新のブログ記事はこちら。&lt;/p&gt;

&lt;p&gt;Google Maps JavaScript APIとPubNubを使ってジオロケーション機能を備えたライブのリアルタイム・ウェブ・アプリケーションを作成する4つのセグメント・シリーズの完結編です。チュートリアルでは、JavaScriptとPubNubを使って飛行経路を生成するユーザーエクスペリエンスを説明します。&lt;/p&gt;

&lt;p&gt;これがどのように実装されているかの例については、PubNubのウェブサイトにある私たちの&lt;a href="https://showcase.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;ショーケースのデモを&lt;/a&gt;チェックしてください。リアルタイムトラッキングでPubNubをどのように組み込むかについては、Geolocationデモに移動します。デモのコードは&lt;a href="https://github.com/PubNubDevelopers/PubNub-Showcase/tree/main/web/geolocation"&gt;Githubを&lt;/a&gt;ご覧ください。&lt;/p&gt;

&lt;h2&gt;
  
  
  フライトパスとは何ですか？
&lt;/h2&gt;

&lt;p&gt;この&lt;strong&gt;チュートリアルで&lt;/strong&gt;実装されているフライトパスは&lt;strong&gt;ポリラインの&lt;/strong&gt;ことで、&lt;strong&gt;モバイルデバイスや&lt;/strong&gt;ウェブブラウザ上の地図上に&lt;strong&gt;ユーザーが指定したポイントを通るパスを動的に描画&lt;/strong&gt;することができます。このポリラインは、&lt;strong&gt;HTML5 Geolocation APIと&lt;/strong&gt; &lt;strong&gt;Google Maps APIに&lt;/strong&gt;不可欠であり、移動パターンを追跡します。&lt;/p&gt;

&lt;h2&gt;
  
  
  チュートリアルの概要
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/blog/javascript-mapping-javascript-tracking/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;パート1、&lt;/a&gt; &lt;a href="https://www.pubnub.com/blog/javascript-google-maps-api-map-markers/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;2&lt;/a&gt;、&lt;a href="https://www.pubnub.com/blog/javascript-google-maps-api-location-publishing/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;3&lt;/a&gt;、、&lt;a href="https://www.pubnub.com/blog/javascript-mapping-javascript-tracking/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;JavaScript環境のセットアップ&lt;/a&gt;、&lt;a href="https://www.pubnub.com/blog/javascript-google-maps-api-map-markers/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;マップマーカーと&lt;/a&gt; &lt;a href="https://www.pubnub.com/blog/javascript-google-maps-api-location-publishing/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;ロケーショントラッキングについて&lt;/a&gt;説明しました。&lt;/p&gt;

&lt;p&gt;それができたら、次のパートに進んでください。&lt;/p&gt;

&lt;h2&gt;
  
  
  コードのチュートリアル
&lt;/h2&gt;

&lt;p&gt;まずは &lt;code&gt;let\&lt;/code&gt; 変数 &lt;code&gt;map\&lt;/code&gt;、&lt;code&gt;mark\&lt;/code&gt;、&lt;code&gt;lineCoords\&lt;/code&gt; を定義して、マップ、マーカー、ポリラインの&lt;strong&gt;座標&lt;/strong&gt;オブジェクトを保持することから始めましょう。こうすることで、PubNubのイベントに合わせて調整することができる。続いて、&lt;a href="https://developers.google.com/maps/documentation/javascript/overview"&gt;Google Maps JavaScript APIが&lt;/a&gt;読み込みを開始したときに使用できる &lt;code&gt;initialize\&lt;/code&gt; コールバックを定義します。YOUR_GOOGLE_MAPS_API_KEY`は実際の&lt;strong&gt;APIキーに置き換えて&lt;/strong&gt;ください。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;js&lt;br&gt;
let map;&lt;br&gt;
let mark;&lt;br&gt;
let lineCoords = [];&lt;br&gt;
let initialize = function() {&lt;br&gt;
  map  = new google.maps.Map(document.getElementById('map-canvas'), {center:{lat:lat,lng:lng},zoom:12});&lt;br&gt;
  mark = new google.maps.Marker({position:{lat:lat, lng:lng}, map:map});&lt;br&gt;
};&lt;br&gt;
window.initialize = initialize;&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;さて、'redraw' イベントハンドラで、geolocation の `getCurrentPosition()` メソッドを呼び出して、新しい位置情報をその場で更新します。&lt;/p&gt;

&lt;h3&gt;
  
  
  緯度経度
&lt;/h3&gt;

&lt;p&gt;次にredrawイベントハンドラを定義し、新しい位置が変更されたイベントを受信したときに呼び出します。関数の最初の部分では、緯度と経度をメッセージからの新しい値に設定します。次に、マップ、マーカー、ポリラインオブジェクトの適切なメソッドを呼び出して、位置を更新し、線の端に追加し、マップを再配置します。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;js&lt;br&gt;
var redraw = function(payload) {&lt;br&gt;
  lat = payload.message.lat;&lt;br&gt;
  lng = payload.message.lng;&lt;br&gt;
  map.setCenter({lat:lat, lng:lng, alt:0});&lt;br&gt;
  mark.setPosition({lat:lat, lng:lng, alt:0});&lt;br&gt;
  lineCoords.push(new google.maps.LatLng(lat, lng));&lt;br&gt;
  var lineCoordinatesPath = new google.maps.Polyline({&lt;br&gt;
    path: lineCoords,&lt;br&gt;
    geodesic: true,&lt;br&gt;
    strokeColor: '#2E10FF'&lt;br&gt;
  });&lt;br&gt;
  lineCoordinatesPath.setMap(map);&lt;br&gt;
};&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  PubNubの初期化
&lt;/h2&gt;

&lt;p&gt;コールバックを定義した後、&lt;strong&gt;iOS、Android、JavaScript、.NET、Java、Ruby、Python、PHPなどの&lt;/strong&gt;技術スタックにわたって&lt;strong&gt;携帯電話、タブレット、ブラウザ&lt;/strong&gt;、&lt;strong&gt;ラップトップで&lt;/strong&gt;動作するPubNubリアルタイム・データ・ストリーミング機能を初期化する。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;js&lt;br&gt;
const pnChannel = "map3-channel";&lt;br&gt;
const pubnub = new PubNub({&lt;br&gt;
  publishKey:   'YOUR_PUB_KEY',&lt;br&gt;
  subscribeKey: 'YOUR_SUB_KEY'&lt;br&gt;
});&lt;br&gt;
pubnub.subscribe({channels: [pnChannel]});&lt;br&gt;
pubnub.addListener({message:redraw});&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;PubNubのリアルタイムチャネルでのトピックの&lt;strong&gt;公開と&lt;/strong&gt; &lt;strong&gt;購読&lt;/strong&gt;機能は、効率的なデータストリーミング機能を提供します。&lt;/p&gt;

&lt;h2&gt;
  
  
  緯度/経度のパブリッシュ
&lt;/h2&gt;

&lt;p&gt;この簡単なチュートリアルでは、基本的なJavaScriptのインターバル・タイマーをセットアップして、現在時刻に基づいて新しい位置をパブリッシュします。500ミリ秒ごとに、指定したPubNubチャンネルに新しい緯度経度オブジェクト（北東移動座標）をパブリッシュする匿名コールバック関数を呼び出します。あなたのアプリでは、おそらくライブのデバイスの位置やユーザーが報告した位置から位置を取得することになるでしょう。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;js&lt;br&gt;
setInterval(function() {&lt;br&gt;
  pubnub.publish({channel:pnChannel, message:{lat:window.lat + 0.001, lng:window.lng + 0.01}});&lt;br&gt;
}, 500);&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;最後に、Google Maps APIを初期化して、DOM要素とJavaScriptの前提条件が満たされていることを確認します。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`js&lt;/p&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  まとめ
&lt;/h2&gt;

&lt;p&gt;このチュートリアルシリーズでは、Google&lt;a href="https://developers.google.com/maps/documentation/javascript/overview"&gt;Maps API&lt;/a&gt;と&lt;a href="https://www.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;PubNubが&lt;/a&gt;ウェブアプリやモバイルアプリでリアルタイムの位置情報をトラッキングするために非常にうまく連携する方法を紹介しました。これは&lt;strong&gt;Uberや&lt;/strong&gt; &lt;strong&gt;Lyftの&lt;/strong&gt;ようなライドヘイリングサービスがリアルタイムで車両の動きを表示するのと似ている。&lt;/p&gt;

&lt;h2&gt;
  
  
  PubNubを体験する
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/tour/introduction/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;ライブツアーを&lt;/a&gt;チェックして、5分以内にすべてのPubNub搭載アプリの背後にある本質的な概念を理解してください。&lt;a href="https://github.com/PubNubDevelopers"&gt;GitHubページや&lt;/a&gt;Webサイトで公開されている体験談から、ユーザーの体験を直接聞くことができます。&lt;/p&gt;

&lt;h2&gt;
  
  
  セットアップ
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://admin.pubnub.com/#/login?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;PubNubアカウントに&lt;/a&gt;サインアップすると、PubNubキーに無料ですぐにアクセスできます。&lt;/p&gt;

&lt;h2&gt;
  
  
  始める
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;PubNubのドキュメントは&lt;/a&gt;、ユースケースに関係なく、あなたを立ち上げ、実行することができます。私たちは、JavaScriptのGoogle Maps APIと私たちのSDKでリアルタイムトラッキングとそれらを使用する方法に特化したセクションがあります。&lt;/p&gt;

</description>
    </item>
    <item>
      <title>コグニティブ・サービスのユースケースを探る</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Fri, 31 May 2024 13:56:18 +0000</pubDate>
      <link>https://forem.com/pubnub-jp/koguniteibusabisunoyusukesuwotan-ru-59h6</link>
      <guid>https://forem.com/pubnub-jp/koguniteibusabisunoyusukesuwotan-ru-59h6</guid>
      <description>&lt;p&gt;コグニティブ・サービスによって変貌を遂げたアプリや企業の例、そしてコグニティブ・サービスがテクノロジーの展望をどれほど変えつつあるのか、今後のユースケースをいくつか見ていこう。&lt;/p&gt;

&lt;p&gt;AWS、IBM、Microsoft Azureのようなクラウド大手のコグニティブ・サービスのおかげで、あらゆる規模の開発者チームが、驚異的なパワーを持つ&lt;a href="https://pubnub.com/resources/ebook/building-apps-with-cognitive-services/" rel="noopener noreferrer"&gt;コグニティブ・サービスに&lt;/a&gt;アクセスできるようになった。APIを通じて提供されるこれらのサービスにより、次世代のインテリジェンスをアプリケーションに注入することが容易になります。&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;チャットとソーシャル・インタラクション&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;2015年、チャットアプリの月間アクティブユーザー数はソーシャルネットワークのそれを上回り、その差は広がり続けている。実際、メッセージングはソーシャルネットワークそのものに不可欠な機能となっている。そして、この急速な成長とともに、メッセージングアプリは、短いテキストベースのメッセージを送受信するためのシンプルなツールから、驚くような楽しい機能を誇る革新的でフル機能のエクスペリエンスへと進化してきた。そして、そのイノベーションを推進しているのがコグニティブAPIだ。&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;チャットボットとコグニティブ・コンピューティング&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;チャットボットは、AIアルゴリズムの最も初期の形態の1つである。すぐにチューリング・テストに合格する可能性は低いが、音声対応アプリケーションの自然な進化を表している。かつてはサポート・ラインに電話をかけ、買掛金支払いのために1を押していたのが、今ではあなたの意図を識別できるシステムに完全な文章で話すことができる。&lt;/p&gt;

&lt;p&gt;あなたが知っているかどうかにかかわらず、企業が待ち時間の短縮、顧客体験の向上、人間の電話オペレーターのコストの最小化を求めているため、チャットボットの採用は爆発的に増加している。現在、チャットボットは主に単純なタスクを処理するために使用されている。基本的な要求を理解し、事前に定義されたルールに基づいて応答する。"注文はどこですか？"や "チャットボット、ムードライトを付けてください "といった質問に答える。&lt;/p&gt;

&lt;p&gt;しかし、&lt;a href="https://www.ibm.com/cloud/watson-assistant/" rel="noopener noreferrer"&gt;Watson Assistantや&lt;/a&gt; &lt;a href="https://aws.amazon.com/lex/" rel="noopener noreferrer"&gt;Amazon Lexの&lt;/a&gt;ようなAPIを使えば、自然言語のリクエストで観察されたパターンにロジックを適用できるサービスを簡単に構築できる。これらのサービスは、例えば、離陸遅延に悩む空港からの突然の電話ラッシュを観察し、フライトの再スケジュールを優先するようにオプションの順序を変更することができる。あるいは、特定の国や地域からの電話が異なる言語で行われる傾向があることを察知し、それに応じてデフォルトを変更することもできる。また、文法的なパターンを識別して、すぐにスーパーバイザーに転送するよう顧客に指示することもできる。&lt;/p&gt;

&lt;p&gt;音声認識、音声合成、顔認識、機械学習モデルを使用したインテリジェントな会話インターフェースは、様々な目的に応じて、非常に魅力的な体験や、まるで生きているかのような会話を提供することができる。さらに良いことに、チャットボットはそれらの経験から学習する。&lt;/p&gt;

&lt;p&gt;チャットボットは、銀行、買い物、学習の方法を変えるだろう。レコメンデーションを行い、抽象的な概念を理解し、過去の関わりに基づいて個人を知る。最終的には、人間と話しているかどうかさえわからなくなるほど、チャットボットは優秀になるでしょう。&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;コード例ホームオートメーションチャットボット&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;WatsonとPubNub ChatEngineを使えば、スマートホームを制御する&lt;a href="https://www.pubnub.com/docs/chat/samples?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;人工知能を搭載したチャットボットを&lt;/a&gt;簡単に作ることができます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2Fasset-17suaysk1qa1j6q%2F194c3f35c69c92190fb678a82720e014%2Fchatengine-home-automation.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2Fasset-17suaysk1qa1j6q%2F194c3f35c69c92190fb678a82720e014%2Fchatengine-home-automation.jpg" title="chatengine home automation"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;このチュートリアルでは、テキストコマンドを受け付け、それを解析し、それに基づいてアクションを起こすチャットボットの作り方を紹介します。例えば、ユーザーが「リビングの電気をつけて」と入力すると、ボットが電気をつけます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;

  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;homeauto_intents&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; 
  &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;intent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;turnOFF&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;examples&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Put off&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Switch off&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Turn off&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;description&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Turn on intents&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;intent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;turnON&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;examples&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Put on&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Switch on&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Turn on&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;description&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Turn off intents&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;自然言語処理&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;データサイエンスと自然言語処理（NLP）は、大量の自然言語データを有益に処理できるAIソリューションの総称である。NLPは、意味論的な観点から単語や文法を測定するだけでなく、メッセージごとの分析を通じて、ユーザーがトピックやテーマについてどのように感じているかを明らかにし、センチメントや感情を割り出すことができる。&lt;/p&gt;

&lt;p&gt;NLPは、数分のうちに評判が決まったり決まらなかったりする時代に、ユーザーの意見を理解し、それに対応する必要のあるブランド、公人、組織にとって、大きなメリットとなる。あるブランドが製品の新しいコマーシャルを打ち出したとしよう。適切なコグニティブ・サービスを使用することで、特定のハッシュタグや製品名に関するソーシャルメディア・ストリームを利用し、NLP APIに関連するすべてのメッセージを分析させ、製品に対する一般ユーザーの反応に関するフィードバックを提供することができる。&lt;/p&gt;

&lt;p&gt;以下は、ツイッター上で米国の政治家について人々がどう感じたかを分析し、測定するために設計されたアプリの例である。特定のキーワードやフレーズを監視し、定義された地理的地域のユーザーの感情をプロットすることができる。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdownloads.ctfassets.net%2F3prze68gbwl1%2Fasset-17suaysk1qa1j6r%2F92344c256d72ebba547a73bdf5c30441%2F1_d_i_gD52jeJi71ihWIt9rA-1.gif%3Fw%3D700%26h%3D550" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdownloads.ctfassets.net%2F3prze68gbwl1%2Fasset-17suaysk1qa1j6r%2F92344c256d72ebba547a73bdf5c30441%2F1_d_i_gD52jeJi71ihWIt9rA-1.gif%3Fw%3D700%26h%3D550" title="1 d i gD52jeJi71ihWIt9rA 1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;例えば、あるユーザーが "I am happy "というテキストを投稿したとする。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;session_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I am happy!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ワトソンはそのテキストを分析し、次のように返す：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;session_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I am happy!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;session_sentiment&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;overall&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.879998&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;positive&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
         &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;count&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
         &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;avg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.879998&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;negative&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
         &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;count&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
         &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;avg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;neutral&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
         &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;count&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
         &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;avg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="p"&gt;},&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;score&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.88006828&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ブランドはすでに、市場のセンチメント分析に多額の費用を費やしている。これらのシステムがよりインテリジェントになり、堅牢になり、自動化されれば、より低コストで一般大衆をはるかに理解できるようになるだろう。&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;eコマース&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;オンライン・ショッピングは商品の購入方法を完全に変えたが、eコマースには実店舗の重要な要素である「親切な従業員」が欠けている。オンラインストアの規模では、ライブチャットに実際のスタッフを配置することは経済的に実行可能ではありません。&lt;/p&gt;

&lt;p&gt;その結果、多くのオンラインストアは、経験を最適化し、買い物客の質問を支援し、推奨し、チェックアウトするために、インテリジェントなショッピングアシスタントボットに目を向けています。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://wersm.com/nordstrom-ruled-holidays-with-its-amazing-chatbot/" rel="noopener noreferrer"&gt;Nordstromは&lt;/a&gt;、単純な事前定義された質問と答えを超えて、顧客が何を探しているかを真に理解し、必要に応じて支援するためにコグニティブサービスを使用したメッセンジャーチャットボットで、&lt;a href="https://wersm.com/nordstrom-ruled-holidays-with-its-amazing-chatbot/" rel="noopener noreferrer"&gt;以前のホリデーシーズンを席巻&lt;/a&gt;しました。このチャットボットは、おすすめのギフトを提案し、注文を完了する手助けをすることもできる。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2Fasset-17suaysk1qa1j6t%2F720950f250125abd6e6be3c136c6306b%2Fnordstrombot.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2Fasset-17suaysk1qa1j6t%2F720950f250125abd6e6be3c136c6306b%2Fnordstrombot.png" title="nordstrombot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;チャットボットはまた、簡単な問題に対処するために担当者を1時間も待たせる、カスタマーサポートの恐ろしい電話から私たちを救ってくれる。アマゾンはチャットボットを配備しており、ほとんどの顧客が注文に関して助けを必要としているときに抱える些細な問題を解決することができる。&lt;/p&gt;

&lt;p&gt;さて、今日の現実世界におけるインテリジェンスの例をいくつか見てきたところで、未来を覗いて、コグニティブ・サービスが将来どのように私たちの世界を変えていくかを見てみよう。&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;スマートシティ&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;未来の都市は、より安全で、より効率的で、より環境に配慮したものにするために、さまざまな統合インテリジェント・サービスに依存するようになるだろう。画像認識、コンピュータ・ビジョン、ビジョンAPIは、この変革において重要な役割を果たし、都市空間内の画像を処理してアクションを起こす。&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;農業&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;世界の人口は増加の一途をたどっており、数十億の人々に食料を供給することは、今後数年間でかなりの課題となる。コグニティブ・サービスは、畑や工場を管理する上で重要な役割を果たし、インテリジェントな決定を下し、これまでにない精度でリソースを制御できるようになる。&lt;/p&gt;

&lt;p&gt;スマートファームとIoTは、できるだけ多くの貴重なデータポイントを組み込んで、一見直感に反するようなものであっても、インテリジェントな農業上の意思決定を行う。例えば、リアルタイムの気象データ、遠隔センサーデータ、過去の実績を集約することで、コグニティブサービスは個々の灌漑計画を完璧なものにし、毎日固有の状況に合わせて更新することができる。&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;データ・セキュリティ&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;コネクテッド化が進み、デジタル・ライフが物理的なライフを凌駕するにつれ、データ・プライバシーとセキュリティは、漠然と意識するものから、不穏で常に存在する個人的脅威へと変化している。&lt;/p&gt;

&lt;p&gt;規制や規則-HIPAA、GDPR、SOC II-は、企業や組織が適切なガードレールを確保するための1つの方法です。このような複雑な規制を詳細に実施するのは大変なことだが、そこで機械学習が活躍する。&lt;/p&gt;

&lt;p&gt;コグニティブ・サービスは、規則や規制を理解し、理解できるように訓練し、コンプライアンスを達成するための方法を提案することができる。コグニティブ・サービスは、関連する規則や法律からコンテンツのモデレーションに至るまで、データ・セキュリティに関する貴重な洞察を提供することを可能にします。&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;ヘルスケア&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;ヘルスケア業界では、厳しいマージン、厳しい規制、サイロ化された研究開発など、いくつかの理由により、イノベーションの進展が他業界よりも遅いのが一般的です。コグニティブ・サービスは、イノベーションの障壁を取り除き、組織から患者までのデリバリー・システムを改善する機会を提供する。&lt;/p&gt;

&lt;p&gt;医療における意思決定は通常、患者ごとにサイロ化された形で行われる。対照的に、コグニティブ・サービスは、健康に影響を与える要因（社会経済的状況、環境、医療へのアクセスなど）を包括的に分析し、それに基づいて行動する。コグニティブ・サービスは、健康やウェルネス・プログラムなど、より的確で的を絞った患者ケアを医師に推奨することができる。&lt;/p&gt;

&lt;p&gt;コグニティブ・サービスは、医療機関内の既存システムの統合と接続を推進し、本質的な洞察を引き出すことができる。データを集約し、利害関係者のニーズを結びつけることができるようになったことで、組織はより効率的な運営を行いながら、より良いケアを提供することができる。&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;インテリジェンスの今&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;この記事では、コグニティブ・サービスがビジネスに対する考え方やアプリケーションが果たす役割をどのように変えていくのか、そのほんの一例を紹介したに過ぎない。これまでは、ソフトウェアは指示に従った。コグニティブ・サービスによって、ソリューションは適応し、進化し、ほんの数年前には不可能と思われたようなことを成し遂げることができる。すべての意味を見通すことはできませんが、私たちが知っている限りでは、ビジネスへの影響が大きく、ポジティブなものになることは間違いありません。&lt;/p&gt;

&lt;h1&gt;
  
  
  PubNubはどのようにお役に立てるでしょうか？
&lt;/h1&gt;

&lt;p&gt;この記事は&lt;a href="https://www.pubnub.com/blog/the-many-uses-of-cognitive-services/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;PubNub.comに&lt;/a&gt;掲載されたものです。&lt;/p&gt;

&lt;p&gt;PubNubのプラットフォームは、開発者がウェブアプリ、モバイルアプリ、IoTデバイス向けにリアルタイムのインタラクティブ機能を構築、提供、管理できるよう支援します。&lt;/p&gt;

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

&lt;h2&gt;
  
  
  PubNubを体験
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/tour/introduction/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;ライブツアーを&lt;/a&gt;チェックして、5分以内にすべてのPubNub搭載アプリの背後にある本質的な概念を理解する&lt;/p&gt;

&lt;h2&gt;
  
  
  セットアップ
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://admin.pubnub.com/signup/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;PubNubアカウントに&lt;/a&gt;サインアップすると、PubNubキーに無料ですぐにアクセスできます。&lt;/p&gt;

&lt;h2&gt;
  
  
  始める
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;PubNubのドキュメントは&lt;/a&gt;、ユースケースや&lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;SDKに&lt;/a&gt;関係なく、あなたを立ち上げ、実行することができます。&lt;/p&gt;

</description>
    </item>
    <item>
      <title>GitHub ダッシュボードのコミットをリアルタイムで追跡する</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Thu, 30 May 2024 19:24:39 +0000</pubDate>
      <link>https://forem.com/pubnub-jp/github-datusiyubodonokomitutoworiarutaimudezhui-ji-suru-364f</link>
      <guid>https://forem.com/pubnub-jp/github-datusiyubodonokomitutoworiarutaimudezhui-ji-suru-364f</guid>
      <description>&lt;p&gt;ソフトウェア開発の領域では、リアルタイムのC3.jsチャートが組織内の活動を監視する効果的な方法を提供します。エンジニアリング・チームにとって、追跡可能なメトリクスの一つは GitHub のコミットです。このブログでは、GitHub の API を利用して GitHub のコミット・データを取得し、リアルタイムでインタラクティブなグラフに表示する方法を説明します。HTML、Javascript、CSSのパワーを活用し、PubNubを使ってGitHubダッシュボードを作成し、コミットデータをストリーミングします。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pubnub.com/blog/building-realtime-live-updating-animated-graphs-c3-js/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;リアルタイムの C3.js チャートについては、素晴らしいチュートリアルが&lt;/a&gt;あります。では、さっそく見ていこう！&lt;/p&gt;

&lt;h2&gt;
  
  
  リアルタイム GitHub ダッシュボードの作り方
&lt;/h2&gt;

&lt;p&gt;リアルタイム GitHub ダッシュボードを作るには、GitHub リポジトリのような様々なデータソースに接続し、必要な依存関係を処理する必要があります。セキュアなコーディングやデータの暗号化など、必要なサイバーセキュリティ対策を意識しましょう。業界標準のセキュリティ・プロトコルに従うことは必須です。&lt;/p&gt;

&lt;p&gt;ステップバイステップのガイドはこちら：&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub ウェブフックを追加する
&lt;/h3&gt;

&lt;p&gt;ウェブフックをセットアップするには、以下の手順に従ってください：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;GitHub リポジトリを作成するか、既存の git リポジトリを使用する。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ページの右側にある 'Settings' をクリックします。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ページの左側にある '&lt;a href="https://www.pubnub.com/learn/glossary/what-is-a-webhook/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;Webhooks&lt;/a&gt;' をクリックします。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;右上の 'Add Webhook' をクリックします。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GitHub がパスワードを要求しますので、入力してください。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Payload URL'の下に:&lt;strong&gt;&lt;a href="http://pubnub-git-hook.herokuapp.com/github/ORG-NAME/TEAM-NAME" rel="noopener noreferrer"&gt;http://pubnub-git-hook.herokuapp.com/github/ORG-NAME/TEAM-NAME&lt;/a&gt;&lt;/strong&gt; と入力します。ORG-NAME は組織名に、TEAM-NAME はレポを管理しているチームに置き換えてください。&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F3ClKsiJfxkUjxO6wIEgADI%2F51ef64eb2a41df60ba14db62255e2c70%2FScreenshot_2024-05-30_at_3.09.23_PM.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F3ClKsiJfxkUjxO6wIEgADI%2F51ef64eb2a41df60ba14db62255e2c70%2FScreenshot_2024-05-30_at_3.09.23_PM.png" title="Github Webhook Settings"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ビジュアル・ダッシュボードを読み込む
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://pubnub.github.io/git-commits-ui/" rel="noopener noreferrer"&gt;このページにアクセスして&lt;/a&gt;ください。PubNubダッシュボード経由で送信されたすべてのコミットのリストが表示されます！GitHub にコミットをプッシュすると、数十ミリ秒以内に GitHub のコミットダッシュボードにメッセージが表示され、グラフがリアルタイムで更新されます。&lt;/p&gt;

&lt;h2&gt;
  
  
  Github コミットダッシュボードの作り方
&lt;/h2&gt;

&lt;p&gt;このダッシュボードは、GitHub、PubNub Data Stream Network、&lt;a href="https://c3js.org/" rel="noopener noreferrer"&gt;C3.jsによる&lt;/a&gt;D3チャートビジュアライゼーションをマッシュアップしたものです。コミットがGitHubにプッシュされると、コミットのメタデータは小さなHerokuインスタンスに投稿され、PubNubネットワークに公開されます。&lt;a href="https://pubnub.github.io/git-commits-ui/" rel="noopener noreferrer"&gt;私たちはGitHubのページでダッシュボードのページをホストしています。&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;HerokuインスタンスはGitHubからコミットデータを受け取ると、&lt;strong&gt;pubnub-gitという&lt;/strong&gt;チャンネルでpublicなpublish/subscribeキーを使ってPubNubにそのデータの概要をpublishします。&lt;a href="https://www.pubnub.com/docs/console/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;pubnub-git チャネルは、開発者コンソールで監視することが&lt;/a&gt;できます。&lt;/p&gt;

&lt;p&gt;これがメッセージのペイロードの例です：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt; 
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;drnugent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;avatar_url&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://avatars.githubusercontent.com/u/857270?v=3&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;num_commits&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;team&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;team-pubnub&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;org&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pubnub&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;time&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1430436692806&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;repo_name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;drnugent/test&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;マジックの後半は、ダッシュボードが&lt;strong&gt;subscribe コールバックを通して&lt;/strong&gt;この情報を受け取るときに起こります。ダッシュボードのソースを見ると、このようなコードがあります：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;subscribe&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pubnub-git&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;displayLiveMessage&lt;/span&gt;

&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;この subscribe 呼び出しによって、&lt;strong&gt;pubnub-git&lt;/strong&gt;チャネルでメッセージを受信するたびに JavaScript の関数&lt;strong&gt;displayLiveMessage()&lt;/strong&gt;が呼び出されるようになります。displayLiveMessage() はコミットのプッシュ通知をログの先頭に追加し、C3 の可視化チャートを更新します。&lt;/p&gt;

&lt;p&gt;しかし、ダッシュボードが最初にロードされたとき、どのように入力されるのでしょうか？&lt;/p&gt;

&lt;h2&gt;
  
  
  PubNub Storage &amp;amp; Playback APIをダッシュボードに活用する
&lt;/h2&gt;

&lt;p&gt;PubNubは送信された各メッセージの記録を保持し、&lt;a href="https://www.pubnub.com/products/pubnub-platform/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;Storage &amp;amp; Playback（History）APIを&lt;/a&gt;使用してそれらの保存されたメッセージにアクセスする方法を開発者に提供します。ウェブダッシュボードの奥深くに、次のようなコードがあります：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;displayMessages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ms&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ms&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;displayMessage&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;history&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pubnub-git&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;displayMessages&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;これは、pubnub-git チャンネルで送信された直近の 1,000 通のメッセージを取得するためのリクエストです。つまり、これらのメッセージが送信されたときにウェブダッシュボードがオフラインだったとしても、それを取得し、そのデータを使ってあたかもダッシュボードが常時オンラインであったかのように表示することができるのです。&lt;/p&gt;

&lt;p&gt;この機能は、携帯電話ネットワーク上のモバイル・アプリやコネクテッド・カーなど、接続が断続的で不安定なデバイスを扱う場合に特に有効だ。PubNubネットワークのおかげで、私たちの可視化ダッシュボードはアプリケーションの状態を保存するバックエンドを必要としません。&lt;/p&gt;

&lt;h2&gt;
  
  
  独自のGitHubダッシュボードを構築する
&lt;/h2&gt;

&lt;p&gt;Githubダッシュボードのビルドを開始するには、github.comのGit Commit UIリポジトリをフォークし、READMEに従ってセットアップ手順を確認してください。オープンソースコミュニティのコラボレーションの一環として、プルリクエストを歓迎します。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2Fasset-17suaysk1qa1huv%2F16fe7d9c1c2eb1d0d182c33c37a40f57%2F687474703a2f2f692e696d6775722e636f6d2f4d524b32304b622e676966.gif%3Fw%3D700%26h%3D550" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2Fasset-17suaysk1qa1huv%2F16fe7d9c1c2eb1d0d182c33c37a40f57%2F687474703a2f2f692e696d6775722e636f6d2f4d524b32304b622e676966.gif%3Fw%3D700%26h%3D550" title="687474703a2f2f692e696d6775722e636f6d2f4d524b32304b622e676966"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  リアルタイムダッシュボードの今後の動向と発展
&lt;/h2&gt;

&lt;p&gt;リアルタイム・ダッシュボードと関連技術の最後のトレンドと開発に目を向け続けることは非常に重要である。リアルタイムデータ伝送のためのウェブソケット、即時の洞察のための通知の使用、様々なワークフローでのリアルタイムダッシュボードの使用などが含まれます。&lt;/p&gt;

&lt;h2&gt;
  
  
  PubNubの体験
&lt;/h2&gt;

&lt;p&gt;PubNubは多くのクライアントがリアルタイムアプリケーションで成功を収めるのを支援してきました。例えば、LinkedInのリアルタイム通知システム...&lt;/p&gt;

&lt;h2&gt;
  
  
  セットアップ
&lt;/h2&gt;

&lt;p&gt;PubNubアカウントにサインアップすると、PubNubキーに無料ですぐにアクセスできます。PubNubアカウントで利用可能な最新機能には...&lt;/p&gt;

&lt;h2&gt;
  
  
  始める
&lt;/h2&gt;

&lt;p&gt;私たちの包括的な&lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;PubNubドキュメントは&lt;/a&gt;、ユースケースや&lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;SDKに&lt;/a&gt;関係なく、すぐに立ち上げて実行することができます。&lt;/p&gt;

&lt;p&gt;PubNubは、ユーザーエクスペリエンスを向上させるユーザーフレンドリーなプラットフォームを提供します。私たちのサービスは、シームレスな統合プロセスのために開発者を念頭に置いて設計されています。&lt;/p&gt;

&lt;p&gt;私たちはあなたのリアルタイム開発の旅をよりスムーズで効率的にするためにここにいることを忘れないでください。ペイロードのURLを設定して、始めましょう！&lt;/p&gt;

&lt;p&gt;公式ドキュメントや権威ある情報源は、情報の妥当性を確認するためにブログ記事全体で参照することができます。&lt;/p&gt;

&lt;h1&gt;
  
  
  PubNubはどのようにお役に立ちますか？
&lt;/h1&gt;

&lt;p&gt;この記事は&lt;a href="https://www.pubnub.com/blog/tracking-realtime-github-dashboard-commits/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;PubNub.comに&lt;/a&gt;掲載されたものです。&lt;/p&gt;

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

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

&lt;h2&gt;
  
  
  PubNubを体験
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/tour/introduction/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;ライブツアーを&lt;/a&gt;チェックして、5分以内にすべてのPubNub搭載アプリの背後にある本質的な概念を理解する&lt;/p&gt;

&lt;h2&gt;
  
  
  セットアップ
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://admin.pubnub.com/signup/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;PubNubアカウントに&lt;/a&gt;サインアップすると、PubNubキーに無料ですぐにアクセスできます。&lt;/p&gt;

&lt;h2&gt;
  
  
  始める
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;PubNubのドキュメントは&lt;/a&gt;、ユースケースや&lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;SDKに&lt;/a&gt;関係なく、あなたを立ち上げ、実行することができます。&lt;/p&gt;

</description>
    </item>
    <item>
      <title>BizOps Workspaceでチャットとユーザーを安全にモデレートする方法</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Thu, 23 May 2024 09:52:03 +0000</pubDate>
      <link>https://forem.com/pubnub-jp/bizops-workspacedetiyatutotoyuzawoan-quan-nimoderetosurufang-fa-469l</link>
      <guid>https://forem.com/pubnub-jp/bizops-workspacedetiyatutotoyuzawoan-quan-nimoderetosurufang-fa-469l</guid>
      <description>&lt;p&gt;このハウツー記事は、&lt;a href="https://pubnub.com/docs/bizops-workspace/basics?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;BizOps Workspaceと&lt;/a&gt;総称されるPubNubのデータ管理機能について説明する一連の記事の一部です：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://pubnub.com/how-to/manage-users-and-channels-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;BizOps Workspaceでユーザとチャネルを管理する方法&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://www.pubnub.com/how-to/monitor-and-moderate-conversations-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;BizOps Workspaceでユーザーとチャンネルを管理する方法&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  BizOps Workspaceで会話とユーザーを安全に管理する方法&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;BizOps Workspaceは、アプリケーションの管理に役立つ一連のツールです。 この記事では、前回の「&lt;a href="https://www.pubnub.com/how-to/monitor-and-moderate-conversations-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;BizOps Workspaceで会話を監視してモデレート&lt;/a&gt;する方法」を発展させ、手動モデレーション機能、つまりリアルタイムで会話を監視し、ユーザーをミュートまたは禁止する機能を備えたエンドツーエンドのセキュアなチャット・アプリケーションを紹介します。&lt;/p&gt;

&lt;p&gt;この記事は単独でも読むことができますが、ここで説明するコンセプトの背景をよりよく理解するために、前回の「&lt;a href="https://www.pubnub.com/how-to/monitor-and-moderate-conversations-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;BizOps Workspaceで会話を監視してモデレートする方法&lt;/a&gt;」の記事を読むことを強くお勧めします。&lt;/p&gt;

&lt;h2&gt;
  
  
  チャネルモニタとは何ですか？
&lt;/h2&gt;

&lt;p&gt;チャンネルモニターは、チャットモデレーターが複数のチャンネルでリアルタイムに行われている会話のライブプレビューを見ることができます。もしモデレーターが、行儀の悪いユーザーや攻撃的なメッセージなど、何か不穏なものを発見したら、問題を緩和するためにすぐに行動することができます。&lt;/p&gt;

&lt;p&gt;モデレーターは、どのようなアクションを取るかについて、多くの柔軟性を持っています：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  アクセス権を制限せずにユーザーを観察する&lt;/li&gt;
&lt;li&gt;  問題のあるメッセージを編集または削除する&lt;/li&gt;
&lt;li&gt;  そのユーザーのメッセージ公開を制限する&lt;a href="https://pubnub.com/docs/bizops-workspace/channel-monitor#mute?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;（ミュート&lt;/a&gt;する）&lt;/li&gt;
&lt;li&gt;  メッセージの閲覧または公開を制限する&lt;a href="https://pubnub.com/docs/bizops-workspace/channel-monitor#ban?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;（禁止する）&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Monitor "機能では、手動でメッセージを確認したり、手動でユーザーをミュートしたりすることができます。この記事では自動モデレーションについては説明しません。&lt;/p&gt;

&lt;p&gt;チャネルモニタを使用するには、PubNubキーセットでいくつかの機能を有効にする必要があります。特に、&lt;a href="https://www.pubnub.com/docs/general/metadata/channel-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;App contextと&lt;/a&gt; &lt;a href="https://www.pubnub.com/docs/general/storage?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;Message persistenceは&lt;/a&gt;最低限必要です。 詳細については、&lt;a href="https://www.pubnub.com/how-to/monitor-and-moderate-conversations-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;前の記事の&lt;/a&gt;「Channel Monitorのキーセットの要件」を参照してください。&lt;/p&gt;

&lt;h2&gt;
  
  
  PubNubアクセスマネージャとは何ですか？
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;開発者は、モデレーションシステムを回避しようとするユーザーから保護する必要が&lt;/strong&gt;あります。これはPubNubアクセスマネージャを使用して実現されます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/general/security/access-control?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;アクセスマネージャを&lt;/a&gt;使用すると、指定されたユーザー（または複数のユーザー）の権限と、指定されたリソースに対して実行できるアクションを記述する一連のルールを定義できます。 例えば&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  IDが&lt;code&gt;123の&lt;/code&gt;ユーザはチャネル&lt;code&gt;456の&lt;/code&gt;読み書き権限がある。&lt;/li&gt;
&lt;li&gt;  IDが正規表現&lt;code&gt;user-*に&lt;/code&gt;一致するすべてのユーザは、IDが正規表現&lt;code&gt;global-*に&lt;/code&gt;一致するすべてのチャネルから読み取ることができます。&lt;/li&gt;
&lt;li&gt;  IDが&lt;code&gt;123の&lt;/code&gt;ユーザはチャネルのメタデータを更新する権限を持っています。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;パーミッションの完全なリストについては、&lt;a href="https://www.pubnub.com/docs/general/security/access-control#permissions?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;https://www.pubnub.com/docs/general/security/access-control#permissions&lt;/a&gt; のドキュメントを参照してください。&lt;/p&gt;

&lt;p&gt;PubNub Access Managerはトークンベースであり、それを説明する最も簡単な方法は、&lt;a href="https://www.pubnub.com/docs/general/security/access-control?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;ドキュメントに&lt;/a&gt;示されているように認可フローを歩き、そのフローがモデレーションにどのように関連しているかについて追加のコンテキストを提供することです：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F6VXlbbCqQz8X8GKG1yU7Xc%2Fa8597a87f1bf8a701737935141b45918%2Fpam-v3-authorization-flow-d3c28108b6948645d029e42097d1b30e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F6VXlbbCqQz8X8GKG1yU7Xc%2Fa8597a87f1bf8a701737935141b45918%2Fpam-v3-authorization-flow-d3c28108b6948645d029e42097d1b30e.png" title="How-to - BizOps Workspace Secure Chat - Image 01" alt="Access Manager workflow"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;ログインの試み&lt;/strong&gt;。クライアントは、ユーザをアプリケーションにログインさせるために、サーバに対して認証を行います。これはおそらくIDプロバイダを介して行われます。このステップの後、サーバは登録されたアプリユーザと話していること、そしてそのユーザが誰であるかを確信します。クライアントは初期化の一環としてPubNub Access Manager認証トークンを要求します。&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;許可リクエスト&lt;/strong&gt;。 サーバはSDKの'&lt;a href="https://www.pubnub.com/docs/sdks/javascript/api-reference/access-manager#grant-token?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;grantToken()&lt;/a&gt;'APIを呼び出して、クライアントからのトークン要求を処理します。 このAPIについて注意すべき点があります：このAPIはPubNub*&lt;em&gt;シークレットキーでのみ&lt;/em&gt;*呼び出すことができるため、サーバーからのみ呼び出すことができます。このAPIはすべてのサーバーサイドSDKで利用可能です。&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;トークンが返&lt;/strong&gt;されます。PubNubは要求されたユーザに要求されたパーミッションを許可し、認証トークンをサーバに返します。&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;トークンが渡さ&lt;/strong&gt;れます。サーバは認証トークンを元の呼び出し元のクライアントに返します。&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;トークンが設定さ&lt;/strong&gt;れます。クライアントは、初期化時あるいはアプリケーションのライフサイクル中の任意の時点で、&lt;a href="https://www.pubnub.com/docs/sdks/javascript/api-reference/access-manager#set-token?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;setToken()&lt;/a&gt;メソッドを使用してこの認証トークンを指定できます。トークンの有効期限が切れるため、トークンをいつでも更新できることは重要ですが、チャンネル・モニターが権限を更新した場合（ミュートされたり禁止されたりした場合）にも、クライアントは新しいトークンを要求する必要があります。&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;許可されたAPIリクエスト&lt;/strong&gt;。その後のPubNubへの呼び出しはすべて認可されたものとみなされます。PubNubは、ステップ2で付与されたパーミッションとクライアントのトークンの有効性に基づいて、あらゆるAPIリクエストを許可または拒否します。&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  セキュアなモデレーション・ソリューションとはどのようなものか？
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/how-to/monitor-and-moderate-conversations-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;前回の記事の&lt;/a&gt;最後の方で、クライアント側からミュートや禁止がどのように見えるかのデモを示しました。 チャット SDK には、クライアントがミュートされたか禁止されたかを伝える&lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/build/features/users/moderation#listen-to-moderation-events?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;モデレーション イベントが&lt;/a&gt;含まれていますが、UI を更新する以外に、&lt;strong&gt;クライアントがミュート/禁止されてもメッセージを送信し続けることを防ぐ&lt;/strong&gt;ことはできません。 クライアントを安全にミュートまたはBANするには、既存のAccess Manager権限を取り消し、新しいミュートまたはBANステータスを反映する新しい権限を付与する必要があります。&lt;/p&gt;

&lt;p&gt;あるユーザーが'musicals'チャンネルからミュートされている場合を考えてみましょう：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F2CHx5c361f7BWbrHAbI99t%2F220aebf2f99c53ba43b91053a2902d28%2FSecure_chat_sequence_diagram.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F2CHx5c361f7BWbrHAbI99t%2F220aebf2f99c53ba43b91053a2902d28%2FSecure_chat_sequence_diagram.png" title="How-to - BizOps Workspace Secure Chat - Image 02" alt="Secure chat sequence diagram"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; あるユーザが「movies」と「musicals」の2つのチャンネルにアクセスできるが、管理者は「musicals」チャンネルからのみミュートしたい。&lt;/li&gt;
&lt;li&gt; モデレーターはチャンネルモニターを使ってユーザーをミュートする。 これは裏を返せば '&lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/build/features/users/moderation#method-signature-1?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;setRestrictions()&lt;/a&gt;' API を呼び出していることになる。&lt;/li&gt;
&lt;li&gt; サーバアプリケーションは 'mute' 通知を&lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/build/features/users/moderation#listen-to-moderation-events?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;モデレーションイベントで&lt;/a&gt;受け取り、そのユーザのアクセストークンを&lt;a href="https://www.pubnub.com/docs/sdks/javascript/api-reference/access-manager#revoke-token?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;失効さ&lt;/a&gt;せる。&lt;/li&gt;
&lt;li&gt; クライアントアプリケーションは、'musicals' チャネルに関連付けられた 'mute' 通知を節度&lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/build/features/users/moderation#listen-to-moderation-events?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;イベントを通して&lt;/a&gt;受け取ります。&lt;/li&gt;
&lt;li&gt; アプリケーションはUIを更新し、それ以上メッセージを送信しないようにする。 ユーザはページのJavaScriptを修正することで、このUIの変更を回避できますが、認証トークンが失効しているため、メッセージを送信しようとすると失敗します。&lt;/li&gt;
&lt;li&gt; 上記のAccess Managerのセクションで説明したように、アプリケーションはサーバに新しい認証トークンを要求します。 新しく付与されたトークンには、ユーザの新しい権限が反映され、'musicals' チャネルへの 'read' アクセス権のみが付与されます。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/how-to/monitor-and-moderate-conversations-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;前回の&lt;/a&gt;記事では、"モデレーションソリューションのコンポーネント "について説明し、クライアントとサーバーの両方で利用可能なAPIを以下の図を使ってリストアップしました。上記のステップで説明したAPIは、この図にも示されています。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F50rOVZsxRPDbpl2azfmGCx%2F76842024f05c290e76ef9169f89994ad%2Fmoderation.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F50rOVZsxRPDbpl2azfmGCx%2F76842024f05c290e76ef9169f89994ad%2Fmoderation.png" title="How-to - BizOps Workspace Channel Monitor - Image 09" alt="Table showing components of a chat moderation solution"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  チャットSDKサンプルアプリ
&lt;/h2&gt;

&lt;p&gt;チャンネルモニターとチャットSDKの開発を担当した同じ多忙なエンジニアリングチームは、チャットSDKを使用するReact Nativeで書かれたサンプルアプリケーションも作成しました。&lt;/p&gt;

&lt;p&gt;このサンプルは、PubNubを使用して現実的で完全な機能を備えたチャットアプリを開発するためのSDKの機能とベストプラクティスを示しています。このサンプルはオープンソースで、&lt;a href="https://github.com/pubnub/js-chat/tree/master/samples/react-native-group-chat" rel="noopener noreferrer"&gt;/samples/react-native-group-chatに&lt;/a&gt;あるChat SDKと同じGitHubリポジトリの一部です。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F3LN1pHPw77sxb284B3ae3d%2F51cccbcd3b841bcb5dad1d3a3f0ced49%2Ftemp-chat-sdk-mobile-demo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F3LN1pHPw77sxb284B3ae3d%2F51cccbcd3b841bcb5dad1d3a3f0ced49%2Ftemp-chat-sdk-mobile-demo.png" title="How-to - BizOps Workspace Channel Monitor - Image 02" alt="Sample app running on iOS and Android"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;このアプリケーションは最近更新され、Access Managerサーバからトークンを要求するようになりました。また、ユーザのパーミッションが変更されたとき、つまりチャネルから禁止されたりミュートされたときに新しいトークンを要求するようになりました。 この改良は前回の&lt;a href="https://www.pubnub.com/how-to/monitor-and-moderate-conversations-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;記事を書いてから&lt;/a&gt;行われたので、&lt;a href="https://github.com/pubnub/js-chat/tree/master/samples/react-native-group-chat" rel="noopener noreferrer"&gt;GitHubから&lt;/a&gt;最新のソースを入手してください。 この記事を書いている時点の最新の git commit ID は&lt;a href="https://github.com/pubnub/js-chat/tree/ae9dfa0/samples/react-native-group-chat" rel="noopener noreferrer"&gt;ae9dfa0&lt;/a&gt;です。&lt;/p&gt;

&lt;h2&gt;
  
  
  ユーザーのミュートと禁止を安全に行うサンプル・アプリケーションを使ったデモ
&lt;/h2&gt;

&lt;p&gt;このセクションでは、クライアントとサーバーの両方の視点からセキュアなモデレーションを示すエンドツーエンドのデモを立ち上げて実行する方法について説明します。&lt;/p&gt;

&lt;h3&gt;
  
  
  PubNubキーセットの作成
&lt;/h3&gt;

&lt;p&gt;このデモを実行するには、次のように新しいPubNubキーセットを作成することをお勧めします：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;a href="https://admin.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;管理者ポータルに&lt;/a&gt;ログインし、新しいアプリケーションを作成するか、既存のアプリケーション内に新しいキーセットを作成します。管理者ポータルにログインし、新しいアプリケーションを作成するか、既存のアプリケーション内に新しいキーセットを作成します。必要に応じて、&lt;a href="https://www.pubnub.com/how-to/admin-portal-create-keys/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;管理者ポータルキーの&lt;/a&gt;作成方法をご覧ください。&lt;/li&gt;
&lt;li&gt; キーセットのページで、以下の構成オプションを有効にします。 特に指定がない限り、デフォルトを受け入れることができます：&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://www.pubnub.com/docs/general/metadata/channel-metadata?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;アプリ・コンテキスト&lt;/a&gt;。 これはチャネルとユーザに関するメタデータを保存するもので、&lt;a href="https://pubnub.com/how-to/manage-users-and-channels-with-bizops-workspace/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;「ユーザとチャネルの管理&lt;/a&gt;」についての前の記事で詳しく説明しています。 &lt;code&gt;User Metadata Events（ユーザ・メタデータ・イベント&lt;/code&gt;）、&lt;code&gt;Channel Metadata Events（チャネル・メタデータ・イベント&lt;/code&gt;）、&lt;code&gt;Membership Events（メンバーシップ・イベント&lt;/code&gt;）も有効にしてください。&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://www.pubnub.com/docs/general/storage?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;メッセージの永続化&lt;/a&gt;。 これはメッセージの履歴をPubNubに保存し、管理者が会話を確認、編集できるようにします。&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://www.pubnub.com/docs/general/security/access-control?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;アクセスマネージャ&lt;/a&gt;。 データへの不正アクセスを防止し、安全なモデレーションソリューションを作成するために必要です。&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://www.pubnub.com/docs/general/presence/overview?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;プレゼンス&lt;/a&gt;。 ユーザーがオンラインかオフラインかを追跡するために使用されます。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;変更を保存します。&lt;/p&gt;

&lt;p&gt;以降のステップで、&lt;code&gt;Publish Key&lt;/code&gt;、&lt;code&gt;Subscribe Key&lt;/code&gt;、および&lt;code&gt;Secret Keyが&lt;/code&gt;必要になります。&lt;/p&gt;

&lt;h3&gt;
  
  
  サンプル アプリケーションのビルド
&lt;/h3&gt;

&lt;p&gt;前述したように、チャット SDK サンプル アプリは、Expo フレームワークを使用して React Native で記述されたクロス プラットフォームのクライアント アプリです。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pubnub/js-chat/tree/ae9dfa0/samples/react-native-group-chat#readme" rel="noopener noreferrer"&gt;アプリケーションの Readme&lt;/a&gt; に記載されている手順に従って、サンプル アプリケーションをクローンしてビルドします。 特に、yarnやNode.jsなどの前提条件がインストールされていることを確認してください。 ReadMeにはXCodeとiOSの使用について書かれているが、Androidエミュレーター上でアプリを実行することもできる。 執筆時点の最新のgitコミットIDは&lt;a href="https://github.com/pubnub/js-chat/tree/ae9dfa0/samples/react-native-group-chat" rel="noopener noreferrer"&gt;ae9dfa0&lt;/a&gt;です。&lt;/p&gt;

&lt;p&gt;Pub/Subキーを提供する際は、前のステップで生成したキーを使用してください。 &lt;code&gt;.env&lt;/code&gt;ファイルにキーを含めない場合、アプリケーションはデフォルトでいくつかの&lt;code&gt;デモ&lt;/code&gt;キーになります。混乱を避けるために、&lt;a href="https://github.com/pubnub/js-chat/blob/ae9dfa0/samples/react-native-group-chat/App.tsx#L60" rel="noopener noreferrer"&gt;https://github.com/pubnub/js-chat/blob/ae9dfa0/samples/react-native-group-chat/App.tsx#L60&lt;/a&gt;、このロジックを無効にするとよいでしょう。&lt;/p&gt;

&lt;p&gt;アプリケーションを実行します。ReadMeでは&lt;code&gt;yarn iosを&lt;/code&gt;実行するように指示されていますが、&lt;code&gt;yarn androidや&lt;/code&gt; &lt;code&gt;yarn run startを&lt;/code&gt;実行することもできます。&lt;/p&gt;

&lt;p&gt;ログインすると、コンソールに次のような警告が表示されるはずです：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F7jc5aAT6ohAvQdvszqUerY%2F36987e68ee4386813332e69c0d1d6ab0%2FFailed_to_obtain_auth_token.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F7jc5aAT6ohAvQdvszqUerY%2F36987e68ee4386813332e69c0d1d6ab0%2FFailed_to_obtain_auth_token.png" title="How-to - BizOps Workspace Secure Chat - Image " alt="Failed log message"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;これはクライアントがAccess Managerサーバーへの接続に失敗したためです。&lt;/p&gt;

&lt;h3&gt;
  
  
  サンプルAccess Managerサーバーの構築
&lt;/h3&gt;

&lt;p&gt;Sample Access Manager Serverは&lt;a href="https://github.com/pubnub/js-chat/tree/master/samples/access-manager-api" rel="noopener noreferrer"&gt;https://github.com/pubnub/js-chat/tree/master/samples/access-manager-api。&lt;/a&gt;これは前回説明したクライアントアプリケーションと同じmonorepoです。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;src/chatsdk.service.ts&lt;/code&gt;ファイルをお好みのエディタで開き、&lt;code&gt;publishKey&lt;/code&gt;、&lt;code&gt;subscribeKey&lt;/code&gt;、&lt;code&gt;secretKeyを&lt;/code&gt;入力してください。 publishKeyとsubscribeKeyは、クライアント・アプリをビルドする際に使用したものと一致させる必要があり、secretKeyは、&lt;a href="https://admin.pubnub.com?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;管理ポータルの&lt;/a&gt;アプリのkeysetページから入手できます。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;REPO/samples/access-manager-api&lt;/code&gt;ディレクトリから&lt;code&gt;yarn run startを&lt;/code&gt;実行してAccess Managerサーバーを起動すると、以下のような画面が表示されるはずです：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F7vrAN5Y2vD6yQKucs25iHy%2Fb8fb34f5ab9c1e75a23606c2b980cea3%2Fauth_token_server.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F7vrAN5Y2vD6yQKucs25iHy%2Fb8fb34f5ab9c1e75a23606c2b980cea3%2Fauth_token_server.png" title="How-to - BizOps Workspace Secure Chat - Image 04" alt="Sample Access Manager Server output"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Access Managerサーバーが何をしているかを見るには、&lt;code&gt;app.service.tsを見て&lt;/code&gt;ください。リクエスト・ユーザー用に生成されたパーミッション構造と、これらのパーミッションを適用するための&lt;code&gt;chat.sdk.grantToken()&lt;/code&gt;の呼び出しが表示され、生成されたauthKeyが呼び出し元のクライアントに返されます。&lt;/p&gt;

&lt;p&gt;これらはデモ・アプリケーションが必要とするパーミッションですが、あなたのアプリケーションはおそらく異なるパーミッションを必要とするでしょう。 この提供されたルールセットを開始テンプレートとして使用することができますが、アプリ用の Access Manager サーバーを作成する際には、&lt;a href="https://www.pubnub.com/docs/chat/chat-sdk/build/features/users/permissions?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;https://www.pubnub.com/docs/chat/chat-sdk/build/features/users/permissions&lt;/a&gt;を参照して、どの Chat SDK 機能でどのパーミッションが必要かを正確に理解してください。&lt;/p&gt;

&lt;p&gt;クライアント・デモ・アプリを再起動すると、エラーなしでログインできるようになります。 Authkey refreshed（認証キーが更新されました）」というトーストが表示されれば、すべて成功です。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F6DXY3wSm18YpJ4K08iwoJ4%2Ff5db7a28ca9efcfcff54ddfb36369729%2Fauthkey_refreshed.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F6DXY3wSm18YpJ4K08iwoJ4%2Ff5db7a28ca9efcfcff54ddfb36369729%2Fauthkey_refreshed.png" title="How-to - BizOps Workspace Secure Chat - Image 05" alt="AuthKey refreshed"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2つのクライアント間で会話を開始してください。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F1VS5T3rvnRYCDK6ITsSVZG%2F63901926e457c4d9cdf1bea009921bb1%2FIn_Conversation.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F1VS5T3rvnRYCDK6ITsSVZG%2F63901926e457c4d9cdf1bea009921bb1%2FIn_Conversation.png" title="How-to - BizOps Workspace Secure Chat - Image 06" alt="Initiate a conversation between two clients"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  チャンネルモニターを使用してユーザーをミュートおよび禁止する
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;重要：&lt;/strong&gt;2つのクライアント間で会話を開始したことがない場合は、今すぐ行ってください。 チャンネルはデモアプリによって動的に作成されるため、チャットが開始された後にのみチャンネルモニターに表示されます。&lt;/p&gt;

&lt;p&gt;auth key refreshed'バナーや'banned user'モーダルなど、以下に表示されるユーザーインターフェースのアップデートは、デモアプリケーションの一部であることに注意してください。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://admin.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;管理者ポータルに&lt;/a&gt;ログインしてチャネルモニターを起動し、Access Managerサンプルとクライアントアプリケーションで使用したキーセットを選択します。&lt;/li&gt;
&lt;li&gt;  左側のナビゲーション・パネルの［&lt;strong&gt;BizOps Workspace&lt;/strong&gt;］セクションに移動し、［&lt;strong&gt;Channel Monitor&lt;/strong&gt;］を選択します。 &lt;strong&gt;BizOps&lt;/strong&gt;Workspaceセクションが表示されない場合は、&lt;a href="https://www.pubnub.com/pricing/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;PubNubプランを&lt;/a&gt;アップグレードする必要があります。&lt;/li&gt;
&lt;li&gt;  モデレーションを開始するチャンネルを選択するプロンプトが表示されます。 チャンネル名は&lt;code&gt;1:1 user with USER_&lt;/code&gt;IDになります。USER_IDは会話を開始した人のユーザー名です。&lt;/li&gt;
&lt;li&gt;  キーセットでパーシステンスを有効にしている場合、チャンネルメッセージは以前のメッセージも含めてリアルタイムで表示されます。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F3bjU02EMdQk4dwYcgaAS0d%2F6dd2b2b1c9b7be3e8fef76ca8306b8db%2F1._Channel_Monitor.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F3bjU02EMdQk4dwYcgaAS0d%2F6dd2b2b1c9b7be3e8fef76ca8306b8db%2F1._Channel_Monitor.png" title="How-to - BizOps Workspace Secure Chat - Image 07" alt="Initial conversation with channel monitor"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  そのユーザーが送信したメッセージの横にあるマイクボタンを押して、そのユーザーをミュートします。 ミュートされたユーザーのデバイスに、認証キーがリフレッシュされたことを知らせるメッセージが表示されます。 ミュートされたユーザーとしてメッセージを送信しようとすると、ミュートを解除したユーザーには影響がありませんが、禁止されているというメッセージダイアログが表示されます。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F1RdO4jGGHDiSiL4Qq7TReO%2F0d924dae0e07f5b4ac0f5c3ef5dc11cd%2F2._Muted_User.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F1RdO4jGGHDiSiL4Qq7TReO%2F0d924dae0e07f5b4ac0f5c3ef5dc11cd%2F2._Muted_User.png" title="How-to - BizOps Workspace Secure Chat - Image 08" alt="Muted user"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  マイクボタンをもう一度押して、ミュートを解除してください。 ミュートを解除されたユーザーのデバイスに、認証キーがリフレッシュされ、メッセージ送信が成功したことを知らせるメッセージが表示されます。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F58g7AQjJ7pRqc3eoV8RB49%2F428d3ca094f369bc1f4fa592eeb53589%2F3._Unmuted_User.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F58g7AQjJ7pRqc3eoV8RB49%2F428d3ca094f369bc1f4fa592eeb53589%2F3._Unmuted_User.png" title="How-to - BizOps Workspace Secure Chat - Image 09" alt="User unmuted"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  そのユーザーが送信したメッセージの横にある禁止ボタンを押して、そのユーザーを禁止してください。 理由は自由形式のテキストなので、関連する情報を入力できます。 認証キーが更新され、ユーザーはアプリのチャット選択画面に戻ります。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F5ZaHnr78P2KEkPnb71RbGU%2F90d13bab4b2e144b0582ec58cdcb7bf0%2F4._Banned_User.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F5ZaHnr78P2KEkPnb71RbGU%2F90d13bab4b2e144b0582ec58cdcb7bf0%2F4._Banned_User.png" title="How-to - BizOps Workspace Secure Chat - Image 10" alt="User is banned"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;禁止されたチャンネルにアクセスしようとすると、ユーザーにエラーが表示されます：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F2eyswSTv0uMNS6SedvR0Ea%2F68c0f54239a1283c7fc56e7a9df765d7%2F5._Banned_User_error.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F2eyswSTv0uMNS6SedvR0Ea%2F68c0f54239a1283c7fc56e7a9df765d7%2F5._Banned_User_error.png" title="How-to - BizOps Workspace Secure Chat - Image 11" alt="Banned user error message"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  チャンネルモニターで「禁止を解除」を選択して、ユーザーを禁止解除してください。 認証キーが更新されます。 ユーザーはBANが解除され、再びチャットにアクセスできるようになります。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F3L0k1itC0X4yHApaWxohJU%2F340c12f4a84503a165f3b98904e0aaa0%2F6_Unbanned_User_2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2F3L0k1itC0X4yHApaWxohJU%2F340c12f4a84503a165f3b98904e0aaa0%2F6_Unbanned_User_2.png" title="How-to - BizOps Workspace Secure Chat - Image 12" alt="User is unbanned"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  まとめ
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/solutions/chat/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;チャットアプリケーションの&lt;/a&gt;開発は最初のステップに過ぎません。最も困難な課題は、拡大するユーザー・ベースをサポートするためにアプリをデプロイした後にやってきます。BizOps Workspaceは、チャットアプリケーションのあらゆる側面を管理するために設計されたツールセットであり、ローンチ後の課題を簡素化します。&lt;/p&gt;

&lt;p&gt;この記事では、ユーザーの安全なミュートと禁止に焦点を当てましたが、&lt;a href="https://pubnub.com/docs/bizops-workspace/basics?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;BizOps Workspaceの&lt;/a&gt;機能はさらに拡張していきます。 また、本記事ではChat SDKのみに焦点を当てましたが、Channel Monitorは当社のどのSDKでも動作するように&lt;a href="https://www.pubnub.com/docs/bizops-workspace/basics#configuration?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;設定&lt;/a&gt;することもできます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2FFYH6PoZLSHGPgvikC9vCd%2Fe74f82e37fbfb7fe6f370594adf1da7f%2FChannel_Monitor_Configuration.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pubnub.com%2Fcdn%2F3prze68gbwl1%2FFYH6PoZLSHGPgvikC9vCd%2Fe74f82e37fbfb7fe6f370594adf1da7f%2FChannel_Monitor_Configuration.png" title="How-to - BizOps Workspace Channel Monitor - Image 00" alt="Channel monitor configuration"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ヘルプやサポートが必要な場合は、お気軽に&lt;a href="https://support.pubnub.com/hc/en-us?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;専任のサポート&lt;/a&gt;チームにご連絡いただくか、開発者対応チーム&lt;a href="//mailto:devrel@pubnub.com"&gt;（devrel@pubnub.com&lt;/a&gt;）までメールでお問い合わせください。&lt;/p&gt;

&lt;h1&gt;
  
  
  PubNubはどのようにお役に立ちますか？
&lt;/h1&gt;

&lt;p&gt;この記事は&lt;a href="https://www.pubnub.com/how-to/securely-moderate-chat-and-users/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;PubNub.comに&lt;/a&gt;掲載されたものです。&lt;/p&gt;

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

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

&lt;h2&gt;
  
  
  PubNubを体験
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/tour/introduction/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;ライブツアーを&lt;/a&gt;チェックして、5分以内にすべてのPubNub搭載アプリの背後にある本質的な概念を理解する&lt;/p&gt;

&lt;h2&gt;
  
  
  セットアップ
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://admin.pubnub.com/signup/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;PubNubアカウントに&lt;/a&gt;サインアップすると、PubNubキーに無料ですぐにアクセスできます。&lt;/p&gt;

&lt;h2&gt;
  
  
  始める
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;PubNubのドキュメントは&lt;/a&gt;、ユースケースや&lt;a href="https://www.pubnub.com/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja" rel="noopener noreferrer"&gt;SDKに&lt;/a&gt;関係なく、あなたを立ち上げ、実行することができます。&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Unityゲームにリアルタイムチャットを追加する方法</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Thu, 16 May 2024 21:14:49 +0000</pubDate>
      <link>https://forem.com/pubnub-jp/unitygemuniriarutaimutiyatutowozhui-jia-surufang-fa-3gia</link>
      <guid>https://forem.com/pubnub-jp/unitygemuniriarutaimutiyatutowozhui-jia-surufang-fa-3gia</guid>
      <description>&lt;p&gt;リアルタイムチャットまたはゲーム内チャットは、プレイヤーのエンゲージメントを高め、ユーザーの定着を助けます。リアルタイムチャットは、プレイヤー同士のコミュニケーションを可能にし、コミュニティ意識を育み、より楽しいゲーム体験を可能にするソーシャルインタラクションのプラットフォームを提供します。&lt;/p&gt;

&lt;p&gt;リアルタイムチャットを取り入れることは、言うは易く行うは難しです。ゼロから始めるには、構築、維持、そしてプレイヤー数の増加に伴う拡張に多くのリソースが必要です。幸いにも、PubNubは私たちのリアルタイム、低遅延APIプラットフォームでUnityゲームにリアルタイム機能を注入することがこれまで以上に簡単になりました。Windows、Mac、iOS、Android、OculusやMeta Questのようなバーチャルリアリティシステム、またはクロスプラットフォーム向けに開発しているかどうかにかかわらず、私たちの&lt;a href="https://www.pubnub.com/docs/sdks/unity?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;Unity SDKは&lt;/a&gt;あなたをカバーしています。&lt;/p&gt;

&lt;p&gt;PubNubを使用してUnityビデオゲームにリアルタイムチャットを追加する方法を学び、異なるチャネルパターンを設定する方法を理解することから始め、メッセージを送受信する方法を学び、モデレーション、絵文字、リアクション、GIFなどの他の機能を使用してゲーム内のチャットを強化/保護します。&lt;/p&gt;

&lt;h2&gt;
  
  
  PubNubを始める
&lt;/h2&gt;

&lt;p&gt;ゲーム内チャットの設定方法を理解する前に、PubNubプラットフォームと、プラットフォームの機能を利用するためのアプリケーションの設定方法を理解する必要があります。&lt;/p&gt;

&lt;h3&gt;
  
  
  概要
&lt;/h3&gt;

&lt;p&gt;PubNubはPub/Sub（Publish/Subscribe）モデルに基づいています。ユーザーは、基本的にすべての関連情報を含むペイロードであるメッセージをPubNubネットワークに&lt;a href="https://www.pubnub.com/docs/general/messages/publish?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;公開&lt;/a&gt;します。メッセージを受信したい、または聞きたいユーザーはPubNubネットワークに&lt;a href="https://www.pubnub.com/docs/general/messages/receive?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;サブスクライブ&lt;/a&gt;し、メッセージを解析します。メッセージには、32KB以下であれば（そしてできればJSONであれば）、好きなものを含めることができます。&lt;/p&gt;

&lt;p&gt;メッセージが正しい受信者に確実に届くように、あるデバイスから別のデバイスにデータが送信されるメカニズムとして&lt;a href="https://www.pubnub.com/docs/general/channels/overview?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;チャネルが&lt;/a&gt;使用されます。チャネルは、デバイスがPubNubネットワークにパブリッシュしたりサブスクライブしたりするたびに必要になります。ユーザーが一度に発行できるメッセージは1つだけですが、ユーザーは一度に多くの異なるチャンネルを購読し、さまざまなメッセージを聞くことができます。&lt;/p&gt;

&lt;p&gt;メッセージを公開するときには正確なチャンネル名を指定する必要がありますが、&lt;a href="https://www.pubnub.com/docs/general/channels/subscribe#channel-multiplexing?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;多重化によって&lt;/a&gt;一度に複数のチャンネルを購読することができます。多重化とは、チャンネル名を文字列の配列として指定することによって、1つ以上のチャンネルを購読することです。&lt;/p&gt;

&lt;p&gt;なぜこの情報が必要なのでしょうか？ゲーム内のメッセージングシステムはすべてチャンネルの概念に基づいています。&lt;em&gt;チャンネルパターン名をどのようにフォーマットして保護するかによって、どのような種類のチャットが必要に&lt;/em&gt;なるかが決まります。&lt;/p&gt;

&lt;h3&gt;
  
  
  PubNub Unity SDKのインストールと設定
&lt;/h3&gt;

&lt;p&gt;開始するには、アプリケーションをPubNubネットワークに接続するためにPubNub Unity SDKを設定する必要があります。詳細については&lt;a href="https://www.pubnub.com/docs/sdks/unity?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;Unity SDKのドキュメントを&lt;/a&gt;参照してください：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;a href="https://www.pubnub.com/docs/sdks/unity#install-via-package-manager?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;パッケージマネージャを介して&lt;/a&gt;Unityパッケージを追加します。&lt;/li&gt;
&lt;li&gt; &lt;a href="https://admin.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;無料のPubNubアカウントを&lt;/a&gt;作成し、PubNubキーを取得します。アプリケーションに必要なキーセットの機能を有効にすることが重要です - 重要なPub/Sub機能については、単にStream Controllerを有効にする必要があります。重要なPub/Sub機能については、Stream Controllerを有効にするだけです。高度な機能のために設定する必要があるその他の設定については、後ほど説明します。&lt;/li&gt;
&lt;li&gt; 前のステップで取得したPublishキーとSubscribeキーをUnityに渡してPubNub GameObjectを&lt;a href="https://www.pubnub.com/docs/sdks/unity#configure-pubnub?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;設定&lt;/a&gt;します。すべてのPubNubオブジェクトはPubNubへの接続を確立するために一意の識別子を必要とするため、UserIdも提供する必要があります。そうしたら、PubNubオブジェクトを初期化します：
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;using&lt;/span&gt; &lt;span class="nx"&gt;PubnubApi&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;using&lt;/span&gt; &lt;span class="nx"&gt;PubnubApi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Unity&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt;…&lt;/span&gt;
&lt;span class="nx"&gt;PubNub&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Pubnub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pnConfiguration&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt; イベントやメッセージに反応するようにゲームの&lt;a href="https://www.pubnub.com/docs/sdks/unity#add-event-listeners?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;イベントリスナーを&lt;/a&gt;追加します。各タイプのメッセージやイベントに応答するカスタムロジックを実装できるように、さまざまなイベントリスナーがありますが、チャットメッセージを交換する中核的な機能については、単にメッセージイベントリスナーが必要です（このガイドの後半で、より魅力的にするためにリアルタイムチャットに追加機能を追加する方法を学びます）：
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;listener&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SubscribeCallbackListener&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;AddListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;listener&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;listener&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onMessage&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;OnPnMessage&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt;…&lt;/span&gt;
&lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nc"&gt;OnPnMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Pubnub&lt;/span&gt; &lt;span class="nx"&gt;pn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;PNMessageResult&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;Debug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Message received: {result.Message}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;他のデバイスにメッセージを送信するためにパブリッシュを開始し、パブリッシャーからメッセージを受信するためにサブスクライブを開始する前に、チャンネル名を定義する必要があります。覚えておいてください: チャネルパターンをどのようにフォーマットするかによって、実装するチャットの種類が決まります。&lt;/p&gt;

&lt;h2&gt;
  
  
  異なるチャットパターンの定義
&lt;/h2&gt;

&lt;p&gt;あなたのゲームに実装するチャットの種類を検討する必要があります。このセクションは、チャンネルが従うべきパターンについて説明するものであり、ゲームやユーザーから必要な情報を取得するためのセットアップ全体について説明するものではありません。PubNubを使用するUnityプロジェクトでさまざまなチャットパターンを見たい場合は、&lt;a href="https://github.com/PubNubDevelopers/unity-multiplayer-shooter"&gt;Unity Showcase Gameを&lt;/a&gt;ご覧ください。&lt;/p&gt;

&lt;h3&gt;
  
  
  オール/グローバルチャット
&lt;/h3&gt;

&lt;p&gt;オールチャットまたはグローバルチャットは、ゲーム内のすべてのプレイヤー間のコミュニケーションを可能にします。すべてのプレイヤーが購読している共通のチャンネルでメッセージを公開、購読することで一般的なチャットを設定できます。グローバルプレイヤー用のチャンネル構造を設定できます：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="nx"&gt;allChat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="nb"&gt;global&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;各クライアントがチャンネルを購読することで、全員が同じメッセージをリアルタイムで受信できるようになり、全員が参加できる共有チャット体験が生まれます。&lt;/p&gt;

&lt;h3&gt;
  
  
  プライベート/ウィスパーチャット
&lt;/h3&gt;

&lt;p&gt;プライベートまたはウィスパーチャットでは、プレイヤー同士が一対一の会話をすることができます。 プライベートまたはウィスパーチャットチャンネルパターンでは、各ユーザーがプライベートな会話を目的としたチャンネル構造をサブスクライブします：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="nx"&gt;privateChatBase&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;private&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;これは、&lt;a href="https://www.pubnub.com/docs/general/channels/subscribe#wildcard-subscribe?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;ワイルドカードサブスクライブの&lt;/a&gt;コンセプトを使用しています。この機能は、階層化されたチャネルのリストを購読するために使用することができます。&lt;/p&gt;

&lt;p&gt;例えば、あるユーザが他のユーザにプライベートでメッセージを送信しようとする場合、PubNubネットワーク内でユーザを識別する一意な識別子を表す現在のPubNubユーザID（またはUUID/uuid）とメッセージの受信予定者のユーザIDを連結します。現在のユーザのユーザIDは（pubnub.GetCurrentUserId()で）常に取得できますが、意図する受信者のユーザIDを取得する必要があります。受信者のユーザIDを取得したら、チャネルを次のように連結することができます：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="nx"&gt;privateChatMessage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;private&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;uuid&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;uuid&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;chat.private.* のようなワイルドカードチャネルパターンを指定しているので、アプリはそのパターンにマッチするすべてのチャネル名を購読します。これにより、実行時にチャンネル名を常に知っておく必要がなくなります。最後に、ユーザ ID を使用することで、チャンネル名が一意になり、2人のユーザ間で会話が行われることが保証されます。&lt;/p&gt;

&lt;h3&gt;
  
  
  フレンド/バディチャット
&lt;/h3&gt;

&lt;p&gt;フレンドチャットやバディチャットを作成することで、プレイヤーはより親密な関係を築きたい特定のプレイヤーとプライベートなコミュニケーションをとることができます。&lt;/p&gt;

&lt;p&gt;フレンド/バディチャットパターンでは、ユーザーIDを追加してプライベートチャットチャンネルパターンを作成するのと同じように、各デバイスやプレイヤーに固有のチャンネルパターンを作成する必要があります：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="nx"&gt;chanFriendChat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;chat.friends.” + pubnub.GetCurrentUserId();”
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;chanFriendChat文字列内のユーザーIDをpubnub.GetCurrentUserId()で置き換えます。これでチャンネルパターンは揃いましたが、単純にchat.friends.*のようなワイルドカードパターンを使って購読することはできません。&lt;/p&gt;

&lt;p&gt;この問題を解決するのがPubNubの&lt;a href="https://www.pubnub.com/docs/general/channels/subscribe#channel-groups?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;チャンネル&lt;/a&gt;グループで、一度に多数のチャンネルを管理することができます。チャンネルグループは基本的にチャンネルのリストへのポインタです; この場合、チャンネルグループはプレイヤーに固有で、プレイヤーの友達全員への参照を含みます：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="nx"&gt;chanGroupFriendChat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;chanGroupFriendChat_&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;GetCurrentUserId&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;注: チャンネルグループ名はチャンネル名と同じ規則に従いますが、名前に&lt;a href="https://www.pubnub.com/docs/general/channels/subscribe#channel-group-names?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;ピリオドを含めることはできません&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;pubnubオブジェクトでチャンネルをサブスクライブする方法（次のセクションで説明します）と同様に、チャンネルグループも同時にサブスクライブすることができます。つまり、プレイヤーはフレンドのChannel Groupにサブスクライブしているので、新しいフレンドが追加されるたびに、そのフレンドのChanFriendChatはプレイヤーのフレンドのChannel Groupに追加され、それらのチャネルのいずれかがメッセージをパブリッシュするたびに、Messageイベントリスナーでメッセージを受け取ることになります。Channel Group にパブリッシュすることはできませんが、Channel Group 内の関連チャンネルにメッセージをパブリッシュすることはできます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/channel-groups?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;PubNub Unity SDKのChannel Groups APIを&lt;/a&gt;使用すると、あなたが権限を持つチャネルグループから友人/チャネルを追加、リスト、および削除することができます。チャンネルグループ機能は、プレゼンスとして知られているフレンドもオンライン/オフラインになるタイミングを決定するためにも使用されます。これについては&lt;a href="https://www.pubnub.com/how-to/add-friend-list-to-your-unity-game/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;Unityのフレンドリスト追加方法ガイドで&lt;/a&gt;詳しく説明します。&lt;/p&gt;

&lt;h3&gt;
  
  
  ギルド/アライアンス/クランチャット
&lt;/h3&gt;

&lt;p&gt;ギルド、アライアンス、クランが登場するゲームでは、専用のチャット環境がチームの連携や仲間意識に大きく役立ちます。このスタイルのグループチャットは、複数のユーザー間でのコミュニケーションを可能にし、フレンドだけでなく、より多くのプレイヤー間での協力やチームワークを促進します。ギルド/アライアンス/クランチャットでは、同じグループのメンバーが戦略を練ったり、成果を共有したり、あるいは単にゲーム内でより個人的なコミュニティを形成するために絆を深めることができます。&lt;/p&gt;

&lt;p&gt;PubNubでこれを設定するには、フレンド/バディチャットを実装するのと同じコンセプトです。各タイプのチャンネルグループを作成し、そのチャンネルグループに登録し、承認されたらそのチャンネルグループにフレンドを追加します。これらのチャンネルグループに関連付けられたチャンネルに公開されたメッセージはイベントリスナーをトリガーし、適切にチャットを表示することができます。&lt;/p&gt;

&lt;p&gt;各プレイヤーのチャンネルグループは&lt;a href="https://www.pubnub.com/docs/general/channels/subscribe#channel-groups?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;2000チャンネル&lt;/a&gt;（この場合はプレイヤー）を&lt;a href="https://www.pubnub.com/docs/general/channels/subscribe#channel-groups?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;管理する&lt;/a&gt;ことができ、大規模なオンラインゲームの最大のギルドでも十分すぎるほどです。さらに、PubNubネットワークに接続されている個々のクライアントは10チャンネルグループを持つことができ、必要に応じて20,000チャンネルを購読することができます。&lt;/p&gt;

&lt;h3&gt;
  
  
  パーティー/ロビーチャット
&lt;/h3&gt;

&lt;p&gt;パーティーチャットやロビーチャットは、特定のゲームセッションやミッションのために結成された小規模で一時的なグループに対応しています。これらのスタイルのチャットは異なる目的を意図していますが、その実装はプライベート/ウィスパーチャットチャンネルを作成するパターンに似ています。&lt;/p&gt;

&lt;p&gt;まず、それぞれのグループチャットのベースとなる文字列を作成します。チャネルの配列にサブスクライブするとき（次のステップで説明します）、すべてのリクエストをリッスンするためにワイルドカードサブスクライブを使います：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="nx"&gt;chanChatParty&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;party&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="nx"&gt;chanChatLobby&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lobby&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ロビーやパーティが結成されると、あるプレイヤーがグループのリーダーやオーナーに指名されます。このようなプレイヤーをパーティリーダーまたはホストと呼びます。次に、ホストプレイヤーのユーザーIDとベースとなる文字列を連結し、ユニークなチャンネルパターンを作成します。パーティやロビーに招待された新しいプレイヤーは、これらのチャンネルに動的に登録され、事実上グループに参加することになります。パーティやロビーが終了したり解散したりすると、チャンネルは削除されます。&lt;/p&gt;

&lt;h2&gt;
  
  
  すべてをまとめる
&lt;/h2&gt;

&lt;p&gt;チャネルのパターンに基づいてゲームに実装するチャットの種類を決めたら、次はこれらのチャネルをパブリッシュしたりサブスクライブしたりして、リアルタイムでメッセージを送受信します。&lt;/p&gt;

&lt;h3&gt;
  
  
  メッセージの公開
&lt;/h3&gt;

&lt;p&gt;このプロセスは、メッセージのペイロードを作成することから始まります。これは、Unityゲームの要件に応じて、単純なテキストチャットであったり、より複雑なデータ構造であったりします。ペイロードの準備ができたら、いよいよメッセージを発行します。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/publish-and-subscribe#publish?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;Publish APIは&lt;/a&gt;、指定されたチャットチャンネルのすべての購読者にメッセージを送信するために使用されます。一度に1つのチャンネルにしかパブリッシュできませんが、パブリッシュは非同期に実行されるため、他のコードの実行をブロックすることはありません（同期的にパブリッシュすることも可能です）。&lt;/p&gt;

&lt;p&gt;例えば、パーティにチャットメッセージを送信したい場合、以下のような呼び出しを行い、パブリッシュするだけでなく、PubNubの呼び出しが成功したかどうかを判断します（呼び出しが失敗した場合の処理も行います）：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;PNResult&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;PNPublishResult&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;publishResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Publish&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="nx"&gt;Ready&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;go&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Channel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;chanChatParty&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ExecuteAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;PNPublishResult&lt;/span&gt; &lt;span class="nx"&gt;publishResult&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;publishResponse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;PNStatus&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;publishResponse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Status&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;Debug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pub timetoken: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;publishResult&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Timetoken&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ToString&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="nx"&gt;Debug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pub status code : &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;StatusCode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ToString&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  メッセージの購読
&lt;/h3&gt;

&lt;p&gt;メッセージが公開されたら、適切なチャネルに&lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/publish-and-subscribe#receive-messages?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;サブスクライブして&lt;/a&gt;、受信メッセージやイベントを受信する必要があります。1回の呼び出しで複数のチャットチャネルやチャネルグループをサブスクライブできます：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Subscribe&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Channels&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;chanChatAll&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;chanPrivateChat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;chanChatParty&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;*&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;chanChatLobby&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;*&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;               
&lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ChannelGroups&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;chanFriendGroupChat&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;chanGuildGroupChat&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;chanAllianceGroupChat&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Execute&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;プレイヤーはPubNubネットワークに接続され、&lt;a href="https://www.pubnub.com/docs/sdks/unity#add-event-listeners?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;イベントリスナーは&lt;/a&gt;イベント（この場合は新しいメッセージの到着）が発生するのを待ち、そのイベントに関連するコードを実行します。&lt;/p&gt;

&lt;p&gt;メッセージが到着すると、リスナーはコールバックをトリガーし、到着したメッセージを処理するために書いたコードを実行します。これは、チャットルームにメッセージを表示するような単純なものから、チャットメッセージに基づいてゲーム内イベントをトリガーするような複雑なものまであります。&lt;/p&gt;

&lt;h2&gt;
  
  
  ゲーム内チャットを魅力的にする高度な機能
&lt;/h2&gt;

&lt;p&gt;Unityゲームにゲーム内チャットを実装し、プレイヤーがリアルタイムでメッセージを送受信することに成功しました！これは既にプレイヤー同士の交流の場を作り出していますが、実装された機能は氷山の一角に過ぎません - プレイヤーにとってゲーム内チャットをより魅力的なものにするために実装を検討すべき機能はたくさんあります。&lt;/p&gt;

&lt;h3&gt;
  
  
  メッセージ履歴を読み込む：メッセージの永続性
&lt;/h3&gt;

&lt;p&gt;ゲーム内では、プレイヤーは以前の会話を再確認したり、聞き逃したチャットに追いつく必要があるかもしれません。Message&lt;a href="https://www.pubnub.com/docs/general/storage?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;Persistence&lt;/a&gt;APIをUnityゲームに実装することで、チャットメッセージ、メッセージアクション、ファイルを必要に応じて保存、取得することができます：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;PNResult&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;PNFetchHistoryResult&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;fetchHistoryResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;FetchHistory&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Channels&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;chanPrivateChat&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;IncludeMeta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;MaximumPerChannel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ExecuteAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;また、メッセージの保存期間を柔軟に制御できるため、ゲーム固有のニーズやリソースに応じてストレージを管理できます。メッセージの永続性を利用できるようにするには、キーの&lt;a href="https://admin.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;管理ポータルで&lt;/a&gt;この機能を有効にする必要があります。この機能の詳細および有効化方法については、&lt;a href="https://www.pubnub.com/how-to/admin-portal-persistence/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;Message Persistenceハウツーガイドを&lt;/a&gt;ご覧ください。&lt;/p&gt;

&lt;h3&gt;
  
  
  不在メッセージをプレーヤーに通知する：モバイルプッシュ通知
&lt;/h3&gt;

&lt;p&gt;モバイルゲームでは、プレイヤーはアプリを出たり入ったりすることが多く、チームからの重要なメッセージやゲームのアップデートを見逃すことがあります。そこで、&lt;a href="https://www.pubnub.com/docs/general/push/send?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;モバイルプッシュ通知の&lt;/a&gt;出番です。モバイルプッシュ通知は、プレイヤーがゲームに参加していないときでも、見逃したチャットメッセージやゲームのアップデート、その他の重要な通知をプレイヤーに通知する方法を提供します。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/mobile-push?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;モバイルプッシュ通知APIでは&lt;/a&gt;、iOSとAndroidの両方のデバイスにプッシュ通知を送信するための統一APIを提供しています。これにより、プロセスが簡素化され、プラットフォームに関係なく、すべてのデバイスに通知するために単一のAPIコールを送信することができます。また、個々のゲーマーにパーソナライズされた通知を送信したり、全プレイヤーにメッセージをブロードキャストするなど、プッシュ通知をカスタマイズすることもできます。このような柔軟性により、プレイヤーとの効果的なコミュニケーションが可能になり、プレイヤーの関心を引きつけ、情報を提供し続けることができます。&lt;/p&gt;

&lt;p&gt;PubNubでモバイルプッシュ通知を利用するには、&lt;a href="https://admin.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;管理者ポータルの&lt;/a&gt; &lt;a href="https://www.pubnub.com/how-to/push-notifications/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;ハウツーガイドに従って&lt;/a&gt;モバイルプッシュ通知を有効にする必要があります。また、&lt;a href="https://www.pubnub.com/how-to/admin-portal-push-notifications-android/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;FCMと&lt;/a&gt; &lt;a href="https://www.pubnub.com/how-to/admin-portal-push-notifications-apns/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;APNの&lt;/a&gt;モバイルプッシュ通知についてのより具体的で詳細なガイドもご用意しています。&lt;/p&gt;

&lt;h3&gt;
  
  
  言葉だけではありません：絵文字
&lt;/h3&gt;

&lt;p&gt;絵文字は、デジタルコミュニケーションにおける感情の世界共通言語として機能します。絵文字を使うことで、プレイヤーは自分の感情や反応を楽しくカラフルに表現することができ、チャットをよりインタラクティブで魅力的なものにすることができます。&lt;/p&gt;

&lt;p&gt;PubNubを使用すると、プレイヤーにメッセージではなく&lt;a href="https://www.pubnub.com/docs/general/messages/publish#send-signals?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;シグナルを&lt;/a&gt;発行させることで、Unityゲームに絵文字サポートを簡単に実装できます。シグナルは、メッセージよりもはるかに速く、安価に送信できるため、小さなデータのビットを送信するためのものです。絵文字は一般的にデータサイズが非常に小さいので、データを素早く送信するには最適な方法です。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/publish-and-subscribe#signal?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;PubNubのシグナルAPIを使って&lt;/a&gt;指定したチャットに絵文字を公開することができます。例えば、プレイヤーが手を振っている絵文字をグローバルチャットに送信したい場合、送信を押すと以下のコードが実行されます：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Dictionary&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;myMessage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Dictionary&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;myMessage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;emoji&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;:wave:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Signal&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;myMessage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Channel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;global&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Execute&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;Debug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ErrorData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Information&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;Debug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Timetoken&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;意図した受信者のプレイヤーは、指定されたチャンネルに加入していればシグナルを受信します。この場合、グローバルチャンネル用なので、全員が絵文字を受信することになります。シグナルを受信するには、リスナーイベントを購読してください：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;listener&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onSignal&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;OnPnSignal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nc"&gt;OnPnSignal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Pubnub&lt;/span&gt; &lt;span class="nx"&gt;pn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;PNSignalResult&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Handle the emoji by looking up the value and displaying the result.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;絵文字の値がUnityで定義されている実際の絵文字であることを確認する必要があります。これらの絵文字は、&lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;App Context&lt;/a&gt;（以前はObjectsとして知られていた）を介してPubNubネットワークに格納および取得することができ、プレイヤーがアクセスできるすべての絵文字をサーバーレスストレージから取得することができます。UnityゲームにApp Contextを実装する方法については、ハウツーガイドを参照してください。&lt;/p&gt;

&lt;h3&gt;
  
  
  メッセージに反応するメッセージリアクション
&lt;/h3&gt;

&lt;p&gt;いいね、ハート、サムズアップ、ステッカー、またはゲーム固有のカスタムリアクションなどの&lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/message-actions?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;メッセージリアクションは&lt;/a&gt;、プレイヤーがチャットメッセージに応答するための迅速かつ簡単な方法を提供します。リアクションはチャットにインタラクティブ性を与えるだけでなく、プレイヤー同士がお互いのメッセージを認め合い、関わり合うことで、コミュニティ意識を育むことができます。&lt;/p&gt;

&lt;p&gt;PubNubの&lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/message-actions?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;メッセージアクションAPIを&lt;/a&gt;使用して、リアクションや既読受信のような機能を構築したり、メッセージにカスタムメタデータを関連付けたりすることができます。Discordのようなチャットアプリケーションでサーバごとに異なるリアクションや絵文字があるのと同様に、チャットの種類も異なります。チャットがロードされたときに、以下の呼び出しを使って、指定したチャットチャンネルで利用可能なメッセージのリアクションを取得できます：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;GetMessageActions&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Channel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;chanChatLobby&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;PNGetMessageActionsResult&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; 
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;//result is of type PNGetMessageActionsResult.&lt;/span&gt;
  &lt;span class="p"&gt;}));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;プレイヤーがメッセージに対してリアクションを返そうとする場合、公開メッセージにメッセージリアクションを追加することでリアクションを返せます：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;AddMessageAction&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Channel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;chanChatLobby&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;MessageTimetoken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5610547826969050&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;PNMessageAction&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;reaction&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;smiley_face&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;PNAddMessageActionResult&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;//result is of type PNAddMessageActionResult.&lt;/span&gt;
  &lt;span class="p"&gt;}));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PubNubはタイムトークンを使って、メッセージがいつネットワークに公開されたかを正確に追跡します。PubNubはタイムトークンを使ってメッセージがいつネットワークに公開されたかを正確に追跡します。そのため、MessageTimetoken()の引数に適切なタイムトークンの値を指定することで、メッセージに反応することができます。&lt;/p&gt;

&lt;p&gt;リアクションをリッスンし、元のメッセージを送信したプレイヤーに通知するには、リスナーを追加し、OnPNMessageActionメソッドでリアクションを処理する必要があります：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;listener&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onMessageAction&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;OnPnMessageAction&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt;…&lt;/span&gt;
&lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nc"&gt;OnPnMessageAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Pubnub&lt;/span&gt; &lt;span class="nx"&gt;pn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;PNMessageActionEventResult&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="c1"&gt;//Handle Message Reaction&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;絵文字と同様に、&lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/objects?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;App Contextを&lt;/a&gt;使用して、これらのリアクションがゲーム内でどのように視覚的に表現されるかを取得し、保存することができます。メッセージリアクションを使用するには、&lt;a href="https://admin.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;管理ポータルで&lt;/a&gt;キーの&lt;a href="https://www.pubnub.com/how-to/admin-portal-persistence/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;メッセージ永続&lt;/a&gt;化を有効にする必要があります。&lt;/p&gt;

&lt;h3&gt;
  
  
  GIFとその他のマルチメディア
&lt;/h3&gt;

&lt;p&gt;チャット体験を向上させるもう一つの重要な機能は、マルチメディアファイルの共有です。GIFの共有、面白い瞬間のスクリーンショット、ゲームリソースの共有など、ファイル共有はゲームに新たなレベルの交流をもたらします。&lt;/p&gt;

&lt;p&gt;これらのタイプのマルチメディアファイルを実装するには、&lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/files?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;PubNubファイル共有APIを&lt;/a&gt;使用します。この機能により、プレイヤーはアクセス可能なファイルをアップロード、ダウンロード、削除することができます。ファイルを送信するには、次のように呼び出します：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;PNResult&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;PNFileUploadResult&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;fileUploadResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;SendFile&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Channel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="nx"&gt;chanFriendChatSamantha&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;File&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cat_picture.jpg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;//checks the bin folder if no path is provided&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Look at this photo!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ExecuteAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;PNFileUploadResult&lt;/span&gt; &lt;span class="nx"&gt;fileUploadResult&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fileUploadResponse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;PNStatus&lt;/span&gt; &lt;span class="nx"&gt;fileUploadStatus&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fileUploadResponse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Status&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;fileUploadStatus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;Error&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;fileUploadResult&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;Debug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pubnub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;JsonPluggableLibrary&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;SerializeToJsonString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fileUploadResult&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Handle File Upload Error.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;サブスクライバがファイルをリッスンするには、イベントリスナーを追加し、OnPNFileメソッドでファイルを表示する方法を処理する必要があります：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;listener&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onFile&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;OnPnFile&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt;…&lt;/span&gt;
&lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nc"&gt;OnPnFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Pubnub&lt;/span&gt; &lt;span class="nx"&gt;pn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;PNFileEventResult&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;//Handle how to display the file received&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;また、異なるチャットチャンネルに関連付けられたファイルを取得、リスト情報、および削除することができます。管理者ポータルでファイル共有機能を有効にし、メッセージの永続性を有効にする必要があります。この方法については、&lt;a href="https://www.pubnub.com/how-to/admin-portal-enabling-files/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;ファイルを有効にするハウツーガイドを&lt;/a&gt;参照してください。&lt;/p&gt;

&lt;h3&gt;
  
  
  チャット チャンネルの保護アクセスマネージャ
&lt;/h3&gt;

&lt;p&gt;どのようなゲーム環境においても、チャットチャンネルのセキュリティを確保することは最も重要です。それが不要なメッセージからプレイヤーを保護するか、機密の戦略的な議論を保護するかどうかにかかわらず、Unityゲームのチャットシステムは、セキュリティを念頭に置いて設計する必要があります。&lt;/p&gt;

&lt;p&gt;そこでPubNubの&lt;a href="https://www.pubnub.com/docs/sdks/unity/api-reference/access-manager?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;アクセスマネージャの&lt;/a&gt;出番です。これは、チャットチャンネルを保護するための堅牢で柔軟なフレームワークを提供します。Access Managerを使用すると、誰が各チャンネルを公開または購読できるかを制御し、Unityゲームのチャットシステムに追加のセキュリティレイヤーを追加することができます。&lt;/p&gt;

&lt;p&gt;Access Managerは、ユーザーレベル、チャンネルレベル、または個々のキーのレベルでパーミッションを付与することができます。例えば、2人のプレイヤー間のプライベートチャットでは、その2人のプレイヤーだけにプライベートチャネルの読み取りと書き込み権限を与えることができます。同様に、ギルドチャットでは、すべてのギルドメンバーに読み取り権限と書き込み権限を与え、ギルドリーダーにのみ管理権限を与えることができます。&lt;/p&gt;

&lt;p&gt;Access Managerはトークンベースの認証もサポートしており、ユーザーを安全に認証して適切なパーミッションを付与することができます。これにより、許可されたプレイヤーのみがゲームのチャットチャンネルにアクセスできるようになり、潜在的な脅威からゲームコミュニティを保護できます。&lt;/p&gt;

&lt;p&gt;この機能を利用するには、&lt;a href="https://admin.pubnub.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;管理者ポータルで&lt;/a&gt;Access Managerを有効にする必要があります。このアドオン機能を有効にする方法については、こちらの&lt;a href="https://support.pubnub.com/hc/en-us/articles/360051974791-How-do-I-enable-add-on-features-for-my-keys-?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;サポートページを&lt;/a&gt;参照してください。&lt;/p&gt;

&lt;h2&gt;
  
  
  次のページ
&lt;/h2&gt;

&lt;p&gt;このハウツーガイドでは、Unityゲームに堅牢なリアルタイムチャットシステムを追加する方法を学びました。環境内でPubNubオブジェクトを初期化する方法から、異なるチャットタイプを表すチャットパターンの設定、そしてメッセージの送受信までを説明しました。絵文字、メッセージリアクション、ファイル共有のような高度な機能の実装方法や、メッセージの永続性、モバイルプッシュ通知、チャネルのセキュリティなど、優れたチャットシステムの重要な側面も学びました。&lt;/p&gt;

&lt;p&gt;あなたが初めてのゲームに取り組んでいるインディーズ開発者であっても、マルチプレイヤーゲームを強化しようとしているベテラン開発者であっても、PubNubのリアルタイム機能は、あなたのゲーム内チャットをサポートするインフラストラクチャとして機能します。&lt;/p&gt;

&lt;p&gt;以下のリソースで詳細をご覧ください：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://www.pubnub.com/docs/sdks/unity?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;Unityのドキュメントを&lt;/a&gt;読んで、ゲームにリアルタイムチャットを追加するために必要なすべての知識を学びましょう。&lt;/li&gt;
&lt;li&gt;  Unityガイドで&lt;a href="https://www.pubnub.com/how-to/add-friend-list-to-your-unity-game/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;フレンドリストの&lt;/a&gt;追加方法を理解する。&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://github.com/PubNubDevelopers/unity-multiplayer-shooter"&gt;Unity Showcase Gameで&lt;/a&gt;チャットパターンを使用してチャットルームを管理する方法などをご覧ください。&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://github.com/pubnub/unity"&gt;Unity SDKのソース&lt;/a&gt;コードをご覧ください。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ご質問やご不明な点がございましたら、&lt;a href="//mailto:devrel@pubnub.com"&gt;devrel@pubnub.com&lt;/a&gt;のデベロッパーリレーションズチームまでお気軽にお問い合わせください。&lt;/p&gt;

</description>
    </item>
    <item>
      <title>イルミネートの設定方法</title>
      <dc:creator>PubNub Developer Relations</dc:creator>
      <pubDate>Wed, 15 May 2024 23:39:31 +0000</pubDate>
      <link>https://forem.com/pubnub-jp/iruminetonoshe-ding-fang-fa-i9</link>
      <guid>https://forem.com/pubnub-jp/iruminetonoshe-ding-fang-fa-i9</guid>
      <description>&lt;h2&gt;
  
  
  イルミネートとは？
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/products/illuminate/?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;PubNub Illuminateは&lt;/a&gt;、ゲームデータのライブ分析トラッキングに基づいた、その場での意思決定と実行可能なソリューションです。Illuminateを使用すると、ゲームにとって重要なKPIをマッピングし、ユーザーの行動に基づいて意思決定を行い、結果を即座に確認することができます。Illuminateを使用すれば、リアルタイムのインタラクションやゲームプレイが発生しているときに、データに裏打ちされたスマートな意思決定を即座に行い、ゲームの成長を促進し、効率を最適化することができます。&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dKyu6IFj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/TXpocUbj1UohYKUEK3Cp7/643f958d6cfa08df8e3ec0e0c6cfac8e/Illuminate_-_General_Infographic__Color___2_.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dKyu6IFj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/TXpocUbj1UohYKUEK3Cp7/643f958d6cfa08df8e3ec0e0c6cfac8e/Illuminate_-_General_Infographic__Color___2_.svg" alt="Illuminate allows you to experiment and iterate in real time" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;このチュートリアルでは、Illuminateの詳細、ゲーム（およびスタジオ）の成功にとってIlluminateが重要な理由、およびゲームのデータに基づいてアクションをトリガーするイン・ザ・モーメントの意思決定を作成するためのIlluminateのセットアップ方法について説明します。&lt;/p&gt;

&lt;h2&gt;
  
  
  なぜゲームにIlluminateなのか？
&lt;/h2&gt;

&lt;p&gt;従来のほとんどの分析ツールでは、リアルタイムのデータに対してアクションを起こすのは、通常はリアクティブなものでした。プレイヤーのフィードバックに基づく価格変更などの調整は、データ収集、テスト、プラットフォーム間での展開を含む長いパッチサイクルによって妨げられ、さらに開発および将来のコンテンツ作成からリソースを逸らしてしまいます。イベント発生から数時間でも遅れると、実用的な洞察が効かなくなるため、迅速な戦術的決定を可能にするために、プレイヤーのエンゲージメントと収益化をリアルタイムで可視化することが非常に必要です。&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--t-HT4tTS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/5VONbyesGtOfH2IARy6zQi/6eab4f3544cdae45066a4b3869f045b4/illuminate-problems-game-companies-face.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--t-HT4tTS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/5VONbyesGtOfH2IARy6zQi/6eab4f3544cdae45066a4b3869f045b4/illuminate-problems-game-companies-face.png" alt="There are a lot of problems that game companies face when trying to experiment or deploy changes based on feedback. Illuminate can help solve these problems." width="800" height="259"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Illuminateはローコードでカスタマイズ可能な製品であり、ゲームマネージャーやデータアナリストが戦略的決定の影響を即座に適用・評価できるようにします。Illuminateは、ゲーム開発者に負担をかけることなく、不正行為を検出しながら、ゲームバランスのオンザフライ調整、リアルタイムの実験によるより効果的で適切な収益化戦略、リテンションとプレイヤー体験を向上させるためのパーソナライズされたプレイヤー報酬の実行を可能にします。&lt;/p&gt;

&lt;p&gt;Illuminateがあれば、プラットフォームを管理し、その時々のアクションをすべてリアルタイムで行うことができます：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; チャンネル内でターゲットを絞った収益化実験を実行し、結果を即座に確認&lt;/li&gt;
&lt;li&gt; プレイヤーのアクションに基づいて、パーソナライズされたレコメンデーションを即座に送信します。&lt;/li&gt;
&lt;li&gt; ユーザーまたはコホートの行動に基づいてアクションをトリガーし、即座に結果を確認できます。&lt;/li&gt;
&lt;li&gt; 不正行為の検出を改善し、疑わしい行動をリアルタイムで特定して対処。&lt;/li&gt;
&lt;li&gt; ゲーム内のショップアイテムの価格を調整し、試してみる。プレイヤーが同じアイテムを何個も購入している場合は価格を調整し、ゲーム内イベントをトリガーして全ショップの価格に影響を与えます。&lt;/li&gt;
&lt;li&gt; チャレンジやアチーブメントを達成したプレイヤーに、ゲーム内アイテムの割引コードで報酬を与える。プレイヤーが最も時間を費やしていない場所を調整し、そのエリアで時間を費やすように報酬を与えるか、プレイヤーが得る報酬の種類を変更することを検討する。&lt;/li&gt;
&lt;li&gt; エンジニアをバグらせることなく、その場で役立つアイテムを生み出したり、ゲームプレイの中核となる機能を調整する。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Illuminateがどのようにゲームをパワーアップさせるかについては、&lt;a href="https://www.youtube.com/watch?v=2TXLPfAWNVI"&gt;Illuminate for Gamingの&lt;/a&gt;ビデオをご覧ください。&lt;/p&gt;

&lt;h2&gt;
  
  
  ゲームにIlluminateをセットアップする方法
&lt;/h2&gt;

&lt;p&gt;ゲーム用のIlluminateのセットアップに入る前に、セットアップを通して使用されるいくつかの重要な用語を理解する必要があります。Illuminateは以下の3つのモジュールで構成されています：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;ビジネスオブジェクト&lt;/strong&gt;：データをIlluminateに取り込む方法。選択したアプリやキーセットからデータを取得するためのコンテナであるBusiness Objectsを定義、作成、アクティブ化できます。一連のオプション（メジャー、ディメンション、またはメトリック）を通じて、リアルタイムで追跡したい特定のデータと、それをどのように集計するかを決定できます。&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;決定&lt;/strong&gt;：作成したメトリクスに対してアクションを起こす場所です。満たすべき条件を含むルールを定義し、これらのルールが満たされたときにトリガーされるアクションを定義することで実行できます。&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;ダッシュボード&lt;/strong&gt;：Business Objects で作成したメトリクスや、Decisions で実行したアクションを、チャートやダッシュボード（チャートの集合体）を使って可視化します。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qtDNhv95--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/D1i0KNHkQFIYvVzVbwtDm/a05fdda93a0e7acd44cede7c202f9c40/illuminate-how-to-gaming-illuminate-workflow.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qtDNhv95--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/D1i0KNHkQFIYvVzVbwtDm/a05fdda93a0e7acd44cede7c202f9c40/illuminate-how-to-gaming-illuminate-workflow.png" alt="Illuminate is a constant cycle of experimentation and iteration once you have set up the associated Dashboard, Business Object, and Decisions." width="800" height="619"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;重要な用語を定義したところで、Illuminateをゲームに統合するには6つのステップがあります：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; メッセージスキーマを理解する&lt;/li&gt;
&lt;li&gt; データの送信元を選択します。&lt;/li&gt;
&lt;li&gt; データを選択する&lt;/li&gt;
&lt;li&gt; データを視覚化する&lt;/li&gt;
&lt;li&gt; データを活用する&lt;/li&gt;
&lt;li&gt; 可視化して調整する&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  メッセージスキーマを理解する
&lt;/h3&gt;

&lt;p&gt;ゲームのデータスキーマを理解することは非常に重要です。これは、プレイヤーのアクション、ゲーム内のトランザクション、システムイベントなど、追跡および分析したいデータのタイプを特定することを意味します。ペイロードに何が含まれているかを正確に理解し文書化することで、開発者は、アナリストや他のチームメンバーが JSONPath を使用してデータを適切なソースに効率的にマッピングできるようになります。Business Objects を作成する際にデータを選択する際に、なぜこれが重要なのかを理解できるでしょう。&lt;/p&gt;

&lt;h3&gt;
  
  
  データの取得元を選択する
&lt;/h3&gt;

&lt;p&gt;Illuminateは、PubNubの電源の有無にかかわらず、オンラインに接続するあらゆるゲームで使用できます。PubNubがゲームのインフラを提供している場合は、&lt;a href="https://admin.pubnub.com/?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;管理ポータルで&lt;/a&gt;ビジネスオブジェクトを作成する際に、ゲームに使用する適切なアプリとキーセットを選択するだけです（詳細は後ほど説明します）。&lt;/p&gt;

&lt;p&gt;あなたのゲームがPubNubによって供給されていない場合、あなたのデータは、&lt;a href="https://www.pubnub.com/docs/sdks/rest-api/send-fire-request?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;REST APIを介して&lt;/a&gt;、または私たちの&lt;a href="https://www.pubnub.com/docs/sdks?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;SDKの&lt;/a&gt;いずれかを介して、Fire APIを使用して送信することができます。Fireエンドポイントを使用すると、クライアントはFunctionsイベントハンドラにメッセージを送信できます。これらのメッセージは、あなたがファイアしたチャネルに登録されているイベントハンドラに直接送られ、それらの実行をトリガします。&lt;/p&gt;

&lt;p&gt;PubNub Fire APIを利用するには、PubNubアカウントを作成し、ゲームに必要な機能をキーセットに設定する必要があります。このキーセットにはFire APIに必要なpublishキーとsubscribeキーが含まれています。その方法は&lt;a href="https://www.pubnub.com/how-to/admin-portal-create-keys/?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;ハウツーガイドを&lt;/a&gt;ご覧ください。&lt;/p&gt;

&lt;h3&gt;
  
  
  データを選択します：ビジネスオブジェクト
&lt;/h3&gt;

&lt;p&gt;ビジネスオブジェクトはIlluminateの基本です。これは、Illuminate内で意思決定や視覚化に使用するデータのコンテナであり、基本的にIlluminateにデータを取り込む方法です。&lt;/p&gt;

&lt;p&gt;ビジネスオブジェクトは3つの要素で構成されます：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; データの選択（メジャーとディメンション）&lt;/li&gt;
&lt;li&gt; データ・ソース（データの出所&lt;/li&gt;
&lt;li&gt; 条件（メトリクス）&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;データベースとは関係ありませんが、SQLのSELECT（メジャーとディメンジョン）、FROM（データ・ソース）、WHERE（メトリクス）という観点からビジネス・オブジェクトの構造を考えると便利です。ビジネス・オブジェクトを作成する際、注意すべき特定の詳細や回避策については、必ず&lt;a href="https://www.pubnub.com/docs/illuminate/business-objects/basics?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;ドキュメントに従って&lt;/a&gt;ください。&lt;/p&gt;

&lt;h4&gt;
  
  
  データの選択
&lt;/h4&gt;

&lt;p&gt;ビジネス・オブジェクトで選択できる値には 2 つのタイプがあります：メジャーとディメンジョンです。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/illuminate/business-objects/basics#measures?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;メジャーは&lt;/a&gt;数値で、定量的な値です。メジャーの例としては、ゲーム時間、コイン数、キル数、武器ダメージ、注文金額などがあります。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/illuminate/business-objects/basics#dimensions?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;Dimensions&lt;/a&gt;は定性的な値で、プレイヤーの言語、選択した化粧品、クエストの種類、選択した武器の種類、ゲームのレベルなどがあります。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LX_501on--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/2g5KUkmNBlZ9GXWe7ofZlJ/479b6478e62cb00ca07cd0cbd7b205c0/illuminate-how-to-gaming-business-object-edit.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LX_501on--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/2g5KUkmNBlZ9GXWe7ofZlJ/479b6478e62cb00ca07cd0cbd7b205c0/illuminate-how-to-gaming-business-object-edit.png" alt="With Illuminate, you can create and edit Business Objects which contain mapped quantitative and qualitative data to capture." width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;追跡したいデータの種類に応じて、JSONPathを使用して&lt;a href="https://www.pubnub.com/docs/illuminate/business-objects/basics#data-mapping?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;データを&lt;/a&gt;メジャーとディメンションに&lt;a href="https://www.pubnub.com/docs/illuminate/business-objects/basics#data-mapping?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;マッピング&lt;/a&gt;する必要があります。Illuminate は、（前のステップで設定した）データソースからこのデータのキャプチャを開始する場所を理解する必要があります。データ・ソースを定義するには、各メジャーおよびディメンションの横にあるマップ・ボタンを選択し、対応する JSON パスを指定します。&lt;/p&gt;

&lt;p&gt;これは、メッセージ・スキーマを理解する必要があるため、Business Objects のセットアップで最も厄介な部分です。メッセージスキーマは文書化されているか、または以前から理解しているので、これを Iluminate がデータを探す方法にマッピングする必要があります。&lt;/p&gt;

&lt;p&gt;メッセージ（特にPublish Message API）をキャプチャしている場合、Illuminateは次の構造を探しています。インフラストラクチャがPubNubによって提供されていない場合、データはPublish Message APIと同じ構造でマッピングする必要があります：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;message&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt; &lt;span class="c1"&gt;// data from the published message&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;body&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="nx"&gt;payload&lt;/span&gt; &lt;span class="nx"&gt;defined&lt;/span&gt; &lt;span class="nx"&gt;by&lt;/span&gt; &lt;span class="nx"&gt;you&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;meta&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;meta&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="nx"&gt;defined&lt;/span&gt; &lt;span class="nx"&gt;by&lt;/span&gt; &lt;span class="nx"&gt;you&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;userId&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="nx"&gt;ID&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="nx"&gt;UUID&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;sender&lt;/span&gt; &lt;span class="nx"&gt;ID&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;channel&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;channel&lt;/span&gt; &lt;span class="nx"&gt;on&lt;/span&gt; &lt;span class="nx"&gt;which&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="nx"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;published&lt;/span&gt;
 &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;メジャーまたはディメンジョンを正しくマッピングするには、&lt;code&gt;メッセージ・&lt;/code&gt;オブジェクトの後に別のフィールドを指定する必要があります。メジャーまたはディメンションを正しくマップするには、メッセージオブジェクトの後に別のフィールドを指定する必要があります&lt;code&gt;。&lt;/code&gt;これは常に次の構造に従います。&lt;/p&gt;

&lt;p&gt;&lt;em&gt;どのようにデータをマッピングするかは、メッセージの構造によって&lt;/em&gt;決まります。以下は、メッセージのデータをマッピングする例です：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  コインの追跡数 (メジャー) =&amp;gt; $.message.meta.coins&lt;/li&gt;
&lt;li&gt;  装備している化粧品 (ディメンション) =&amp;gt; $.message.body&lt;/li&gt;
&lt;li&gt;  チャンネル名 (dimension) =&amp;gt; $message.channel&lt;/li&gt;
&lt;li&gt;  与えたダメージ（メジャー） =&amp;gt; $.message.body[6］&lt;/li&gt;
&lt;li&gt;  特定のユーザー名の取得（次元） =&amp;gt; $.message.userId&lt;/li&gt;
&lt;li&gt;  友達の数 (メジャー) =&amp;gt; $.message.body.user.friends_count&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xSMgYJkd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/1s2MtcR50cmcLk0s2EapsL/5aa0bb25a6fcb384f5e3f0b6932c99af/illuminate-how-to-gaming-map-coins-purchased.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xSMgYJkd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/1s2MtcR50cmcLk0s2EapsL/5aa0bb25a6fcb384f5e3f0b6932c99af/illuminate-how-to-gaming-map-coins-purchased.png" alt="In Illuminate, you can map different data to be captured via Business Objects." width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;IlluminateはPubNubの&lt;a href="https://www.pubnub.com/docs/general/metadata/channel-metadata?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;App Contextを&lt;/a&gt;利用してデータを取得することもでき、PubNubネットワーク上で送信されたチャネル、チャネルメンバー、チャネルメンバー、ユーザに関するメタデータを永続化することができます。Illuminateがこのデータをキャプチャする方法を正確に追うことで、この情報にアクセスできます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;// data from the sending user metadata, can be null&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;externalId&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="nx"&gt;external&lt;/span&gt; &lt;span class="nx"&gt;ID&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;status&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;custom&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="nx"&gt;metadata&lt;/span&gt; &lt;span class="nx"&gt;defined&lt;/span&gt; &lt;span class="nx"&gt;by&lt;/span&gt; &lt;span class="nx"&gt;you&lt;/span&gt;
 &lt;span class="p"&gt;},&lt;/span&gt;
 &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;channel&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt; &lt;span class="c1"&gt;// data from the channel the message is sent on, can be null&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;channel&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;channel&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;status&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;channel&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;custom&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt; &lt;span class="nx"&gt;channel&lt;/span&gt; &lt;span class="nx"&gt;metadata&lt;/span&gt; &lt;span class="nx"&gt;defined&lt;/span&gt; &lt;span class="nx"&gt;by&lt;/span&gt; &lt;span class="nx"&gt;you&lt;/span&gt;
 &lt;span class="p"&gt;},&lt;/span&gt;
 &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;membership&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt; &lt;span class="c1"&gt;// data from the user's membership to the channel, can be null&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;status&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;membership&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;custom&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt; &lt;span class="nx"&gt;membership&lt;/span&gt; &lt;span class="nx"&gt;metadata&lt;/span&gt; &lt;span class="nx"&gt;defined&lt;/span&gt; &lt;span class="nx"&gt;by&lt;/span&gt; &lt;span class="nx"&gt;you&lt;/span&gt;
 &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;メッセージと同様に、メジャーまたはディメンジョンを正しくマッピングするには、&lt;code&gt;ユーザ&lt;/code&gt;、&lt;code&gt;チャネル&lt;/code&gt;、または&lt;code&gt;メンバシップ・オブジェクトに続いて&lt;/code&gt;、JSONから少なくとも1つのキーを指定する必要があります。これは常に、&lt;code&gt;$.user.{obligatory-secondary-field}.{optional-further-fields}&lt;/code&gt; という構造に従います。以下に、App Contextのデータをマッピングする例をいくつか示します：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  ショップアイテムの詳細 (ディメンション) =&amp;gt; $.channel.custom.details&lt;/li&gt;
&lt;li&gt;  フレンドリストのステータス (ディメンション) =&amp;gt; $.membership.status&lt;/li&gt;
&lt;li&gt;  プレーヤーの言語 (ディメンション) =&amp;gt; $.user.custom.language&lt;/li&gt;
&lt;li&gt;  プレーヤーの平均スコア (メジャー) =&amp;gt; $.user.custom.team_deathmatch_score&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;注釈&lt;/strong&gt; ビジネス・オブジェクトを作成するには、少なくとも 1 つのディメンジョンまたは 1 つのメジャーを追加する必要があります。&lt;/p&gt;

&lt;h4&gt;
  
  
  データ・ソース
&lt;/h4&gt;

&lt;p&gt;メジャーおよびディメンジョンのマッピングが完了したら、データの取得元を決定する必要があります。これは、以前に決定した内容です。Illuminateが正しいソースからデータを取得していることを確認するために、先に定義した適切なアプリとキーセットを必ず選択してください。&lt;/p&gt;

&lt;h4&gt;
  
  
  条件（メトリクス）
&lt;/h4&gt;

&lt;p&gt;データソースを選択したら、&lt;a href="https://www.pubnub.com/docs/illuminate/business-objects/basics#metrics?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;メトリクスと&lt;/a&gt;呼ばれる条件を追加できます。SQL の WHERE 文に似ていますが、Business Objects でデータを取得するためにメトリクスは必須ではありません。ただし、メトリッ クは、ディシジョンを作成したり、チャートを通じてダッシュボードで視覚化したりするために必要であることに留意してくだ さい（詳細は後述します）。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/illuminate/business-objects/create-business-object#create-metrics?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;メトリクスの作成&lt;/a&gt;時には、フィルタにフィールドを割り当てて選択する必要があります。注意すべきフィールドがいくつかあります：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  ダッシュボードでデータを視覚化するチャートも同じ名前になるため、メトリックに意味のある名前を付けます。&lt;/li&gt;
&lt;li&gt;  関数を選択する場合、メジャーは現在、&lt;code&gt;SUM&lt;/code&gt;、&lt;code&gt;AVG&lt;/code&gt;、&lt;code&gt;MAX&lt;/code&gt;、および&lt;code&gt;MIN&lt;/code&gt; を使用して集計できます。ディメンジョンは、&lt;code&gt;COUNT&lt;/code&gt;関数のみを使用できます。関数を選択すると、ドロップダウン・リストからメジャーまたはディメンジョンを選択できます。&lt;/li&gt;
&lt;li&gt;  Period では、Aggregation ウィンドウまたは関数の期間を選択します。&lt;/li&gt;
&lt;li&gt;  チャートやデシジョンで使用したいディメンションを必ず選択してください（後でこれらを選択しないと、チャートでセグメンテーションしたり、デシジョンでルールに適用したりできないため）。&lt;/li&gt;
&lt;li&gt;  異なるディメンションに基づいて、特定のメッセージまたはApp Contextデータをフィルタリングします。ダッシュボードで視覚化してデータを収集するには、メトリックにフィルタを適用する必要はないことに留意してください。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;1つのビジネス・オブジェクトに対して、異なるデータを取得する複数のメトリックを作成できます。以下は、Measure の与えたダメージと、そのダメージを与えた武器の種類をキャプチャするメトリックの例です：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9tFdditq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/Sq6bSPz7hn0Gwy0VWUYqV/76f0278d0d5cc533d9c3d7a1b47d25d0/illuminate-how-to-gaming-business-object-edit-metric.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9tFdditq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/Sq6bSPz7hn0Gwy0VWUYqV/76f0278d0d5cc533d9c3d7a1b47d25d0/illuminate-how-to-gaming-business-object-edit-metric.png" alt="In Illuminate, you can edit a metric associated with a Business Object to capture specific data by using Filters." width="800" height="548"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  データの可視化ダッシュボードとチャート
&lt;/h3&gt;

&lt;p&gt;Illuminateでは、追跡したいメトリクスだけでなく、ダッシュボードのチャートを通じて、意思決定アクションとその結果も&lt;a href="https://www.pubnub.com/docs/illuminate/dashboards/basics?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;視覚化&lt;/a&gt;できます。&lt;/p&gt;

&lt;p&gt;こうすることで、製品の傾向をリアルタイムで観察し、データに基づいたビジネス上の意思決定で対応し、アプローチを改善することができます。また、先に設定したビジネスオブジェクトに基づいて、Illuminateが適切にデータを取得しているかどうかを判断するのにも最適です！&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/illuminate/dashboards/basics#dashboards?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;ダッシュボードを&lt;/a&gt;作成することができます。ダッシュボードはチャートの集合体で、すべてのメトリクスを一箇所で確認したり、ダッシュボードにチャートを追加したりできます。&lt;a href="https://www.pubnub.com/docs/illuminate/dashboards/basics#charts?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;チャートは&lt;/a&gt;、特定の Business Object に対して定義されたメトリックを視覚的に表したものです。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2NwoFfyK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/6PLWtomxwi4aQ6zQwXdPDo/a30d85ab378d640247158556624d8e35/illuminate-how-to-gaming-add-chart.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2NwoFfyK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/6PLWtomxwi4aQ6zQwXdPDo/a30d85ab378d640247158556624d8e35/illuminate-how-to-gaming-add-chart.png" alt="With Illuminate, you can add charts to Dashboards to visualize data." width="800" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;いつでも、異なる時間範囲（30 分、1 時間、またはカスタム日付など）を表示したり、棒グラフ（デフォルト表示）や折れ線グラフなど、異なるチャート・タイプでメトリッ ク・データを表示したりするなど、メトリッ ク・データをチャートに表示する方法をカスタマイズできます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DjSDXefD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/4B7KLgDDQWyZuTrTjxWF2Y/f602d35dc8da99a64dde0a9aa43d844e/illuminate-how-to-gaming-monetization-dashboard.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DjSDXefD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/4B7KLgDDQWyZuTrTjxWF2Y/f602d35dc8da99a64dde0a9aa43d844e/illuminate-how-to-gaming-monetization-dashboard.png" alt="In Illuminate, you can monitor data captured in real time by visualizing the charts in your Dashboard and see when any associated Decisions are triggered." width="740" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;1つのダッシュボードに複数のチャート（メトリクス）を追加したり、ゲームの異なる領域（収益化、ゲームプレイ、クエスト報酬など）を視覚化するために異なるダッシュボードを持つこともできます。デシジョンを設定すると、ダッシュボードのチャートでデシジョンアクションのトリガーとその結果を見ることができます。&lt;/p&gt;

&lt;h3&gt;
  
  
  データの活用デシジョンとアクション
&lt;/h3&gt;

&lt;p&gt;メトリックが作成されたら、そのデータの評価を開始し、傾向を監視し、最も重要なことは、それに基づいて行動することです。&lt;/p&gt;

&lt;p&gt;Illuminateには&lt;a href="https://www.pubnub.com/docs/illuminate/decisions/basics?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;Decisions&lt;/a&gt;モジュールがあり、さまざまなタイプのアクションと、これらのアクションを実行するタイミングを定義するルールを作成することで、行動したいメトリクスを定義できます。&lt;/p&gt;

&lt;p&gt;デシジョンを作成する場合&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  ビジネス・オブジェクトと、それにリンクされているメトリクスのいずれかを選択します。&lt;/li&gt;
&lt;li&gt;  実行したい&lt;a href="https://www.pubnub.com/docs/illuminate/decisions/basics#actions?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;アクションを&lt;/a&gt;定義する。&lt;/li&gt;
&lt;li&gt;  選択した条件と構成したアクションを使用して、[rules}&lt;a href="https://www.pubnub.com/docs/illuminate/decisions/basics#rules?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;(https://www.pubnub.com/docs/illuminate/decisions/basics#rules)&lt;/a&gt; 。これらのルールがアクションをトリガーします。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Decisionsは、プロダクト・マネージャーがエンゲージメントとマネタイズの戦略を、成文化して展開する前に実験することを目的としています。Illuminateを使用すると、仮定ではなく実際のデータに基づいて意思決定を行い、自動化された条件とアクションによってそのデータに基づいて行動することができる。&lt;/p&gt;

&lt;p&gt;意思決定は2つの部分で構成される：アクションとルールだ。&lt;/p&gt;

&lt;h4&gt;
  
  
  アクション
&lt;/h4&gt;

&lt;p&gt;アクションは、条件（次に説明する）が満たされたときに何が起こるかを定義する。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SP1kLL6b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/2scdabnjHhwn2ygxEKaPcF/63e4c9b8988c3f64f08b9d61bbe712b2/illuminate-how-to-gaming-edit-configuration.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SP1kLL6b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/2scdabnjHhwn2ygxEKaPcF/63e4c9b8988c3f64f08b9d61bbe712b2/illuminate-how-to-gaming-edit-configuration.png" alt="In Illuminate, edit the configuration of your Decision to trigger on different conditions and execute various actions." width="800" height="632"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;アクションを設定する際に、5つのアクションタイプから選択できます：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; メッセージの送信：ユーザーまたはチャネルにメッセージを送信します。PubNub Publish APIを利用します。オプションで変数(${variableThatChanges})を追加することができ、決定ルールを設定する際に動的に変更することができます。&lt;/li&gt;
&lt;li&gt; Webhook：サードパーティのサービス連携に接続することで、特定のURLにコールを送信します。オプションで変数 (${variableThatChanges}) を追加でき、決定ルールを設定するときに動的に制御して変更できます。&lt;/li&gt;
&lt;li&gt; Update User: ユーザー用のPubNub App Context APIを利用して、必要な情報をキーと値のペアとして提供することで、定義済みまたはカスタムのユーザーメタデータを設定します。&lt;/li&gt;
&lt;li&gt; チャネルの更新：チャネル用のPubNub App Context APIを利用して、必要な情報をキー/値のペアとして提供することで、定義済みまたはカスタムのチャネルメタデータを設定します。&lt;/li&gt;
&lt;li&gt; メンバーシップの更新：メンバーシップ用のPubNub App Context APIを利用して、必要な情報をキー/値のペアとして提供することで、定義済みまたはカスタムメンバーシップのメタデータを設定します。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;1つのDecisionにつき設定できるメトリックは1つだけですが、ユースケースをカバーするために複数のDecisionを作成できます。DecisionのActionを作成するときは、必ず&lt;a href="https://www.pubnub.com/docs/illuminate/decisions/basics#actions?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;ドキュメントに従って&lt;/a&gt;ください。&lt;/p&gt;

&lt;p&gt;アクションの設定が完了したら、アクションをトリガーするためのルールを設定する必要があります。&lt;/p&gt;

&lt;h4&gt;
  
  
  ルール
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/docs/illuminate/decisions/basics#rules?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;ルールは&lt;/a&gt;、アクションをトリガするために満たさなければならない&lt;a href="https://www.pubnub.com/docs/illuminate/decisions/basics#conditions?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;条件&lt;/a&gt;である、評価する条件と、条件が満たされたときに実行されるアクションで構成されます。1つのルールは、どの条件に対してどのアクションをトリガーすべきかを記述した定義（デシジョンテーブルの行）である。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--y8j6NLRN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/4r1hj3lXGlVwIM1zB2pUkG/808ad92653032c9bd901571a3ac000a1/illuminate-how-to-gaming-edit-rules.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--y8j6NLRN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.ctfassets.net/3prze68gbwl1/4r1hj3lXGlVwIM1zB2pUkG/808ad92653032c9bd901571a3ac000a1/illuminate-how-to-gaming-edit-rules.png" alt="In Illuminate, you can add and edit rules that when satisfied, trigger various Actions associated with your Decisions." width="800" height="705"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;デシジョンテーブルは4つの部分で構成される：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; ヒット・ポリシー：条件を満たした場合に、最初にマッチしたルール（Single）に対してのみアクションをトリガーするか、すべてのルール（Multiple）に対してアクションをトリガーするかを定義する設定。&lt;/li&gt;
&lt;li&gt; 集約ウィンドウ：ルール設定ウィンドウで編集できない唯一の値。メトリックを作成するときにFunctionに選択したPeriod値から自動入力されます。この値は、メトリックがメジャーまたはディメンジョンに対して指定の関数 (COUNT、AVG、MAX、その他) を実行する頻度を示します。&lt;/li&gt;
&lt;li&gt; 評価頻度：ルールのルックバック・ウィンドウで、Illuminate がこの Decision でルールを実行する頻度を定義します。&lt;/li&gt;
&lt;li&gt; 条件：条件：構成テーブルを使用して独自に定義する要件のセット。ここでは、どの条件（およびそれらが満たすしきい値）がどのアクションをトリガするかを定義します。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;デシジョ ン テーブルの各行は、 条件 と ア ク シ ョ ンで構成 さ れ る 個別のデシジョ ン ルールである こ と に留意 し て く だ さ い。&lt;strong&gt;ルールの順序は、それらが実行される順序を決定する&lt;/strong&gt;。既存の順序を変更したい場合は、「デシジョンのルールの編集」を選択し、各ルールの横にある「アクション」メニューの「上へ移動」または「下へ移動」オプションを使用して順序を変更する。&lt;/p&gt;

&lt;h3&gt;
  
  
  可視化と調整
&lt;/h3&gt;

&lt;p&gt;ビジネスオブジェクト、ダッシュボード、チャート、およびディシジョンを設定したら、リアルタイムで分析し、変更を試すことができます。あなたが行った変更がゲーマーやゲームに良い影響を与えているかどうかを確認するために、バランスパッチを待つ必要はもうありません。&lt;/p&gt;

&lt;p&gt;ゲーム内のエンゲージメントを高めるための調整を行うため、実験的な決断を下すことになります。&lt;/p&gt;

&lt;h2&gt;
  
  
  次のページ
&lt;/h2&gt;

&lt;p&gt;Illuminateは、成長と会社の収益に直接責任を持つチームの手に、リアルタイムの実験の力を与えます。ゲームにとって重要なKPIをマッピングし、それらの行動に基づいて意思決定をトリガーすることで、ゲームプレイやユーザーの行動に基づいて実験し、データに裏打ちされたスマートな意思決定を行うための貴重なプラットフォームです。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pubnub.com/products/Illuminate-gaming/?utm_source=medium&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=off_domain&amp;amp;utm_content=ja"&gt;Illuminateのリソースを&lt;/a&gt;チェックして、Illuminateがあなたのゲームにどのように役立つかを確認し、Illuminateを自分で試す方法を学んでください。ご質問がございましたら、&lt;a href="//mailto:devrel@pubnub.com"&gt;devrel@pubnub.com&lt;/a&gt; のデベロッパー・リレーション・チームまでお気軽にお問い合わせください。&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
