rigor-graphql
GraphQL-Rubyのスキーマクラス(Schema::Object、Schema::Enum、Schema::InputObject、Schema::Mutationのサブクラス)を認識し、それらのfield / value / argumentのDSL宣言を走査して、得られた型テーブルを下流のプラグインが消費できるADR-9のクロスプラグインファクト(fact)として公開します。graphql-rubyのfieldDSLは純粋なメタデータレコーダー(Rubyメソッドを一切合成しません)であるため、ここでのRigorの価値はメソッドの合成ではなく静的な型テーブルにあります。ソースを読むだけで、graphqlランタイムへの依存はありません。
このプラグインはrigortypeにバンドルされて提供されます。plugins:の下で有効化してください。
plugins: - rigor-graphql推論する内容
Section titled “推論する内容”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 endendは: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_table | Schema::Object | field → {type, nullable, list} |
:graphql_enum_table | Schema::Enum | value "..." → 順序づけられた値のリスト |
:graphql_input_object_table | Schema::InputObject | argument → {type, required, list} |
:graphql_mutation_table | Schema::Mutation | {arguments:, fields:}を結合 |
正規のGraphQLスカラーはRubyのクラスにマッピングされます(String→String、Integer/Int→Integer、Boolean→TrueClass、Float→Float、ID→String)。ユーザー定義型は完全修飾名で記録されます。null:はnullable:として抽出されます(graphql-rubyに倣ってデフォルトはtrue)。required:のデフォルトはfalseです。単一要素の[String]リスト形が認識されます。
診断なし、設定なし
Section titled “診断なし、設定なし”このプラグインは診断を一切出さず、設定のつまみもありません。他のプラグインが消費するために、上記の型テーブルを提供するだけです。スキーマクラスのシェイプを求めて、すべての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:のキーワード引数は一緒に運ばれますがテーブルには載りません。 - キャッシュのラウンドトリップなし — 走査は呼び出しごとに再実行されます。
プラグイン内部
Section titled “プラグイン内部”型スキャナと、このプラグインが利用する契約のサーフェスについては、プラグインのREADMEを参照してください。プラグインの書き方については、examples/とrigor-plugin-authorスキルを参照してください。
© 2026 TypedDuck. Licensed under CC BY-SA 4.0.