はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】SimpleGraphQL-For-UnityというGraphQLクライアントライブラリを利用してみる

はじめに

今回はSimpleGraphQL-For-UnityというUnity用のGraphQLクライアントライブラリを紹介しようと思います。

This package attempts to provide a simple API that is able to interact with a GraphQL server. Nothing more, nothing less. No complicated setup.

Also, the world could use some more Unity-friendly GraphQL libraries.

That being said, this is intended to be a primarily code based package, so keep that in mind if you decide to use this.

このパッケージは、GraphQLサーバーと対話できるシンプルなAPIを提供しようとするものです。それ以上でもそれ以下でもありません。複雑な設定もありません。

また、世界にはもっとUnityに優しいGraphQLライブラリが必要です。

とはいえ、これは主にコードベースのパッケージであることを意図しているので、これを使用する場合はそれを念頭に置いてください。

github.com

またこの記事ではGraphQLについて説明はしないのであしからず。
graphql.org

環境

.NET 4.6 or higher

Platforms Queries & Mutations Subscriptions
Mono
IL2CPP
WebGL

Unity 2019.4 and higher (up to 2021.1)では確認済み
それ以外は保証はしないよとのこと
https://github.com/ngoninteractive/SimpleGraphQL-For-Unity#requirements

導入方法

PackageManagerAdd package from git URLにて、https://github.com/LastAbyss/SimpleGraphQL-For-Unity.gitを打ち込みます。

PackageManagerからインストールする

利用させてもらうWebAPI

試しに無料で公開してくれているWebAPIを利用させてもらいます。
https://github.com/trevorblades/countries

ブラウザでお試しできるので、こんなクエリを書いて実験してみました。

{
  country(code: "BR") {
    name
    native
    capital
    emoji
    currency
    languages {
      code
      name
    }
  }
}
ブラウザで試した様子

結果として以下のjsonが返ってきます。

{
  "data": {
    "country": {
      "name": "Brazil",
      "native": "Brasil",
      "capital": "Brasília",
      "emoji": "🇧🇷",
      "currency": "BRL",
      "languages": [
        {
          "code": "pt",
          "name": "Portuguese"
        }
      ]
    }
  }
}

使い方(Queries)

SimpleGraphQL-For-Unityを用いて先ほどのWebAPIにリクエストを送ってみましょう。

public class Sample : MonoBehaviour
{
    private async Task Start()
    {
        // endpointを指定してClient生成
        var client = new GraphQLClient("https://countries.trevorblades.com/");

        // クエリを記述
        var request = new Request
        {
            Query = @"
{
  country(code: ""BR"") {
            name
            native
            capital
            emoji
            currency
            languages {
            code
            name
        }
    }
}",
        };
        
        // リクエストを送り、Jsonを取得する
        var response = await client.Send(request);
        
        // {"data":{"country":{"name":"Brazil","native":"Brasil","capital":"Brasília","emoji":"□□","currency":"BRL","languages":[{"code":"pt","name":"Portuguese"}]}}}
        Debug.Log(response);
    }
}

シンプルですね。ちゃんと動作しました。

動作させた様子

さいごに

詳細はGitHubReadmeにて。

github.com