rigor-rails-routes
config/routes.rbをPrismで静的に解釈し(Railsランタイムへの依存はありません)、Railsが生成するであろうルートヘルパーテーブルを構築して、すべての*_path / *_url呼び出し箇所をそれに照らして検証します。不明なヘルパーは(did-you-mean候補つきで)指摘され、引数の個数が誤っている場合も同様です。モデル↔ルートの活用変化には本物のActiveSupport::Inflectorを使うため、不規則な名前もRailsが解決するのと同じように解決されます。
このプラグインはrigortypeにバンドルされて提供されます。plugins:の下で有効化してください。
plugins: - rigor-rails-routesチェック内容
Section titled “チェック内容”config/routes.rbが与えられると、プラグインはRailsが生成するであろうすべてのヘルパーを認識し、呼び出し箇所でのタイプミスやアリティの不一致を指摘します。
file:line:col: info: `users_path` → GET /usersfile:line:col: info: `admin_widgets_path` → GET /admin/widgets
file:line:col: error: no route helper `widgts_path` (did you mean `users_path`?)file:line:col: error: `user_path` expects 1 argument(s), got 3_path形と_url形の両方が認識されます。
認識されるルーティングDSL
Section titled “認識されるルーティングDSL”パーサは、実際のアプリが使うルーティングDSLをカバーします(Mastodon/Redmine/GitLab FOSSに対するv0.1.11 / v0.1.12のOSS調査で拡張されました)。
Rails.application.routes.draw do … end、およびdraw :name/draw_all :nameによる部分ルートファイル。resources/resource(only:/except:つき)、ネストされたリソース、member do … end/collection do … end。namespace :admin do … endとscope— 位置引数形式とキーワードscope(path:, as:, module:)の両方。as:プレフィックスと動的パスセグメントはヘルパーのアリティに数え入れられます。root、および明示的なget/post/patch/put/deleteルート(as:で名前付け、匿名の静的ルートを含む)。devise_for、mount、use_doorkeeper、with_options、direct、concern :name do … end(定義は記録されますが、wrong-arityの偽陽性を避けるため本体はスキップされます)。
plugins: - gem: rigor-rails-routes config: routes_file: "config/routes.rb" # default helper_paths: ["app"] # default; dirs scanned for # project-defined *_path / *_url methodshelper_pathsにより、自分で定義したURLビルダー(例えばapp/controllersやapp/lib配下のprivateなdef callback_url)もプラグインに登録できるため、それらへの呼び出しが不明なヘルパーとして指摘されなくなります。
提供するもの
Section titled “提供するもの”解析済みのヘルパーテーブルは:helper_tableクロスプラグインファクト(fact、ADR-9)として公開され、rigor-actionpackがそれを消費してコントローラー内のヘルパー呼び出しを検証します。
- 静的に展開できないルート定義。パーサがメタプログラミングを展開できないことで生成されるヘルパー(ランタイムデータに対するループで構築されるルート、パーサがモデル化していないエンジンが注入するヘルパー)は登録されない場合があり、偽の
unknown-helperが表面化することがあります。それらはベースライン(baseline)に記録するか、その行に# rigor:disableを付けてください。 - プロジェクト固有の活用変化(
config/initializers/inflections.rbで宣言されたもの)はまだ取り込まれていません(ADR-39スライス3)。標準のActiveSupportの活用変化はカバーされています。
プラグイン内部
Section titled “プラグイン内部”Prismルートパーサ、キャッシュされた:helper_tableプロデューサー、デモ、そしてこのプラグインが利用する契約のサーフェスについては、プラグインのREADMEを参照してください。プラグインの書き方については、examples/とrigor-plugin-authorスキルを参照してください。
© 2026 TypedDuck. Licensed under CC BY-SA 4.0.