Directives

変数によって構造を変更させたい時に使います。これには@include@skipというディレクティブがあります。
Directive は適当なフィールドの後に置けます。

@include(if: Boolean)は「引数がtrueな時だけそのフィールドを含める」ことができます。

{
  viewer {
    id @include(if: true)
  }
}

この結果は以下の通りです。

{
  "data": {
    "viewer": {
      "id": "MDQ6VXNlcjE1OTAxMDM4"
    }
  }
}

普通にidが含まれています。falseだとどうなるのかも見てみます。

{
  viewer {
    id @include(if: false)
  }
 }

結果からはidが消えています。

{
  "data": {
    "viewer": {}
  }
}

@skip(if: Boolean)@includeと反対の意味のものです。つまり@includeではfalseのものが@skipではtrueとして置き換えれます。

{
  viewer {
    id @skip(if: true)
  }
}

この結果は@include(if: false)のものと同じです。

ちなみに、もし親フィールドを持つフィールドに対してディレクティブを使った場合、ディレクティブの後に{}を置けます。

{
  viewer {
    repositories(first: 1) @include(if: true) {
      edges {
        cursor
      }
    }
  }
}