GraphQL ロゴGraphQL

GraphQL カスタムスカラー仕様

1/14/2023作成者Andreas Marek、Donna Zhou

提供されたGraphQLカスタムスカラー仕様の発表#

提供されたGraphQL カスタムスカラー仕様の公式リポジトリをscalars.graphql.orgで公開できたことを大変嬉しく思います。

カスタムスカラー仕様(略して「仕様」)へのご貢献を歓迎します。あなたの仕様がマージされると、scalars.graphql.org/<GitHub-username>/<specification-name>でホストされます。貢献ガイドで、貢献方法をご覧ください。

最初の提供された仕様はDateTime用です。GraphQLスキーマで組み込みの@specifiedBy ディレクティブを使用して、ユーザーに仕様のURLを指定できます。

scalar DateTime
@specifiedBy(url: "https://scalars.graphql.org/andimarek/date-time")

カスタムスカラーによるGraphQL型システムの高度化#

カスタムスカラーは、GraphQL仕様の初日から存在しています。これらは、カスタム型を使用してGraphQL型システムを拡張できるという独自の機能を持っています。カスタムスカラーは強力ですが、APIの利用者にとってはブラックボックスのようなものでした。

当初、GraphQLスキーマは名前以外に情報を含んでいなかったため、利用者がカスタムスカラーを理解することは非常に困難でした。例えば、DateTimeカスタムスカラーの正確な形式を理解することは困難でした。また、API AのDateTimeカスタムスカラーがAPI BのDateTimeと全く同じであるかどうかを知ることも困難でした。

しばらく前に、カスタムスカラーの仕様のURLを割り当てる組み込み@specifiedByディレクティブを追加しました。これにより、カスタムスカラーを文書化する標準的な方法が提供されます。@specifiedByディレクティブはイントロスペクション可能です。

しかし、その後、これだけでは不十分であることを学びました。カスタムスカラー仕様を作成し、それらをホストする負担は、各API自体が解決する必要がありました。

カスタムスカラー仕様プロジェクトでは、カスタムスカラー仕様を作成するためのテンプレートを提供し、GraphQL Foundationが所有するドメインscalars.graphql.orgで仕様をホストします。これにより、カスタムスカラー仕様を明確に文書化し、共有するための労力が大幅に削減されます。

これは、明確に文書化されたカスタムスカラーのエコシステムを可能にし、人気のあるカスタムスカラーを何度も再発明する必要性をなくすことを願っています。最終的には、十分に人気のあるカスタムスカラーは、組み込みのものと事実上区別がつかなくなり、GraphQL型システムを高度化します。

参加する!#

貢献ガイドで、カスタムスカラー仕様への貢献方法をご覧ください。

コメントやご質問がある場合は、graphql-scalars GitHubリポジトリで問題を提起してください。