mcpField
A
apollo-federation

apollo-federation

github.com/apollographql開発1211.9k 回インストール1 日前に更新
リポジトリ

apollo-federation について

apollo-federationは、Apollo Federation 2のGraphQLスキーマ作成を支援するリファレンススキルです。サブグラフをsupergraphに構成する開発者向けに、ディレクティブとパターンを解説します。

主な機能

  1. 01@linkによるFederation 2の設定
  2. 02主要ディレクティブの構文と用途
  3. 03エンティティとサブグラフのパターン
  4. 04@requiresを使った計算フィールド
  5. 05ローカル構成と本番チェック

活用シーン

  1. 01複数サブグラフにまたがるエンティティ定義
  2. 02外部フィールドに依存するフィールドの追加
  3. 03サブグラフ間での値型の共有
  4. 04supergraph構成の検証

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/apollographql/skills --skill apollo-federation

インストール後、Claude Code で/apollo-federationを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
composition.md
directives.md
schema-patterns.md

詳細

Apollo Federation スキーマの作成

Apollo Federation を使用すると、複数の GraphQL API(サブグラフ)を統合されたスーパーグラフに合成できます。

Federation 2 のスキーマ設定

すべての Federation 2 サブグラフは、@link を使用してオプトインする必要があります。

extend schema
  @link(url: "https://specs.apollo.dev/federation/v2.12",
        import: ["@key", "@shareable", "@external", "@requires", "@provides"])

サブグラフで使用するディレクティブのみをインポートしてください。表示されているバージョン(v2.12)は例示用です。コピーしてそのまま使う前に、現在サポートされているバージョンを Federation の変更履歴で確認してください。

サブグラフの @link バージョンは下限であり、合成に使われるバージョンではありません。詳しくは Federation のバージョンを参照してください。

コアディレクティブのクイックリファレンス

ディレクティブ用途例
@key一意のキーを持つエンティティを定義するtype Product @key(fields: "id")
@shareable複数のサブグラフでフィールドを解決できるようにするtype Position @shareable { x: Int! }
@external別のサブグラフのフィールドを参照するweight: Int @external
@requires外部フィールドに依存する計算フィールドshippingCost: Int @requires(fields: "weight")
@provides外部フィールドを条件付きで解決する@provides(fields: "name")
@overrideフィールドをこのサブグラフに移行する@override(from: "Products")
@inaccessibleAPI スキーマから非表示にするinternalId: ID! @inaccessible
@interfaceObjectエンティティインターフェースにフィールドを追加するtype Media @interfaceObject

リファレンスファイル

トピックごとの詳細なドキュメントです。

主なパターン

エンティティの定義
type Product @key(fields: "id") {
  id: ID!
  name: String!
  price: Int
}
サブグラフ間でのエンティティへの寄与
# Products subgraph
type Product @key(fields: "id") {
  id: ID!
  name: String!
  price: Int
}

# Reviews subgraph
type Product @key(fields: "id") {
  id: ID!
  reviews: [Review!]!
  averageRating: Float
}
@requires を使った計算フィールド
type Product @key(fields: "id") {
  id: ID!
  size: Int @external
  weight: Int @external
  shippingEstimate: String @requires(fields: "size weight")
}
@shareable を使った値型
type Money @shareable {
  amount: Int!
  currency: String!
}
エンティティのスタブ(寄与せずに参照)
type Product @key(fields: "id", resolvable: false) {
  id: ID!
}

基本ルール

  • 必ず @link ディレクティブを使用した Federation 2.x 構文を使ってください
  • 必ずサブグラフで使用するディレクティブのみをインポートしてください
  • そのフィールドに対してすべてのサブグラフが同一の値を返すことを確認せずに、@shareable を使用しないでください
  • 単純なエンティティ識別には、単一の ID フィールドを持つ @key を優先してください
  • ローカルで合成を検証するには、rover supergraph compose を使用してください
  • 本番スーパーグラフに対して検証するには、rover subgraph check を使用してください

コメント