ボクココ

個人開発に関するテックブログ

RailsのActionCable と同時に IP メッセージングも知るべき理由

ども、@kimihomです。

巷の Rails 界隈では 新しいバージョン 5 で登場した、ActionCable が話題になっている。いろいろな勉強会が開催され、Qiitaではこれから ActionCable を使ってみた 的なエントリーが大量に出現することだろう。

ActionCable を使えば、HTML5の WebSocket を使って"リアルタイム"なアプリケーションを作ることができるようになる。このリアルタイムの代名詞といえばチャット。誰かがメッセージを送った瞬間、受け手側にそのメッセージをリアルタイムで表示させるっていう方法は Web の構造上難しいものだった。それを ActionCable を使えば WebSocket を使って相手が送ったと同時に受け手側にメッセージが表示されるような仕組みを作ることができる。

今までのリアルタイムサービスは、基本的に Node.js の socket.io が一般的だった。最も手軽に作れるということで流行したけども、それが Ruby on Rails でも開発できるようになる、というだけの話である。なのにこの騒ぎようは、やはり Rails が人気であるということなので、いちRailsエンジニアとしては大変嬉しいことである。

だが、 ActionCable を使えるようになったところで、実際に本番サービスに投入することは可能だろうか?もしそのサービスがたくさんのユーザーを抱えるようになった時、自分でそのActionCableサーバーをスケールさせることはできるか? まだまだ出たばかりの技術をいきなり使って ActionCable にコントリビュートしたい方ならその選択も悪くはないだろう。私としてはそこで時間が取られてしまうのはやはり厳しいものがあった。今 ActionCable を実装して本番に組み込むというのはあまりにリスキーだったので手が出せなかった。

IP メッセージング

IP メッセージングは電話 API でお馴染みの Twilio が昨年出した新しいサービスだ。自分のWebサーバーとTwilioサービスを連携させて簡単にチャットのようなリアルタイムサービスが作れるようになる。

他の自前で リアルタイム処理サーバー を持ってしまったことによる運用の問題はすべて Twilio 側で受け持ってくれる。"メッセージング"と聞くと、チャットだけしか作れないように思われるかもしれないが、自分のWebサーバーから直接メッセージを送ることで、サーバーサイドからイベントをプッシュする仕組みも簡単に構築が可能だ。つまり、リアルタイム、サーバーサイドプッシュなどを実現したいサービスを基本何でも作れるだろう。

リアルタイムはリアルタイム専用のサーバーやサービスとして分けることで、基本となるWebサーバーの実装は極めてシンプルになる。ActionCable は確かに リアルタイムサーバーとして最低限のコードを書くだけで実現することが可能だが、それでもなおそれなりのコードを書かないと実現ができない。IP メッセージングを使えば、 Twilio が発行するトークンをWebサーバーで取得し、そのトークンを IP メッセージングのライブラリの呼び出しの引数にセットしてあげれば良いだけになる。あとはメッセージを受け取ったイベント時に必要なコードを書けば良いだけだ。

IP メッセージングの概要を聞いたところで、クラウドサービスに詳しい方なら Pusher というサービスをご存知かもしれない。基本的にはPusherと非常に近いものがある。ただし、Pusherの価格を見ればわかる通り、従量課金ではないプラン毎の課金スタイルになっているので、最低料金が$45とべらぼうに高い。 IP メッセージングは完全に従量課金であるため、スモールスタートには最適なサービスである。実際、現在のところ1メッセージ 0.0060 円という料金価格になっている。

ActionCable ばかりが注目されて、 IP メッセージングがほとんど注目されていないのは、きっとこうして発信する人がいないからだと考え、今回ブログ記事として上げてみた。

IP メッセージング勉強会開催します

最後に告知になるが、この IP メッセージングの勉強会を2月26日東京で開催する。

twiliojp-ug.doorkeeper.jp

私は実際、クラウド電話サービスの CallConnect で IP メッセージングを用いてサーバーサイドプッシュを実現させた。IP メッセージングの基本の解説に加えて、実例も紹介したいと思う。

ActionCable と IP メッセージング、是非比べてみていただければ幸いである。