アプリの色々な情報を社内SNSに流したい!
ある処理にかかった時間を計測してみたりとか、よくわからないところで止まってしまったときにそのログをわかる人に見てもらいたいとかそんな用途でとりあえず社内SNSにデータを流したいときがあるかもしれません。
そこで「開発用途で社内SNSにUnityからメッセージを投げる」というお話をします。
多分api変えればyammerとかhipchatもできます。
簡単な技術の方針
新しいAPIであるUnityWebRequestを使用してChatworkとSlackにメッセージを投げることにします。
こういう非同期な通信が入る処理はawait/asyncの出番…なところですが、UnityのC#がまだ対応していないのでUniRxに登場してもらって代わりをしてもらいます。
実際の開発ではUnityWebRequestのラッパーを作成して利用しているのですがその解説をカットするために今回は、こちらコードを利用して実装してみます。
クラスの設計
クラスの継承関係は下図のようにしました。
ここではそれぞれの役割を説明します。
INotifier
通知するためのメソッドIObservable<Unit> Notifyのみを定義するinterfaceです。
NotifierBase
通知に必要な機能のうちChatworkやSlack等といったサービスに依存しない部分。
もっと言ってしまえば通信部分以外の処理を定義したレイヤーです。
MockNotifier
なにもしないINotifierです。
本番環境ではこれを使えばどこにも通信することはないでしょう。
Slack/ChatworkNotifier
それぞれの通信を定義します。
さらにメッセージの加工などがしたい場合にはこれを派生させる使い方を想定します。
クラスの説明
各クラスの実装を少しだけ説明します。
NotifierBase
ソースコードはこちら
CreateNotifyObservableというメソッドを定義して継承先にIObservableを作成してもらいます。
使うかなと思ってメッセージの加工とメッセージの送信中止のメソッドを定義しています。
ChatworkNotifier
ソースコードはこちら
ApiTokenとRoomIdをコンストラクタで受け取ってurlを構築しています。
Apiについてはこちらを参照してください。
ChatworkAPIドキュメント エンドポイント/rooms
SlackNotifier
ソースコードはこちら
SlackもApiTokenとchannel名が必要ですが、お好みでusernameを変更できるのでそれを入れています。
Apiについてはこちらを参照してください。
Slack APIドキュメント chat.postMessage
Notifier
ソースコードはこちら
RxのSchedulerクラスの実装が気に入ったので、デフォルトのNotifierに簡単にアクセスできるクラスを用意しています。
ついでに出しちゃいけないApiTokenとかの管理ここだけで済むじゃないですか。
一工夫
実際の開発ではデバッグログを選択してそれをChatwork等に投稿できるようになっています。
そうするとエラー等を調べたいユーザー情報等を開発者が簡単に抜き出すことができます。
まとめ
このようにしてUnityでSNSにデータを送信することができました。
プロジェクトでは簡単に作れる割に結構使ってもらえているのでいい感じだと思います。