コンテンツにスキップ

rigor-sidekiq

Sidekiqのエンキュー呼び出し ── Worker.perform_async(...).perform_inline(...).perform_in(t, ...).perform_at(t, ...) ── を、発見されたワーカーの#performのアリティ(arity)に対して検証します。設定された検索パスを走査し、include Sidekiq::Job(またはレガシーのSidekiq::Worker)するクラスをマッチさせることでワーカーを発見します。ソースのみを読み、sidekiqのランタイム依存はありません。

これはrigortypeにバンドルされて配布されます。plugins:の下で有効化してください。

plugins:
- rigor-sidekiq
app/workers/welcome_email_worker.rb
class WelcomeEmailWorker
include Sidekiq::Job
def perform(user_id, locale = "en") # arity 1..2
end
end
WelcomeEmailWorker.perform_async(123) # info: matches #perform (arity 1..2)
WelcomeEmailWorker.perform_in(60, 123, "ja") # info: schedule carved out, 123/"ja" forwarded
WelcomeEmailWorker.perform_async # error: expects 1..2 argument(s), got 0
WelcomeEmailWorker.perform_in # error: requires a schedule as its first argument

perform_in / perform_atは最初の引数をスケジュール(間隔 / Time)として消費します。残りの引数は#performに対して検証されます。perform_async / perform_inlineはすべての引数を転送します。

ルール重大度発火条件
plugin.sidekiq.worker-callinfoWorker.perform_*呼び出しが発見されたワーカーの#performアリティにマッチした
plugin.sidekiq.wrong-arityerror転送される引数の個数が#performのアリティの範囲外に収まる(メッセージはperform_in / perform_atのスケジュール切り出しを示します)
plugin.sidekiq.missing-scheduleerrorperform_in() / perform_at()が引数ゼロで呼ばれた(#performが引数を取らない場合でもスケジュールは必須)
plugin.sidekiq.load-errorwarningワーカーの発見に失敗した(パース / 読み込みエラー) ── ファイルごとに1回
plugins:
- gem: rigor-sidekiq
config:
worker_search_paths: ["app/workers", "app/sidekiq"] # default
worker_marker_modules: ["Sidekiq::Job", "Sidekiq::Worker"] # default

デフォルトのworker_marker_modulesは、モダンなSidekiq(Sidekiq::Job、6.3以降)とレガシーのSidekiq::Workerの両方をカバーします。

  • 直接のincludeのみSidekiq::Jobを再includeするカスタムconcernをミックスインするワーカーは発見されません ── 中間のモジュールをworker_marker_modulesに追加してください。
  • 構文的なアリティのみ#performのアリティはパラメータリストから読まれます。define_methodで構築されたメソッドは対象外です。
  • キーワード引数の検証はなし。 Sidekiqは引数をJSONにシリアライズするため、位置引数が標準的なシェイプ(shape)です。
  • スケジュールの型は検証されませんperform_in / perform_atの最初のスロットは、その型に関係なくスケジュールとして消費されます。
  • チェーンされたset(...)Worker.set(queue: "low").perform_async(...))は通常の呼び出しとして検証されます。set自身のオプションはチェックされません。

ワーカーの発見器 / インデックスと、このプラグインが行使する契約(contract)サーフェス(surface)はプラグインのREADMEにあります。プラグインの書き方はexamples/rigor-plugin-authorスキルを参照してください。

© 2026 TypedDuck. Licensed under CC BY-SA 4.0.