コンポーザブルディレクティブの使用
あるディレクティブが別のディレクティブの動作を変更できるようにします。
この機能により、型の不一致によって通常は使用できないディレクティブ(つまり、フィールドの出力とは異なる入力を持つため、フィールドに適用できないディレクティブ)でも使用可能になります。
例えば、フィールド capabilities は [String](文字列の配列)を返しますが、ディレクティブ @strUpperCase は String を受け取ります。そのため、次のクエリを実行すると型の不一致によりエラーが発生します:
query {
user(by: {id: 1}) {
capabilities @strUpperCase
}
}コンポーザブルディレクティブを使用すると、ディレクティブ @underEachArrayItem(要素の配列を反復処理し、ネストされたディレクティブを各要素に適用する)を活用して、@strUpperCase が実行される前の準備を整え、単一の要素(String 型)を受け取るようにすることができます。
上記のクエリは次のように実現できます:
query {
user(by: {id: 1}) {
capabilities
@underEachArrayItem
@strUpperCase
}
}メタディレクティブ
各メタディレクティブは、複数のディレクティブを同時に影響(または「ネスト」)することができます。どのディレクティブが影響を受けるかは、引数 affectDirectivesUnderPos によって指定され、これは正の整数の配列を受け取り、それぞれが影響を受けるディレクティブの相対位置を定義します。
デフォルトでは、引数 affectDirectivesUnderPos のデフォルト値は [1] であり、これはすぐ隣のディレクティブに影響することを意味します。
以下の例では:
@underEachArrayItemがメタディレクティブです@strTranslateは@underEachArrayItemの下にネストされています(暗黙のデフォルト値affectDirectivesUnderPos: [1])
{
someField
@underEachArrayItem
@strTranslate
}以下の例では、代わりに:
@strTranslateと@strUpperCaseが@underEachArrayItemの下にネストされています(引数affectDirectivesUnderPosの相対位置[1, 2]によって示されています)
{
someField
@underEachArrayItem(affectDirectivesUnderPos: [1, 2])
@strTranslate
@strUpperCase
}メタディレクティブはメタディレクティブ内にネストすることもできます。
以下の例では:
@underEachArrayItemが最上位のメタディレクティブです@underJSONObjectPropertyは@underEachArrayItemの下にネストされています@strUpperCaseは@underJSONObjectPropertyの下にネストされています
query UppercaseEntriesInsideObject {
entries: _echo(value: [
{
text: "Hello my friends"
},
{
text: "How do you like this software so far?"
}
])
@underEachArrayItem
@underJSONObjectProperty(by: { key: "text" })
@strUpperCase
}設定
GraphQL スキーマでコンポーザブルディレクティブを有効または無効にするには、設定ページの「Composable Directives」モジュールに移動し、Enable composable directives? のチェックボックスをオン・オフにしてください:

特定のエンドポイントでコンポーザブルディレクティブを有効または無効にするには、対応する Schema Configuration の「Composable Directives」ブロックから希望するオプションを選択してください:
