コンテンツにスキップ

rigor-graphql

GraphQL-Rubyのスキーマクラス(Schema::ObjectSchema::EnumSchema::InputObjectSchema::Mutationのサブクラス)を認識し、それらのfield / value / argumentのDSL宣言を走査して、得られた型テーブルを下流のプラグインが消費できるADR-9のクロスプラグインファクト(fact)として公開します。graphql-rubyのfieldDSLは純粋なメタデータレコーダー(Rubyメソッドを一切合成しません)であるため、ここでのRigorの価値はメソッドの合成ではなく静的な型テーブルにあります。ソースを読むだけで、graphqlランタイムへの依存はありません。

このプラグインはrigortypeにバンドルされて提供されます。plugins:の下で有効化してください。

plugins:
- rigor-graphql
module Types
class User < GraphQL::Schema::Object
field :name, String, null: false
field :email, String, null: true
field :tags, [String], null: false # list-of form
end
end

:graphql_type_tableファクトを公開します。

{
"Types::User" => {
"name" => { type: "String", nullable: false, list: false },
"email" => { type: "String", nullable: true, list: false },
"tags" => { type: "String", nullable: false, list: true }
}
}

1回のプロジェクト走査から4つの独立したファクトを公開します。1つだけ(あるいは1つも)必要としない消費者は、他のファクトの影響を受けません。

ファクトソースクラスシェイプ
:graphql_type_tableSchema::Objectfield{type, nullable, list}
:graphql_enum_tableSchema::Enumvalue "..." → 順序づけられた値のリスト
:graphql_input_object_tableSchema::InputObjectargument{type, required, list}
:graphql_mutation_tableSchema::Mutation{arguments:, fields:}を結合

正規のGraphQLスカラーはRubyのクラスにマッピングされます(StringStringInteger/IntIntegerBooleanTrueClassFloatFloatIDString)。ユーザー定義型は完全修飾名で記録されます。null:nullable:として抽出されます(graphql-rubyに倣ってデフォルトはtrue)。required:のデフォルトはfalseです。単一要素の[String]リスト形が認識されます。

このプラグインは診断を一切出さず、設定のつまみもありません。他のプラグインが消費するために、上記の型テーブルを提供するだけです。スキーマクラスのシェイプを求めて、すべてのpaths:エントリーの.rbファイルを走査します。

  • リゾルバメソッドの型チェックなしfield宣言はメタデータとして記録されますが、それらを裏付けるRubyのリゾルバメソッドとはまだ相互参照されません。
  • Schema.execute(...)の結果の型付けなし。クエリされたフィールドに照らしてSchema.execute(query).to_hを型付けすることは将来のプラグインです。
  • 定数形の型のみ。文字列形(field :foo, "User")と<Type>.array / <Type>!の糖衣構文チェーンは認識されません([String]のブラケット形は認識されます)。複数要素および空のリストリテラルは破棄されます。
  • enumのリテラル値のみvalue "ACTIVE"は登録されます。シンボル形(value :ACTIVE)と定数形は破棄され、value: / description:のキーワード引数は一緒に運ばれますがテーブルには載りません。
  • キャッシュのラウンドトリップなし — 走査は呼び出しごとに再実行されます。

型スキャナと、このプラグインが利用する契約のサーフェスについては、プラグインのREADMEを参照してください。プラグインの書き方については、examples/rigor-plugin-authorスキルを参照してください。

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