LoginSignup
1
1

More than 3 years have passed since last update.

AWS AppSync用にaws-appsync-codegenでiOS(Swift)のソースコードを生成する

Last updated at Posted at 2020-03-27

AWS AppSyncでiOS(Swift)用のコードを生成する時に勘違いしていたことがあったので、それについて公式のサンプルから理解できるように細かく書いておきます。私自身がAppSync歴1日なので正確に理解できているかもわかりませんので、その点についてはお手数おかけいたしますがコメントなどでご指摘よろしくお願いします。

また、現状(2020年)ではAppSyncの公式ドキュメントはAmplifyを使うことが前提とされており、Amplifyを使わない場合はやり方を探すのはかなり難しい。難しいので書き残しておきますというモチベーションです。

サンプルはAWS AppSync公式で説明されているサンプルスキーマ「イベントアプリ」からです。

最初に結論

おそらくこのページを見ている方が最も知りたいのはコード生成のコメントaws-appsync-codegenについての使い方でしょうから最初に書いておきます。

# aws-appsync-codegen generate tmp/*.graphql --schema tmp/schema.json --target swift --output tmp/GraphQLAPI.swift
  • tmp/*.graphql
    • GraphQL リクエスト用のクエリを指定
      • *にしているのはリクエストが複数ある場合にそれをtmpディレクトリに置いているためです
      • 後述の「クエリ画面」からコピペしてファイルにします
  • tmp/schema.json
    • GraphQLのための仕様
      • 後述の「スキーマ画面」から「スキーマをエクスポート」でschema.jsonを選びます
        • 注意: jsonを選びましょう。schema.graphqlではありません
  • --targetはswiftを指定
    • 省略できますがこの説明のため丁寧に書いておきます

画面での説明

クエリ画面

スクリーンショット 2020-03-27 17.45.44.png

スキーマ画面

スクリーンショット 2020-03-27 16.45.32.png

aws-appsync-codegenの導入

npmをmacにDockerで入れることについて書いておきます。

iOSアプリ開発者的には、仕事でnpmの情報を追っているわけではなくバージョンの違いによる動作の違いを把握していないためシステムにnpm自身を入れたくないですし、なにか環境によるエラーが出た場合に面倒というのが強いです。

おそらくnpmをバージョン別に入れてそれを切り替えて使う方法(nodeenv?nodebrew?)もあるんでしょうが、そこはnpmをそこまで使うわけではないので考えたくないです。

nodeのimageをダウンロード

$ docker pull node

docker runしてコンソールでnpmを利用する

nodeのコンテナを起動し、コンソールに入ります

$ docker run -v (pwd)/graphql:/tmp -it --rm node /bin/bash
  • -it
    • インタラクティブにターミナルを起動
  • -v
    • ローカルとコンテナ内のボリュームを共有し、GraphQL リクエスト用のクエリとschema.jsonをコンテナ内でも使えるようにします
    • (pwd)
      • fishなので(pwd)
      • bashだと$(pwd)かも

コンテナ内でnpmを使いaws-appsync-codegenをインストール

コンテナ内なのでグローバルにインストールしても良いかな、という感じです

# npm install -g aws-appsync-codegen

aws-appsync-codegenでコード生成する

# aws-appsync-codegen generate tmp/queries.graphql --schema tmp/schema.json --target swift --output tmp/GraphQLAPI.swift
  • コード生成した結果も共有のボリュームに出力しています
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1