マルチフィールドディレクティブの使用
マルチフィールドディレクティブとは、1つのフィールドだけでなく、複数のフィールドに適用できるディレクティブです。有効にすると、すべてのディレクティブに引数 affectAdditionalFieldsUnderPos が追加され、ディレクティブを適用する追加フィールドの相対位置を指定できます。
例えば、次のクエリでは、ディレクティブ @strTranslate はフィールド content にのみ適用されています:
{
posts {
excerpt
content @strTranslate
}
}フィールド excerpt にもディレクティブ @strTranslate を適用するには、ディレクティブ引数 affectAdditionalFieldsUnderPos に値 [1] を追加します(1 はディレクティブ @strTranslate からフィールド excerpt までの相対位置です):
{
posts {
excerpt
content
@strTranslate(
affectAdditionalFieldsUnderPos: [1]
)
}
}追加できるフィールド数に制限はありません。次のクエリでは、dateStr も翻訳対象に含まれています:
{
posts {
dateStr
excerpt
content
@strTranslate(
affectAdditionalFieldsUnderPos: [1, 2]
)
}
}ディレクティブが本来適用されるフィールド(上記のすべてのクエリにおける content など)は、引数に指定する必要はありません。
上記のクエリにおいて、ディレクティブ @strTranslate から前のフィールドまでの相対位置は次のとおりです:
- 位置
2:dateStr - 位置
1:excerpt - 位置
0:content<= 暗黙的に、常に適用される
ユースケース
この機能には主に2つのユースケースがあります:
- パフォーマンス
- 拡張機能
パフォーマンス
外部 API への呼び出しを実行するディレクティブでは、リクエスト数が少ないほど高速に解決されます。
これはディレクティブ @strTranslate の場合に当てはまります。このディレクティブは Google Translate API に接続します。通常、投稿一覧のフィールド content と excerpt を翻訳するには、次のクエリを使用します:
query {
posts {
excerpt @strTranslate
content @strTranslate
}
}@strTranslate を2回追加することで、このクエリは Google Translate API に2回リクエストを実行します(excerpt の全値を翻訳するために1回、content の全値のために1回)。
Multi-Field Directives 機能を使用することで、以下のクエリでも content と excerpt の両フィールドの全値を翻訳しますが、Google Translate API へのリクエストは1回だけで済みます:
query {
posts {
excerpt
content
@strTranslate(
affectAdditionalFieldsUnderPos: [1]
)
}
}拡張機能
追加フィールドを受け取るディレクティブは、追加の計算を提供できます。
例えば、ディレクティブ @export は通常、ログイン中のユーザー名など、単一フィールドの値をエクスポートします:
query GetLoggedInUserName {
me {
name @export(as: "userName")
}
}引数 affectAdditionalFieldsUnderPos を使用することで、@export は複数のフィールドを受け取り、それらのフィールドをエントリとして含むディクショナリをエクスポートします:
query GetLoggedInUserNameAndSurname {
me {
name
surname
@export(
as: "userProps"
affectAdditionalFieldsUnderPos: [1]
)
}
}@export は変数 $userProps に次の値を生成します:
{
"name": "Leo",
"surname": "Loso"
}設定
GraphQL スキーマでマルチフィールドディレクティブを有効または無効にするには、設定ページの「Multi-Field Directives」モジュールに移動し、Enable multi-field directives? のチェックボックスをオン/オフにします:

特定のエンドポイントでマルチフィールドディレクティブを有効または無効にするには、対応する Schema Configuration のブロック「Multi-Field Directives」で希望のオプションを選択します:
