Sendbirdは、アプリやWebサイトに1対1チャット・グループチャット・既読表示といったメッセージ機能を、SDKとAPIで組み込むためのサービスです。チャットサーバーを自社で持たずに済む代わりに、月間アクティブユーザー(MAU)に応じた月額がかかります。この記事では、Free trialとStarter・Proの料金と見積もりの落とし穴、JavaScript SDK v4で接続から送信までを動かすコード、サーバー側でのユーザー作成とトークン発行、そしてWebSocketで自前実装したほうがよい条件までを、公式ドキュメントの記述をもとに整理します。
まとめ:Sendbirdでチャット機能を載せるアプリと、自前実装を選ぶ条件
Sendbirdが合うのは、利用者同士がやり取りするチャットそのものが製品の中心にあり、既読・未読数・モデレーション・オフライン時のプッシュ通知まで一通り要るアプリです。これらを自前で作ると、メッセージの保存、再接続時の取りこぼし補完、端末をまたいだ既読同期までを設計し直すことになります。
費用の目安は、有料の最小構成であるStarterが月払いで月399ドル、5,000MAUまでです。逆に、店舗と顧客の問い合わせ窓口のように会話量が少なく、相手が限られるチャットなら、この固定費は重くなります。WebSocketやFirebaseで必要な範囲だけを作る自前実装のほうが、運用費は下がります。判断の分かれ目は「チャット以外の機能でSendbirdの月額を回収できるか」です。
Sendbirdの仕組み:SDK・Platform API・UIKitと3種のチャネル
Sendbirdを組み込むときに触る部品は3つあり、どこまでを任せるかで工数が変わります。
クライアントSDK・Platform API・UIKitの役割分担と使う場面
クライアントSDKは、アプリや画面からSendbirdのサーバーへ常時接続し、送受信や既読の通知を受け取る部品です。JavaScript版は@sendbird/chatで、GitHubのリリース一覧では2026年9月23日公開の4.22.13が最新です。iOS・Android・React Native・Flutter向けにも同系統のSDKがあります。
Platform APIは、自社のサーバーから呼ぶREST APIです。ユーザーの作成、トークンの発行、システムからのメッセージ送信など、利用者の端末に持たせてはいけない操作をここで行います。UIKitは、チャット一覧やメッセージ画面をSDKの上に組んだ部品集です。画面を自作するならSDKだけ、標準の見た目で早く出すならUIKit、という切り分けになります。
オープンチャネルとグループチャネルの違いとisDistinctの1対1チャット
メッセージを置く部屋をSendbirdではチャネルと呼びます。チャネル作成の公式ドキュメントによると、オープンチャネルは参加者の登録が要らず、ライブ配信のコメント欄のような短期のイベント向けです。グループチャネルは招待したメンバーだけのやり取りで、DMや小規模なグループ向けになります。大人数向けはisSuper: trueを付けたスーパーグループです。
1対1チャットではisDistinctの設定を最初に決めます。trueなら同じ2人の組み合わせで既存のチャネルが返り、falseのままだと作成のたびに新しいチャネルができ、同じ2人の会話履歴が複数に割れてしまう仕様です。チャネルURLを自分で付ける場合は、英数字・アンダースコア・ハイフンで4〜100文字に収める必要があります。
Sendbirdの料金:無料の1,000MAUと有料プランの月額で見積もる
金額は2026年10月15日時点のSendbird公式のChat料金ページに載っている値です。税は別途で請求されます。
無料版とStarter・Pro・Enterpriseで変わるMAUと機能
チャットの料金は、送ったメッセージの数ではなくMAUの枠で決まります。
| プラン | 月額(月払い/年払い) | MAU | 主な違い |
|---|---|---|---|
| Free trial | 0ドル | 最大1,000 | 同時接続20まで・超過不可・Proの全機能 |
| Starter | 399ドル/349ドル | 5,000 | 基本のメッセージングとモデレーション |
| Pro | 599ドル/499ドル | 5,000 | 翻訳・データ出力・画像モデレーション |
| Enterprise | 個別見積り | 数百万規模 | 専用サーバー・サポート水準を選べる |
StarterとProは同じ5,000MAUで、差は機能です。メッセージの翻訳や、会話データを自社へ持ち出すデータエクスポートが要るならProになります。Free trialはクレジットカード不要ですが、サポートはコミュニティのみです。
同時接続はMAUの5%まで、MAU超過は従量課金になる見積もりの注意
料金ページのFAQでは、MAUは「過去30日以内にClient SDKでSendbirdのサーバーへ接続したユーザー」と定義されています。チャット画面を開かなくても、アプリ起動時にSDKを接続する作りなら、起動した全員が数えられます。MAUを抑える手は、SDKの接続をチャット画面を開いたときに限る作りです。
もう1つの上限がピーク同時接続です。数えるのはユーザーではなくデバイスで、StarterとProではMAU上限の5%に制限されます。5,000MAUなら250台です。夜の決まった時間に利用が集中するアプリでは、MAUより先にこちらに当たります。MAU上限を超えた分は超過料金がかかりますが、単価は公開されていません。上限に近づく見込みがあるなら、契約前に見積りで単価を確かめてください。
JavaScript SDK v4でチャットを動かす:初期化から送信までのコード
ここからコードです。Sendbirdのダッシュボードでアプリケーションを作り、Application IDを控えてから始めます。Application IDは大文字小文字を区別します。
SDK 4.22系の導入とinit・connect・グループチャネル作成
JavaScript SDKの公式クイックスタートの手順に、1対1チャットの作成を足した最小構成です。SendbirdChat.initは、使う機能のモジュールを渡して1回だけ呼びます。
npm install --save @sendbird/chat
// chat.ts
import SendbirdChat from '@sendbird/chat';
import { GroupChannelModule } from '@sendbird/chat/groupChannel';
const sb = SendbirdChat.init({
appId: 'YOUR_APPLICATION_ID',
modules: [new GroupChannelModule()],
});
// 自社サーバーから受け取ったトークンで接続する
const user = await sb.connect('member_10234', SESSION_TOKEN);
// 同じ2人なら既存のチャネルを返す1対1チャット
const channel = await sb.groupChannel.createChannel({
invitedUserIds: ['member_10234', 'shop_staff_01'],
isDistinct: true,
});
クイックスタートの例はsb.connect(USER_ID)とユーザーIDだけで接続しています。存在しないIDを渡すとユーザーが自動で作られるため、試すには手軽です。ただし、このまま本番に出すと他人のIDを入れるだけでなりすませます。トークンの渡し方は後半のサーバー側の章で扱います。
sendUserMessageの3つのコールバックで送信中と失敗を画面に出す
メッセージの送信はsendUserMessageで、結果を3段階のコールバックで受け取ります。
channel.sendUserMessage({ message: 'ご注文の件で確認させてください' })
.onPending((message) => {
// 送信中の仮メッセージ。画面に薄く表示しておく
})
.onFailed((err, message) => {
// 失敗。再送ボタンを出す(仮メッセージと同じ reqId で突き合わせる)
})
.onSucceeded((message) => {
// サーバーに保存された。通常表示に切り替える
});
onPendingで返る仮メッセージは、成功・失敗のメッセージと同じreqIdを持ちます。この値で画面上の行を置き換えると、電波の弱い場所で送った文が二重に並ぶ不具合を避けられます。
Webに組み込む場合、公式ドキュメントはscriptタグでSDKを直接読み込む方法を、クロスサイトスクリプティングの危険があるとして勧めていません。npmで入れてバンドラで束ねる構成にしてください。
UIKit for Reactで画面ごと組み込む最短手順とカスタマイズの限界
画面を作り込む前に動くものを見せたい場合は、UIKitを使います。UIKit for Reactの公式チュートリアルでは、次の1コンポーネントでチャネル一覧とメッセージ画面が表示されます。npmレジストリでは2026年10月6日公開の3.20.0が最新です。
npm i @sendbird/uikit-react
// App.tsx
import { App as SendbirdApp } from '@sendbird/uikit-react';
import '@sendbird/uikit-react/dist/index.css';
export default function App() {
return (
<div style={{ width: '100vw', height: '100vh' }}>
<SendbirdApp appId="YOUR_APPLICATION_ID" userId="member_10234" accessToken={TOKEN} />
</div>
);
}
UIKitの見た目はSendbirdの標準デザインです。自社のデザインに寄せる作業が増えるほど、SDKで画面を自作した場合との工数差は縮みます。社内向けや検証用はUIKit、一般向けの本番画面はSDKで自作、と分けるのが現実的です。React Native版の@sendbird/uikit-react-nativeも3.12系が出ており、Expoで試す場合の開発ビルドはExpo(React Native)とは?Expo Go・開発ビルド・EASの役割と採用判断で扱っています。
サーバー側の実装:ユーザー作成・トークン発行・システムからの送信
本番運用で手を抜けないのはサーバー側です。利用者の認証は自社のログインで済ませ、Sendbirdには自社サーバーが発行したトークンで接続させます。
Api-Tokenをサーバーだけに置き、ユーザーとセッショントークンを発行する
Platform APIは公式のAPI利用準備のページのとおり、アプリケーションごとのURLにApi-Tokenヘッダを付けて呼びます。このトークンは全ユーザーを操作できるため、アプリやブラウザのコードに入れてはいけません。
# 会員登録時:Sendbird側にユーザーを作る
curl -X POST 'https://api-YOUR_APPLICATION_ID.sendbird.com/v3/users' \
-H 'Api-Token: YOUR_SECONDARY_API_TOKEN' \
-H 'Content-Type: application/json; charset=utf8' \
-d '{"user_id": "member_10234", "nickname": "山田", "profile_url": ""}'
# ログイン時:有効期限つきのセッショントークンを発行してアプリへ返す
curl -X POST 'https://api-YOUR_APPLICATION_ID.sendbird.com/v3/users/member_10234/token' \
-H 'Api-Token: YOUR_SECONDARY_API_TOKEN' \
-H 'Content-Type: application/json; charset=utf8' \
-d '{"expires_at": 1793000000000}'
ユーザー作成APIは、同じuser_idが既にあると400202のエラーを返します。会員IDをそのままuser_idに使えば、作成済みかどうかの判定はこのエラーで足ります。
セッショントークン発行APIのexpires_atはUnixミリ秒で、省略すると発行から7日で失効します。SDKの認証ガイドでは、期限の無いアクセストークンより期限のあるセッショントークンのほうが安全という位置づけです。期限切れの際はSDKのSessionHandlerのonSessionTokenRequiredが呼ばれるので、そこで自社サーバーに再発行を求めます。最後に、ダッシュボードの「Settings > Application > Security > Access token permission」で、トークンを持たない接続を拒否する設定にしてください。これを忘れると、前の章で触れたIDだけの接続が本番でも通ります。
POST /messagesでシステム通知を送るcurl例と毎秒5件の上限
「担当者が対応を開始しました」のような自動メッセージは、メッセージ送信APIからサーバーが送ります。message_type・user_id・messageの3つが必須です。
curl -X POST 'https://api-YOUR_APPLICATION_ID.sendbird.com/v3/group_channels/CHANNEL_URL/messages' \
-H 'Api-Token: YOUR_SECONDARY_API_TOKEN' \
-H 'Content-Type: application/json; charset=utf8' \
-d '{"message_type": "MESG", "user_id": "system_bot", "message": "担当者が対応を開始しました"}'
送信者のuser_idには、案内用のユーザーを1つ作っておきます。チャネルが無い場合は400201が返ります。
見落としやすいのは上限です。公式のレート制限のページでは、メッセージ送信・グループチャネル作成・ユーザー更新は毎秒5リクエストに個別に制限されています。キャンペーン告知を全会員のチャネルへ一斉に送る処理は、1万チャネルで30分以上かかる計算です。429が返ったらX-RateLimit-RetryAfterの値だけ待って再送する処理を最初から入れておきます。一斉配信が目的なら、チャットではなくプッシュ通知の仕組みで送るほうが筋がよく、配信サービスの比較はOneSignalとは?プッシュ通知の料金と実装手順、FCM直接送信との使い分けで扱っています。
オフライン時のプッシュ通知はFCMの秘密鍵JSONを登録して送る
アプリを閉じている相手に新着を知らせるには、Sendbirdのダッシュボードへ配信用の認証情報を登録します。Android向けFCM設定の公式手順では、「Settings > Application > Push notifications」のFCM欄で、Firebaseから取得したサービスアカウントの秘密鍵JSONを「Service account key (HTTP v1)」に上げます。送信条件は「全デバイスがオフラインのとき」です。
端末のトークンは1ユーザーあたり20個までで、超えると古いものから置き換わります。FCM自体の仕組みとサービスアカウントの扱いはFCM(Firebase Cloud Messaging)とは|プッシュ通知の仕組み・送信方法とFID移行にまとめています。
Sendbirdを採用する条件と、WebSocketで自前実装を選ぶ分岐
分かれ目は、チャットが製品の中心か、付属機能かです。中心ならSendbird、付属なら自前実装が基本線になります。
既読・モデレーション・翻訳まで要るアプリでSendbirdを選ぶ条件
次の条件に2つ以上当てはまるなら、Sendbirdを選ぶ理由があります。
- 利用者同士のDMやグループ会話が、マッチング・コミュニティ・マーケットプレイスなど製品の中心にある
- 既読表示・未読数・入力中表示を、iOS・Android・Webのすべてで同期させたい
- 不適切な投稿の自動検知や、運営による削除・ミュートの仕組みが要る
- リリースまでの期間が短く、チャットサーバーの設計と負荷試験に時間を割けない
この場合、自前で同じ範囲を作ると、メッセージの永続化、再接続時の差分取得、端末間の既読同期、通報と削除の管理画面までが開発範囲に入ります。数か月分の開発費を考えれば、月399〜599ドルの固定費は回収しやすい水準です。
問い合わせチャット程度なら自前実装、月額399ドルが重くなる失敗例
反対に、店舗やサポート担当と顧客がやり取りする問い合わせ窓口程度なら、Sendbirdは見送るべきです。会話は1対1、既読と画像送信があれば足り、同時に話す人数も少ないためです。この規模でStarterを契約すると、使う機能はごく一部なのに年間で約4,200ドル(年払い月349ドル×12)を払い続けます。
よくある失敗は、Free trialの1,000MAUで作り込み、公開直前に有料化の費用で計画が崩れることです。Free trialは超過できないため、1,000MAUを超えた時点で有料プランへの移行が必要になります。自前で作るなら、WebSocketの接続管理はWebSocketとは?仕組み・ハンドシェイクからNode.js実装・運用の判断まで、ルーム管理と再接続はSocket.IOとは?WebSocketとの違いから実装・スケールまでが出発点になります。SaaSと自前のどちらで作るか、既存の会員基盤とどうつなぐかまで含めて決めたい場合は、スマホアプリ開発の範囲で相談できる開発会社を選んでください。開発費の目安はアプリ開発の費用相場は?規模・OS・開発手法別の内訳で比べられます。
よくある質問
Sendbirdの導入検討で多い質問に、公式ドキュメントで確認できる範囲で答えます。
Sendbirdは無料で使えますか?
Free trialで、MAU1,000人・同時接続20台まで無料で使えます。クレジットカードは不要で、Proプランの全機能を試せます。ただし上限を超える利用はできず、サポートはコミュニティのみです。料金ページのFAQには、年に1回ダッシュボードにログインすれば維持される無料のDeveloperプランの記載もあります。本番公開後にMAUが1,000人を超えるなら、Starter(月払い399ドル)以上が必要です。
SendbirdとFirebaseでチャットを作るのは何が違いますか?
Firebaseは汎用のデータベースと通知の仕組みで、チャットの機能は自分で組み立てます。メッセージの保存形式、未読数の計算、既読の同期、通報や削除の管理画面はすべて自前です。Sendbirdはそれらを製品として持っており、SDKを呼べば動きます。開発の手間はSendbirdが小さく、費用はSendbirdがMAU枠の月額、Firebaseは自前で組んだ構成の利用量次第になります。
React NativeやExpoのアプリでも使えますか?
使えます。React Native向けにはChat SDKとUIKit(@sendbird/uikit-react-native、2026年10月時点で3.12系)の2種類が提供済みです。オフライン時のプッシュ通知を受けるには、FCMとAPNsの認証情報をSendbirdのダッシュボードに登録したうえで、端末のトークンをSDKから登録します。Expoで通知を試す場合はExpo Goでは足りず、開発ビルドが必要になる点に注意してください。
音声通話やビデオ通話も同じ料金で使えますか?
Chatの料金ページの金額はチャット機能のものです。Sendbirdは音声・ビデオ通話を別の製品として提供しており、チャットのMAU枠とは別に考える必要があります。通話が中心のアプリなら、WebRTCで自作する方法や他社SDKとの比較をボイスチャットの実装方法|WebRTC自作とVivox・Photon Voice等SDKの選び方で確認してから決めると、二重契約を避けられます。
会話データを自社のデータベースにも残せますか?
方法は2つあります。1つは料金表でProプランに含まれるデータエクスポート、もう1つはPlatform APIでメッセージを取得して自社DBへ保存する方法です。後者はレート制限の範囲で定期的に取りに行く処理を作ることになります。監査や問い合わせ対応のために全件を保管する要件があるなら、契約前にProかEnterpriseかを決めておくと、後からプランを変える手間がかかりません。
関連記事
- WebSocketとは?仕組み・ハンドシェイクからNode.js実装・運用の判断まで実装者向けに解説:Sendbirdを使わずチャットを自前で作る場合の通信の土台です
- Socket.IOとは?WebSocketとの違いから実装・スケールまで:ルーム管理と再接続を自前で実装するときの選択肢です
- OneSignalとは?プッシュ通知の料金と実装手順、FCM直接送信との使い分け:チャットではなく一斉通知を送りたい場合の配信サービスです
- FCM(Firebase Cloud Messaging)とは|プッシュ通知の仕組み・送信方法とFID移行【2026年】:Sendbirdのオフライン通知が経由するFCMの仕組みです
- ボイスチャットの実装方法|WebRTC自作とVivox・Photon Voice等SDKの選び方【2026年10月】:チャットに音声通話を足す場合の実装方法と製品の比較です