SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

サンプルコードで学ぶRuby on Rails 5実践入門

Rails 5の目玉機能「Action Cable」で双方向通信を実装(1)

サンプルコードで学ぶRuby on Rails 5実践入門 第7回

  • X ポスト
  • このエントリーをはてなブックマークに追加

開発するチャットアプリ(3)

動作確認

 これで、まずは発言メッセージをデータベースに保存する処理以外の、基本的なWebSocket通信が実現できました。以下のコマンドでPumaサーバーを起動し、「http://localhost:3000/chat_messages/index」にアクセスして問題なく動作することを確認してみましょう。

$ bin/rails s -d
図2 http://localhost:3000/chat_messages/index
図2 http://localhost:3000/chat_messages/index

 次に、WebSocket通信の様子が分かるようにクライアント側のブラウザをもう1つ立ち上げておきましょう。

図3 ブラウザを2つ立ち上げておく
図3 ブラウザを2つ立ち上げておく

 ここからは、より詳細にAction Cableの動作が分かるように、Chromeブラウザ上のデベロッパーツールを用いてJavaScriptコードにブレークポイントを入れて処理を追っていきます。

 デベロッパーツールを開いて、Sourcesタブから[localhost:3000 > assets > channels]とたどり、「chat_message.self-ハッシュ.js」ファイルを開きます。CoffeeScriptからコンパイルされたJavaScriptのソースコードが表示されるので、17行目のApp.chat_message.speakを呼び出しているコードとその直後を、該当の行番号17、18をクリックしてブレークポイントを入れます。

図4 JavaScriptコードにブレークポイントを入れる
図4 JavaScriptコードにブレークポイントを入れる

 ブレークポイントを入れたブラウザ上で、実際に発言メッセージを入力してみましょう。ここでは、「テスト」と入力してエンターキーを押下します。17行目でJavaScriptの実行が止まります。この時点でサーバー側のアプリケーションログを確認しても変化はありません。デバッガーの再生ボタンをクリックしてコードの実行を先に進めてみましょう。17行目のApp.chat_message.speakメソッドが実行され、18行目のevent.target.value = '';が実行される前でコードが止まります。この時点でサーバー側のアプリケーションログを確認すると、以下のログが出力されていることが分かります。

$ tail log/development.log

 ↓

ChatMessageChannel#speak({"message"=>"テスト"})
[ActionCable] Broadcasting to chat_message_channel: {:message=>"テスト"}
ChatMessageChannel transmitting {"message"=>"テスト"} (via streamed from chat_message_channel)
ChatMessageChannel transmitting {"message"=>"テスト"} (via streamed from chat_message_channel)

 このことから、クライアント側でApp.chat_message.speakメソッドが実行された後、サーバー側のChatMessageChannelspeakメソッドが呼び出され、入力された発言メッセージである「テスト」を受け取り、配信されている様子が分かります。また、あらかじめ立ち上げておいたもう1つのブラウザを確認すると、既にチャネルから配信された発言メッセージが表示されています。

図5 発言メッセージがチャネルを通じて配信される
図5 発言メッセージがチャネルを通じて配信される

 再度、デバッガーの再生ボタンをクリックすると、発言した側のブラウザにも同じメッセージが表示されます。

図6 発言メッセージが自身のブラウザにも反映される
図6 発言メッセージが自身のブラウザにも反映される

 同様に、もう1つのブラウザ側からも同じ動作となることを確認してみましょう。

まとめ

 今回はRails 5目玉機能の1つであるAction Cableのサンプルアプリ実装を通して、Action Cableへの理解を深めました。

 次回は引き続きAction Cableのサンプルアプリを拡張して、発言メッセージをデータベースに保存できるようにし、会員登録機能と関連付けを行います。

参考文献

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
サンプルコードで学ぶRuby on Rails 5実践入門連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 竹馬 力(チクバ ツトム)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/10153 2017/05/17 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング