rigor-actioncable
ActionCableのブロードキャスト呼び出し箇所を、静的に発見したチャネルインデックスに対して検証します。<X>Channel.broadcast_to(record, data)はチャネルクラスが存在することをチェックし、ActionCable.server.broadcast("stream_name", data)はリテラルのストリーム名がいずれかのチャネルでstream_fromによって登録されていたことをチェックします。ソースのみを読み、actioncableのランタイム依存はありません。
このプラグインはrigortypeにバンドルされて提供されます。plugins:の下で有効化します:
plugins: - rigor-actioncable何をチェックするか
Section titled “何をチェックするか”class ChatChannel < ApplicationCable::Channel def subscribed stream_from "chat_room_5" endend
ChatChannel.broadcast_to(room, message: "hi") # info: channel existsActionCable.server.broadcast("chat_room_5", body: "hi") # info: registered streamChartChannel.broadcast_to(room, message: "hi") # error: no channel (did you mean ChatChannel?)ActionCable.server.broadcast("chat_room_42", body: "hi") # warning: no such stream registration| ルール | 重大度 | 発火するとき |
|---|---|---|
plugin.actioncable.broadcast-target | info | <X>Channel.broadcast_to(...)が発見されたチャネルにマッチした |
plugin.actioncable.broadcast-stream | info | ActionCable.server.broadcast("...", ...)が登録済みのstream_fromリテラルにマッチした |
plugin.actioncable.unknown-channel | error | レシーバーがChannelで終わるがインデックスにない(「もしかして」付き) |
plugin.actioncable.unknown-stream | warning | リテラルのストリーム名がどのstream_from登録にもマッチしなかった(「もしかして」付き) |
plugin.actioncable.load-error | warning | チャネルの発見に失敗した(パース/読み取りエラー)── ファイルごとに1回 |
unknown-streamチェックは、発見されたいずれかのチャネルが動的ストリーム(stream_from interpolated_stringまたはstream_for record)を登録している場合は抑制されます ── リテラルのマッチが存在しないことは、そのストリームが無効である証明にはならないためです。Channel以外のレシーバーや、リテラルでないストリーム引数は、何も言わずに素通りします。
plugins: - gem: rigor-actioncable config: channel_search_paths: ["app/channels"] # default channel_base_classes: ["ApplicationCable::Channel", "ActionCable::Channel::Base"] # default- 直接のスーパークラスのみマッチ。間接的なチェーン(
AdminChannel < BaseChannel < ApplicationCable::Channel)には、BaseChannelをchannel_base_classesに列挙する必要があります。 - アクションメソッドはインデックス化されるが、検証はされない。チャネルのアクションはクライアント側で
subscription.perform("action", data)を介して呼び出されます。RigorはJavaScriptを解析しないため、アクションインデックスは情報提供にとどまります。 broadcast_toのアリティ(arity)はチェックされない ── 任意のレコード+任意のデータハッシュを受け付けます。- 間接的な
stream_from(チャネル本体に直接ではなく、ヘルパーメソッド内で登録されたもの)は対象外です。 - 裸の
broadcast(...)(明示的なActionCable.serverレシーバーを伴わないもの)は、無関係なメソッドでの偽陽性を避けるためにスキップされます。
プラグインの内部
Section titled “プラグインの内部”チャネルの発見器/インデックスと、このプラグインが行使する契約(contract)サーフェスは、プラグインのREADMEにあります。プラグインを書くには、examples/とrigor-plugin-authorスキルを参照してください。
© 2026 TypedDuck. Licensed under CC BY-SA 4.0.