LoginSignup
8
8

More than 5 years have passed since last update.

そろそろAction Cableを触っておきたいけど重い腰が上がらない...という人へ

Last updated at Posted at 2016-10-03

Introduction

ここ一週間くらいAction Cableをいじっていますが、思っていたほど仰々しいものではなかったな。というのが正直な感想です。
僕と同じようにビビりすぎている人が多いような気がしてこの記事を書くことにしました。

とりあえず公式サンプルを動かしてみると「めんどくさそうだな〜」感はかなり薄れる、いやむしろ拍子抜けするかもです。

Action Cable触ってみなきゃ、と思い始めて気がつけば◯ヶ月、、、
みたいな人はぜひこれを期に挑戦してみてください(☝ ՞ਊ ՞)☝

actioncable-examplesのソースコードなど

なにはともあれREADMEは読んでおきましょう
https://github.com/rails/rails/tree/master/actioncable

公式サンプルのソースコードを以下からcloneしてください
https://github.com/rails/actioncable-examples

Rails5.0.0とRedisが動く環境があれば、公式サンプルのインストラクションに従ってコマンドを打つだけでOKです。
この場合コードには一行の修正も加えずに動かすことができるはずです。

伝えたいことは以上ですが、
環境構築がめんどくさい人向けに、Dockerを使って例のソースコードが動くところまでまとめておきます。

ソースコードをclone

$ git clone https://github.com/rails/actioncable-examples.git

Railsのimageを用意

$ docker pull rails
https://hub.docker.com/_/rails/
Deprecatedですが、とりあえずAction Cableを動かすだけなら問題ないです。
詳細はDockerfileを確認してみてください
https://github.com/docker-library/rails/blob/74262f5482517f779681590b0194758ff75cf77c/Dockerfile

Redisのimageを用意

$ docker pull redis
https://hub.docker.com/_/redis/

Redisコンテナ起動

$ docker run --name redis -d redis

cable.yml修正

config/cable.yml
# production:
#   url: redis://redis.example.com:6379

local: &local
  # url: redis://localhost:6379
  url: redis://redis:6379

development: *local
test: *local

Appコンテナ起動

$ docker run --rm --link redis:redis -p 3000:3000 -p 28080:28080 -v /path/to/your/actioncable-examples/:/actioncable-examples/  -it --name actioncable-examples rails bash

※パスは書き換えてください

bundle installとかmigrationとか

$ cd actioncable-examples
$ ./bin/setup

setupを実行するとbundle installやらdb:createやらいろいろ行われます。

Action Cableサーバ起動

$ ./bin/cable

Railsサーバ起動

ターミナルで別のタブを開く

$ docker exec -it actioncable-examples bash
$ cd actioncable-examples
$ ./bin/rails server --bind=0.0.0.0

ブラウザで確認

こんな感じです↓
actioncable.gif

注1)片方もしくは両方のタブはシークレットモードなどを使って、クッキーが共有されないようにしてください
注2)うまく動かないときはturbolinksがイベント発火を阻止しているかもしれません。リロードするかturbolinksを切ってみてください(汗
↑↑turbolinks周りがバグっていたのでPR出しました
https://github.com/rails/actioncable-examples/pull/32

VirtualBoxを使うときの注意点

Action Cable will only accept requests from specified origins, which are passed to the server config as an array. The origins can be instances of strings or regular expressions, against which a check for match will be performed.
~中略~
When running in the development environment, this defaults to "http://localhost:3000".

とある通り、Action Cableは許可されたorigin以外からのアクセスを拒否します。
developmentで走らせる場合 http://localhost:3000 がデフォルトで許可される、ということで、
僕の環境(Docker for Macを使用)でlocalhost:3000で試したところ問題なく動作しましたが、localhostでアクセスすることができないVirtualBox+Dockerの場合は少し設定が必要になるはずです。

例えば'default'というhostを使っているとすると

development.rb
config.action_cable.url = 'ws://default:28080'
config.action_cable.allowed_request_origins = ['http://default:3000']

と修正すればいけそうです。
お気づきのとおりAction CableサーバのURLも変更します。

※動作確認していません。VirtualBox + Dockerを使っている人、もし間違えていたら教えていただければ助かりますm(_ _)m

おわりに

新しい技術を使うときって自分のなかにノウハウ溜まってなくて変なコードを書いてしまいがちなので、公式でサンプルコードを用意してくれているととても助かりますね。

5系をproductionで使っているところはまだ多くないと思いますが、Action CableがRailsエンジニアの必須スキルになっていくのは間違いなさそうなのでいまのうちにいじっておきましょう( ・∀・)ノ

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8