KLabでは、「エンジニアが使いやすい」をコンセプトに、ゲーム共通で必要となる機能をまとめたライブラリ群『KG SDK』を開発しています。

KG SDKを利用することでゲーム開発者はゲーム特有機能の開発のみに注力することができるため、開発スケジュールの短縮及び開発コストの削減並びに開発品質の向上が期待できます。

今回は、KG SDKが提供するチャットシステム『KLab Messaging Service(以下KMSと略称)』を紹介したいと思います。

1. KMSの特徴

(1) SaaS型サービス

KMSは、チャットシステムをアプリに容易に実装可能にするSaaS型サービスです。

サーバサイドの運用はKMS運用チームが担当しているため、KMS利用者はチャット機能の開発のみに集中することが出来ます。

KMSではサーバAPIとクライアントAPIを提供しており、ゲームサーバ及びゲームクライアントはそれぞれサーバAPI、クライアントAPIを利用してチャット機能を実装することになります。

サーバAPI

  • ゲームサーバが利用するAPI
  • HTTPSで通信
  • JSON形式のメッセージを送受信
  • マスターデータ管理等のDB操作機能を提供
  • チャット管理用機能を提供

クライアントAPI

  • ゲームクライアントが利用するAPI
  • WebSocketで通信
  • JSON形式のメッセージを送受信
  • 発言や発言ログ取得等のチャット機能を提供
  • 他ユーザの発言やチャンネル入退室情報等をリアルタイムで通知

※KG SDKでKMS用のクライアントライブラリ(Unityのみ対応)も提供しているため、アプリへの導入も容易となっています。
※KMSを利用するためには事前にKMS運用チームが発行するアプリコードとアプリキーを取得しておく必要があります。

KMS構成図

(2) 高い拡張性

自由なUI設計

チャットのUIを利用者側で自由に設計できます。
KMSを導入することでゲームの世界観を壊す心配はありません。

自由なチャンネル設計

KMSでは以下2種類のチャンネル作成機能を提供しています。

チャンネル 特徴
1対1のダイレクトチャット用チャンネル KMS側でチャンネル参加可能人数を2人までに制限しています。
そのためダイレクトチャット以外に使用できません。
ユーザ自由参加型チャンネル KMS側で何も制限していません。
参加可能ユーザなど制限を設ける場合は、利用者側で制限する必要があります。

上記の通り、ユーザ自由参加型チャンネルは利用者で自由に設計可能ですので

  • ワールドチャット用チャンネル
  • 同盟チャット用チャンネル
  • ゲームキャラクター情報交換用チャンネル
  • ステージ攻略情報交換用チャンネル

のように様々なチャンネルを作成することができます。

また

  • 全体お知らせ用チャンネル
  • 個人お知らせ用チャンネル

のようにチャット目的以外にもKMSを利用することができます。

メッセージデータのフォーマットを自由に設定可能

KMSではメッセージデータのフォーマットを制限していません。
平文だけでなく、JSONメッセージ等を登録しておくことで、豊富なチャット表現が可能となります。

例えば、発言内容の他に文字色やフォントを含める場合、以下のようにメッセージデータを登録できます。

{"text":"こんにちは!","color":"#FF0000","font":"font-name"}

(3) 発言のフィルタリング

フィルタリング用のワードを事前に登録しておくことで、発言をフィルタリングすることが出来ます。
また

  • 完全/部分一致
  • スペースと見なす文字
  • 伏字と見なす文字
  • 類似文字
  • 正規表現対応
  • 除外文字

などのフィルタリングオプションを用いることで、より高機能なフィルタリングを提供しています。

2. KMSを利用したチャット開始までの流れ

以下のステップでチャットを開始することができます。

(0)アプリコード・アプリキー作成

  • 事前準備として、アプリコード・アプリキーの発行をKMS運用チームに依頼します

(1)【ゲームサーバ】ユーザ作成

  • ユーザ名や認証キー等を設定してKMSユーザ(※)を作成します
  • 設定情報は『手順(4)KMSサーバにログイン』で使用するため、事前にゲームクライアントに送信しておく必要があります

※KMSユーザとは、KMS側が管理するユーザのことです。
ゲーム内ユーザとKMSユーザとを1対1で紐づけてください。

curl -i -H 'Content-type: application/json' -X POST -d \ '{"app_code":"アプリコード","app_key":"アプリキー", "person_id":"user_1", "auth_key":"auth_key", "user_name":"user_name" }' \ KMSサーバのURL/user/create_user

【ゲームサーバ】ユーザ作成

(2)【ゲームサーバ】チャンネル作成

  • チャンネルIDや初期参加ユーザ等を設定して、チャンネルを作成します

curl -i -H 'Content-type: application/json' -X POST -d \
'{"app_code":"アプリコード","app_key":"アプリキー",
"channel":"workd_channel",
"channel_name":"channel_name",
"channel_type":1,
"add_users":[
{"person_id":"user_1","invisible":0}]}
}' \
KMSサーバのURL/channel/create_channel

【ゲームサーバ】チャンネル作成

(3)【ゲームクライアント】KMSサーバに接続

  • KMSサーバのURLにWebSocketで接続します

wscat -c ws://KMSサーバのURL/

【ゲームクライアント】KMSサーバ接続

(4)【ゲームクライアント】KMSサーバにログイン

  • ユーザID等を設定したログイン用JSONメッセージを送信し、KMSサーバにログインします
{
"req": "login",
"app_code": "アプリコード",
"person_id": "user_1",
"auth_value": "auth_value"
}

【ゲームクライアント】KMSサーバログイン

(5)【ゲームクライアント】(2)で作成したチャンネルに発言

  • 発言チャンネルや発言内容を設定した発言用JSONメッセージを送信します

{
"req": "addtalk",
"channel": "world_channel",
"message_body": "こんにちは"
}

【ゲームクライアント】発言

3. その他KMSの提供機能

(1) スタンプ

以下2種類のスタンプ機能を提供しています。

  • ユーザ固有
  • 全ユーザ利用可能

なお、KMSが保持するのはスタンプのIDのみで、スタンプの本体画像等は利用者側で保持・管理する必要があります。

(2) チャット管理機能

チャット管理のため

  • 発言内容の全文検索機能
  • 発言内容のデータベース検索機能
  • ユーザ検索機能
  • チャンネル検索

などの機能を提供しています。

※KMSはGroongaという全文検索エンジンと連携しており、高速な全文検索を提供しています。
なお、Groongaについてはこちらを参照ください。

(3) NGワードランキング

NGワード発言数やNGワード発言ユーザを、ランキング形式で取得することが出来ます。
利用例としては

  • NGワード発言回数が多いユーザのアカウントを凍結する

などが挙げられます。

(4) ホットワードランキング機能

発言に含まれる単語をホットワードとして抜粋し、ランキング形式で取得することが出来ます。
利用例としては

  • イベント中に発言が多かったキャラクター名の集約
  • 発言回数が多い施策名の集約

などのユーザ分析が挙げられます。

なお、ホットワードの抽出には形態素解析エンジンMeCabを利用しており、解析結果が『名詞』の単語を登録しています。
解析結果は辞書情報に依存するため、利用者の要望通りのホットワードが抽出されない可能性があります。
そこで、KMSでは利用者が任意でカスタマイズできるユーザ辞書設定機能を併せて提供しています。
例えば、『KLabの天クラってゲームおもしろいよー』と発言した場合、デフォルト辞書のみだと『天』『クラ』『ゲーム』がホットワードとして抽出されますが、ユーザ辞書として『天クラ』を登録しておくことで『天クラ』『ゲーム』がホットワードとして抽出されるようになります。

MeCabについてはこちらを参照ください。

(5) リアクション機能

チャットにリアクション機能を追加することが出来ます。
画像データ等のリアクションに関する設定情報は利用者側で自由に設定できるため、facebookの『いいね』やslackの『リアクション』機能など、任意のリアクション機能を実現可能です。

(6) 翻訳サービス

発言済みのトークを各種言語に翻訳することが出来ます。
なお、当翻訳機能はMicrosoft Translator等の外部APIを利用して翻訳しており、外部APIの契約は利用者側で実施する必要があります。
※現在KMSで利用できる外部翻訳APIはMicrosoft Translatorのみです。
 Microsoft Translatorについてはこちらは参照ください。

(7) ファイルアップロード機能

画像データ等を任意のサーバやAmazon S3上にアップロードすることが出来ます。
ゲームのキャプチャ画面アップロードをチャットに組み込むことで、チャットをより活性化させる事ができます。
なお、Amazon S3の契約は利用者側で実施する必要があります。
 

4. 2016年6月時点のKLabにおけるKMS利用案件

利用案件 公式サイト
BLEACH Brave Souls https://www.bleach-bravesouls.com/index.php
パズルワンダーランド https://www.puzlan.com/index.php
Age of Empires: World Domination https://www.aoewd.com/ja/index.php

KG SDKに関するお問い合わせ

KLabでは、開発パートナー様と共同開発したゲームをKLabにてパブリッシング、プロモーションを行うというモデルを積極的に進めており、開発パートナー様にKG SDKの提供もしています。
パブリッシング事業につきましてはこちら
KG SDKに関するお問い合わせにつきましてはこちら
をご覧ください。