PubNubは、最小限のレイテンシでWebSocketを介してメッセージを公開および購読するためのインフラストラクチャを提供するリアルタイムメッセージングのグローバルネットワークです。高負荷や不安定な接続下でも信頼性の高いデータ配信を必要とするアプリケーション向けに設計されています。PubNub公式ドキュメント(2025年)によると、このプラットフォームは世界中の70,000以上のアプリケーションに対して毎月1兆件以上のメッセージを処理しています。
重要なポイント
PubNubは、2010年に設立されたグローバルなリアルタイムデータネットワークです。メッセージの公開と購読のためのAPIを提供し、さらに履歴保存、プレゼンス管理、サーバーレス関数(PubNub Functions)、データストリーム分析などの追加サービスも提供します。
PubNubのアーキテクチャは、15以上の地域に分散したプレゼンスポイント(POP)の分散ネットワークに基づいています。各ポイントにはキャッシングブローカーが含まれており、パブリッシャーとサブスクライバーの間で最小レイテンシでメッセージをルーティングします。PubNubは単一の中央ブローカーを使用せず、各リージョンが独立して動作し、グローバルネットワークを介して同期します。
PubNub公式サイト(2025年)によると、プラットフォームは200か国以上で70,000以上のアプリケーションにサービスを提供しています。主要顧客にはLogitech(IoTデバイス管理)、GoPro(リアルタイム動画配信)、eBay(オークション同期)、Snapchat(チャットと通知)が含まれます。
PubNubは3つの原則に基づいて構築されています。速度(1リージョン内の95パーセンタイルで10ms未満のレイテンシ)、信頼性(自動リトライ付きのat-least-once配信保証)、スケーラビリティ(チャネル数に制限のない水平拡張)です。プラットフォームはメッセージを長期保存せず、履歴は別途接続されたStorage & Playbackサービスを介して利用可能です。
PubNubの動作モデルは、古典的なパブリッシュ-サブスクライブパターンに基づいています。パブリッシャークライアントは、publishキーを使用してPubNub REST API経由でチャネルを指定したメッセージを送信します。PubNubは、アクティブなWebSocket接続を介して、そのチャネルのすべてのサブスクライバーにメッセージを配信します。サブスクライバーは、PubNub SDKに登録されたコールバックハンドラーを介してメッセージを受信します。
PubNubのトランスポート層は、主要プロトコルとしてWebSocketを使用し、制約のある環境向けにHTTP long-pollingへのフォールバックを備えています。SDKは接続を自動的に管理します。確立、ハートビートの維持(ネットワークに応じて15〜60秒ごと)、切断時の再接続を行います。
PubNubの各メッセージにはメタデータが含まれます。送信者UUID、タイムスタンプ、シーケンス番号(timetoken)、フラグ(store、replicate、eatAfterRead)です。Timetokenは、チャネル内のメッセージのグローバルな順序を保証する時間ベースの一意のPubNub識別子です。PubNubドキュメント(2025年)によると、timetokenの解像度は10ナノ秒です。
クライアントがメッセージを公開すると、Stream Controller(PubNubのルーティングモジュール)を通過します。Stream Controllerはアクセス権(PAM)を確認し、変換ルール(PubNub Functions)を適用し、ターゲットリージョンを決定して、すべてのサブスクライバーにメッセージを送信します。サブスクライバーがオフラインの場合、接続回復を待機している間、メッセージはデフォルトで30秒間バッファリングされます。
PubNubのキーシステムは、アクセス権を3つのレベルに分離します。publishキー(公開のみ)、subscribeキー(購読のみ)、secretキー(管理)です。各アプリケーションは登録時に3つのキーのセットを受け取りますが、secretキーはクライアントに送信されることはなく、サーバー側でのみ使用されます。
Publishキーはチャネルにメッセージを送信するために使用されます。Subscribeキーはチャネルを購読してメッセージを受信するために使用されます。SecretキーはPubNub Access Manager(PAM)を介したアクセス管理、一時的なオーディエンストークンの作成、キー管理に使用されます。Secretキーはサーバー上で安全に保管され、クライアントに公開されることはありません。
PubNubは複数の認証モードをサポートしています。IPアドレスによる認証(サーバー用)、secretキーによる認証(管理操作用)、一時トークンによる認証(クライアント用)です。一時トークンはPAMを介して、有効期限、チャネル、権限(read、write、manage)の制限付きで発行されます。
PubNubチャネルは、メッセージの名前付きルートです。チャネル名は最大92文字の文字列で、ラテン文字、数字、ハイフン、アンダースコアをサポートします。チャネルは最初の公開または購読時に動的に作成されます。PubNubは購読リクエストの*文字を使用したチャネルパターンをサポートしており、チャネルのグループ(例:user-*)を購読できます。
Channel Groupsは、一括購読のためのチャネルグループ化メカニズムです。50の個別チャネルを購読する代わりに、クライアントは1つのグループを購読し、そのグループ内のすべてのチャネルからのメッセージが自動的にクライアントに配信されます。Channel Groupsはネスティングをサポートしますが、深さは3レベルを超えないようにする必要があります。
PubNub技術ドキュメント(2025年)によると、チャネルあたりの最大サブスクライバー数は50,000です。より高い負荷の場合は、プレフィックス付きチャネルを使用してオーディエンスをシャーディングすることをお勧めします(例:chat-room-001、chat-room-002)。Channel Groupsは地理的またはテーマ別の原則によっても編成できます。
| パラメータ | 最大値 | 備考 |
|---|---|---|
| チャネル名の長さ | 92文字 | ラテン文字、数字、-、_ |
| チャネルあたりのサブスクライバー数 | 50,000 | それ以上はシャーディング |
| Channel Groups | 2,000グループ/キー | グループあたり最大500チャネル |
| 履歴(ストレージ) | 無制限 | ストレージ容量に応じて課金 |
PubNubの統合には、登録、管理パネルでのアプリケーション作成、キーセットの取得が必要です。PubNubライブラリはJavaScript、Swift、Kotlin、Java、Dart(Flutter)、C#、Python、Ruby、Goなどの多くの言語で利用可能です。ブラウザとNode.js向けのJavaScriptの例を見てみましょう。
PubNubドキュメント(2025年)によると、pubnub-jsライブラリはCommonJSとES Moduleの両方のインポートをサポートしています。ブラウザの場合は、npmビルド後にwebpackやViteを使用してバンドルすることをお勧めします。
import PubNub from 'pubnub';
const pubnub = new PubNub({
publishKey: 'PUBLISH_KEY',
subscribeKey: 'SUBSCRIBE_KEY',
userId: 'user-100'
});
pubnub.subscribe({
channels: ['chat-general']
});
pubnub.addListener({
message: (event) => {
console.log('新しいメッセージ:', event.message);
},
presence: (event) => {
console.log('プレゼンス:', event.uuid, event.action);
}
});
pubnub.publish({
channel: 'chat-general',
message: { text: 'Hello everyone!', sender: 'user-100' }
});
pubnub.fetchMessages(
{ channels: ['chat-general'], count: 50 },
(status, response) => {
if (status.error) {
console.error('履歴の取得エラー', status);
return;
}
const messages = response.channels['chat-general'];
messages.forEach((msg) => {
console.log(msg.message, msg.timetoken);
});
}
);
PubNub Functionsは、PubNub側でメッセージを処理するためのサーバーレスプラットフォームです。関数はJavaScriptで記述され、安全な分離環境(V8 isolate)で実行されます。サブスクライバーに配信される前に、メッセージを変換、フィルタリング、バッファリング、リダイレクトできます。
Stream Controllerは、ルールに基づいてメッセージフローを管理する組み込みのルーティングメカニズムです。ルールは、どのメッセージを配信するか、どのメッセージを破棄するか、どのメッセージを処理のためにPubNub Functionsに送信するかを決定します。Stream Controllerは、メッセージコンテンツ、チャネルタイプ、メタデータによる条件付きルーティングをサポートしています。
PubNubブログ(2024年)によると、PubNub Functionsは、フィルタリングと変換のロジックを独自のサーバーではなくPubNubエッジノードで実行することで、メッセージ処理のサーバーインフラストラクチャコストを40〜60%削減します。関数はHTTPリクエスト、Key-Valueストレージ、同じスペース内の他の関数にアクセスできます。
モバイルプラットフォーム向けPubNub SDKは、iOS(Swift)、Android(Kotlin/Java)、Flutter(Dart)、React Native(JavaScript)で利用可能です。モバイルSDKは、pub/sub、プレゼンス、履歴、PAM、PubNub Functionsの全機能をサポートしています。プッシュ通知については、PubNubは特別なモバイルプッシュゲートウェイメカニズムを介してAPNsおよびFCMと統合します。
モバイルデバイス向けの最適化には、アダプティブハートビート、バッチメッセージ処理、バックグラウンドモードのサポートが含まれます。iOS向けPubNub SDKはBackground Task APIを使用して、アプリが最小化されている間も接続を維持します(標準バックグラウンド時間は最大30秒)。より長いバックグラウンド動作にはプッシュ通知が必要です。
Mobile Push Gatewayは、PubNubを介してプッシュ通知を送信するメカニズムです。メッセージがチャネルに公開されると、PubNubは自動的にどのサブスクライバーがオフラインかを判断し、APNs(iOS)またはFCM(Android)を介してプッシュ通知を送信します。設定は管理パネルで一度行うだけで、その後はチャネルからのすべてのメッセージが自動的にプッシュチャネルに複製されます。PubNubドキュメント(2025年)によると、ゲートウェイは毎秒最大10,000件のプッシュ通知を処理します。
よくある質問
PubNubはより多くのSDK(75以上のプラットフォーム)、組み込みのサーバーレス関数、メッセージ処理用のStream Controllerを提供します。Pusherはセットアップが簡単ですが、PubNubはルーティングとデータ変換をより細かく制御できます。
PubNubは、障害時に自動リトライを行うat-least-onceメカニズムを使用しています。各メッセージには重複排除用の一意のtimetokenがあります。オフラインのサブスクライバー向けにメッセージは30秒間バッファリングされます。
無料プランには100の同時接続と月間100万メッセージが含まれます。有料プランは、無制限メッセージの1,000同時接続で月額$49から始まります。
はい、PubNubはすべての接続でTLS 1.3をサポートし、PAMを介したキー管理によるオプションのエンドツーエンドクライアント暗号化(AES-256)も提供しています。エンタープライズクライアント向けにCipher Keyモードも利用可能です。
PubNubは75以上のプラットフォーム向けにSDKを提供しています。JavaScript、Swift、Kotlin、Java、Dart、C#、Python、Ruby、Go、C++、PHP、Rust、Objective-Cなどが含まれます。これはリアルタイムサービスの中で最大のエコシステムです。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。