権限の管理などを細かく設定できますので、組織的な異動にともなうチャットルームからのメンバーの出入りなどを統括して管理できています。ようなデータをサーバサイドに蓄積しており、クライアントで必要なときに取り出すというシステムであれば、ログインしていないときのログをさかのぼることもできますし、エビデンスとしてログを集めたいときにも過去にさかのぼって集めることができ、安心といえます。グリーのアラート通知システムコミュニケーションツールの変遷たどってみました。次はその変遷にあわせて通知の方法も変化していく様子などを紹介します。通知の例としてアラート通知システムについてご紹介します。いう自社製のシステムを利用しています。監視の図を抜粋します。いうモジュールがアラートを受信したいひとたちにアラートを配信する役割を担っています。アラートを受信したい方たちのメールアドレスに向けてメールを配信しています。Senderは、Summarizerによって宛先が決定され、集約されたアラートを、ひたすらメールで送信します。通知はアラートだけなの?業務を円滑に進めるためにはアラートのような情報のみではなく、さまざまな情報の通知を適切に行う必要があります。ところが、たいていの既存のシステムはメールによる通知はサポートしているものの、他の手段をサポートしていないことが多いです。通知をサポートしている、といったシステムはないと思います。モダンな通知方法が世の中で使われていたとしても、それをコミュニケーションツールにつなげることができなければ、利用できません。ボットを操作して発言させるということを都度行っているのでは効率が悪すぎます。ボットで行われていたとき、次のような状況がありました。さまざまなシステムが通知に対応しているのはメール通知はメールとは別にリアルタイム性のあるコミュニケーションツールでも受信したい要望としてまとめると「メールを発信するとリアルタイム性のあるコミュニケーションツールに配信するシステムがあるとよい」といったところでしょう。この要望を満たすシステムを筆者が開発しました。いう名前になりました。方を意識しているときは「すかいる」で、メールの方を意識しているときは「すけいる」と読んでみるといいと思います。呼び方をドキュメントに書いた記憶がないので、読み方について語るのは、はじめてですね。読み方がわからなかった方々、すみませんでした。いう名前まではよいものの、どのように実現するのか、さまざまな案がありました。チャットルームの識別子を入れたメールを送信すると、チャットに参加しているボットがメールの内容を発言する、というものとかありました。いうヘッダを入れ込む、ということに既存のシステムが対応しているかを考えると、メールヘッダの指定などに対応しているシステムは希ということです。チャットルームの識別子をふくませる、ということを満たさなければなりません。そのために、採用した方法が拡張メールアドレスに識別子を入れるという方法です。メールアドレスなどで使える「配送先は同じなんだけれど、複数のアドレスを保持しているようにみえる」ような機能です。配送されるという機能です。解説するの面倒だな、と思ったら、ちょうど良い記事がありましたよ。かい部分を省くとこんな感じになっています。チャットルームに配送するか説明したところで、実際にそのデータがどのように管理されているかを説明します。コア部分で利用しているデータ構造は以下のようになります。データ構造で説明しているデータは実際には運用していないデータです。Gist'それぞれについて説明します。取り出すことができます。いう値はデータベースの主キーです。name先ほど説明した拡張メールアドレスの部分に指定するアドレスの部分文字列です。チャットルームに対して内部的に割り当てられる識別子です。いうコマンドを発行することで取得することができます。いう意味の名前が使いたかったのです。いう名前になっています。正しい名前だったかもしれません。そのうちリファクタリングするかもしれないですね。メールアドレスがシステムの関係者ではないところに漏れたときを考慮されたデータです。指定された正規表現と一致しないときには、届いたメールなどなかったフリをして、システムは何もしません。いう概念が存在します。記述したフィルタをどのように適用していくか、で通知するメッセージを変更したり、メールの内容をみて特定の条件にマッチしなければチャットルームに通知しない、などの機能を実装することができます。したがうと、以下のような拡張アドレスがふくまれているか、サーバで調べます。記述を行うなどの方法があります。プログラムがメールを読んだときに、例としてあげたデータ構造によって、どのような挙動となるのか説明します。配送データ構造は以下のようになっています。'JIRA::Notify::RequestIssue'メールを読み込んだプログラムの挙動は下記の通りです。フィルタは以下のように書かれています。もの以外の通知はなかったことにしてしまうフィルタです。配送データ構造は以下のようになっています。Gist'ふたつめの例なので簡単に説明します。フィルタは以下のように書かれています。星をつけて、サブジェクトをわかりやすくするというフィルタですね。このような基本的かつ、規定で適用すると利便性が高いフィルタについては「特別な記述がなければ、常に適用」というルールがあり、暗黙に適用されます。いう記述をすることで、明示的にこのフィルタの処理を除去しています。フィルタは以下のように書かれています。通知するというプラグインだったんですね。ホスト名部分については実際のコードと異なります。ブリッジするプログラムを作成しました。チャンネル名を対にして登録することで相互の内容をやり取りする、というものになります。チャンネルに流すということをしています。アラートの内容が即時に閲覧できるようになっています。ボットを操作したり、その逆を行っていました。ブリッジを行うものを作ったのですが、ちょっと安定した運用を保証できる状態ではなかったので、ブリッジによる受け渡しで通知するという方法はいったん考えないことにしました。チャットとはことなる扱いにしてしまいました。利用して発信されます。フィルタが使われています。部分もフィルタにすればいいのに、という気がしたのでそのうちやります。フィルタは以下のように書かれています。汚染されていないです。比較的スリムなので、オープンソース化とかするとしても、そんなに自社に依存したコードはないと思うので、機会があれば公開するかもしれないです。いう組み合わせでの運用なので、ついでにウェブでデータ構造を管理できるインターフェイスも搭載されています。まとめメールはさまざまな仕様があるので、システムを運用していくことを考慮に入れた設計にしたのはよかったことだと思います。フィルタの機構は意外なところでさまざまな拡張に余裕のある対応ができる仕組みになりました。メールをスクレイピングしてテキスト部分を取り出すといったフィルタなども作成でき、システムが対応できる幅が広くなりました。あとは、時流に依存した名前を基幹となりうるシステムにつけると、うっかり「支える技術」ほどのシステムとなってしまった時期くらいには、システムの名前と機能が剥離してよくないのでやめましょう。修正するのも大変そうなので、よい思い出としておきます。最後にリアルタイムコミュニケーションツールと本日登場してきたツールなどがどのような関係にあるかまとめた図を作ってみました。反響とかあれば、もう少し詳しい話とかするかもしれないです。このカレンダーも大トリを迎えます。いうか、今日ってクリスマスイブなんですね。リア充のみなさまにおかれましては爆発にご注意ください。