UnityからChatworkとSlackに投稿する

2017-03-02

アプリの色々な情報を社内SNSに流したい!

ある処理にかかった時間を計測してみたりとか、よくわからないところで止まってしまったときにそのログをわかる人に見てもらいたいとかそんな用途でとりあえず社内SNSにデータを流したいときがあるかもしれません。

そこで「開発用途で社内SNSにUnityからメッセージを投げる」というお話をします。
多分api変えればyammerとかhipchatもできます。

 

簡単な技術の方針

 

新しいAPIであるUnityWebRequestを使用してChatworkとSlackにメッセージを投げることにします。

こういう非同期な通信が入る処理はawait/asyncの出番…なところですが、UnityのC#がまだ対応していないのでUniRxに登場してもらって代わりをしてもらいます。

実際の開発ではUnityWebRequestのラッパーを作成して利用しているのですがその解説をカットするために今回は、こちらコードを利用して実装してみます。

UniRxでUnityWebRequestをラップしてみた

 

クラスの設計

クラスの継承関係は下図のようにしました。

ここではそれぞれの役割を説明します。

2017-03-02

 

INotifier

通知するためのメソッドIObservable<Unit> Notifyのみを定義するinterfaceです。

 

NotifierBase

通知に必要な機能のうちChatworkやSlack等といったサービスに依存しない部分。

もっと言ってしまえば通信部分以外の処理を定義したレイヤーです。

 

MockNotifier

なにもしないINotifierです。

本番環境ではこれを使えばどこにも通信することはないでしょう。

 

Slack/ChatworkNotifier

それぞれの通信を定義します。

さらにメッセージの加工などがしたい場合にはこれを派生させる使い方を想定します。

 

クラスの説明

各クラスの実装を少しだけ説明します。

 

NotifierBase

ソースコードはこちら

NotifierBase

CreateNotifyObservableというメソッドを定義して継承先にIObservableを作成してもらいます。

使うかなと思ってメッセージの加工とメッセージの送信中止のメソッドを定義しています。

 

ChatworkNotifier

ソースコードはこちら

ChatworkNotifier.cs

 

ApiTokenとRoomIdをコンストラクタで受け取ってurlを構築しています。

 

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

ChatworkAPIドキュメント エンドポイント/rooms

 

SlackNotifier

ソースコードはこちら

SlackNotifier.cs

 

SlackもApiTokenとchannel名が必要ですが、お好みでusernameを変更できるのでそれを入れています。

 

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

Slack APIドキュメント chat.postMessage

 

Notifier

ソースコードはこちら

Notifier.cs

 

RxのSchedulerクラスの実装が気に入ったので、デフォルトのNotifierに簡単にアクセスできるクラスを用意しています。

ついでに出しちゃいけないApiTokenとかの管理ここだけで済むじゃないですか。

一工夫

実際の開発ではデバッグログを選択してそれをChatwork等に投稿できるようになっています。
そうするとエラー等を調べたいユーザー情報等を開発者が簡単に抜き出すことができます。

まとめ

このようにしてUnityでSNSにデータを送信することができました。
プロジェクトでは簡単に作れる割に結構使ってもらえているのでいい感じだと思います。