Amplify CLI の API(GraphQL)の記載方法について
いつも通り、やりたいことのメモ書きとなる。 今回も適当なところで終わってしまうことうけあいな為、もしご質問などあればコメント欄に記載いただければ回答する可能性も微レ存。
やりたいことと進め方
今回やりたいことは、Amplify CLIを使用し、DynamoDBとAppSyncをセッテングした後、現在作成中のアプリからPostできるようにすることである。
先ず以下のコマンドで、APIを追加しますよと、Amplifyにお知らせする。
amplify add api
実行が完了すると以下の通り、Apiが追加されている。
$amplify status Current Environment: production | Category | Resource name | Operation | Provider plugin | | -------- | ----------------- | --------- | ----------------- | | Api | test | Create | awscloudformation |
ここではまだ、クラウドに作成されたわけではなく、cloudformationの定義ができただけだ。
実際にクラウド上にDB等を作成するためには、amplify push
を実行すればいいのだが、その前にすることがある。
それは、GraphQLのスキーマの定義である。自分がどういった用途で使用するかを以下のファイルに記載しなければ、
使いたい環境にあった構成にならないのは当たり前である。
先程実行したamplify add
によってプロジェクト内のamplifyフォルダに、schema.graphql
というファイルができているはずである。
私の場合は以下のようになっていた。このファイルをガイドに基づき編集していく。
./amplify/backend/api/test/schema.graphql
AWS AppSync に関するMEMO
AWS AppSyncに関するMEMOをいかに記載する。
AWS AppSyncとは、GraphQLのマネージドサービス。
上記の内容を理解するために、先ずGraphQLとは何かを知る必要がある。
### GraphQLとは
REST-APIに変わる新しい技術として登場した OSS QUERY言語である。
定義に従いQUERYを書き、サーバーからJSON形式で情報を取得する。
処理形態はシンプルで、取得(Query)・変更(Mutation)・購読(Subscription)の3つで構成されている。
・GraphQL登場までの変遷
HTMLによる静的Websiteの表示 ⇨ RESTful APIによるクラスプラットフォームの動的なコンテンツ表示 ⇨ Facebookが公開
RESTを置き換えるのではなく、RESTを保管する目的でGraphQLが登場
・登場した理由
RESTAPIの管理・運用が煩雑。
サーバーとの接続がRequest/Respnseの形になってしまう問題。
・メリット
インターフェースがクリーンになる
サブスクリプションをしようしたリアルタイム処理
・型指定されたスキーマ
APIドキュメントを作成するのではなく、スキーマ定義からドキュメントが生成
### AWS AppSyncとは
・GraphQLのマネージドサービス
・アカウントのDataSourceに接続
・データ同期/リアルタイム接続が可能
・DyanamoDBとか色々なデータソースを指定可能
・こんなアプリ開発の時に使おう
リアルタイム処理が必須
複数ユーザーの同時に利用するアプリ(コラボレーション)
データソースとAppSyncの接続はResolversというもので行われる。
・Resolverマッピングテンプレート
GraphQLのリクエストをデータソースへの命令に変換するためのテンプレート
何をするか
アクセスコオトロール
権限チェック
ユーザーIDに基づいたレスポンスのフィルタリング
AWS Amplify CLI のインストールMEMO
ここでは、AWS Amplify CLIをインストールした際のMEMOを備忘として記載する。
早速、インストールを実施して行きたい。
前提条件の確認
先ず、Amplify CLIではNode.jsで10.x、npmでは6.x以降のバージョンが推奨されている。
加えて、Amplify MockingはOpenJDK 1.8 以降のJavaのランタイムを必要とするらしい。
ということで、ターミナル*1で、上記の設定が問題ないかを確認する。
$ node -v; npm -v v12.16.1 6.13.4 $ $ java -version java version "14" 2020-03-17 Java(TM) SE Runtime Environment (build 14+36-1461) Java HotSpot(TM) 64-Bit Server VM (build 14+36-1461, mixed mode, sharing) $
あまり自分で設定した覚えはないのだが、 前提条件は問題ないようである。
AWS Amplify CLIのインストール
AWS AmplifyについてのMEMO
バックエンドをAWSとしたAndroidの作成を目標とし、勉強していきたい。
今回のテーマは、AWS Amplifyについて。
なんでも、Amplifyを使用すればバックエンド構築が簡単に行えるとか。
早速、公式ドキュメントを読んでみよう。以下が公式ドキュメントへのリンクである。
いきなり、AWS Amplify コンソールとなっている。コンソール?どういうことなの。
もうちょっと探してみると、CLIのドキュメントを見つけた。ガイドとしてそれぞれ存在しているようである。
Amplify CLI ← こっちがCLI
いきなり躓きそうになったが、気を取り直して学習を進めていく。
今回したいのはCLIを使っての開発なのだが、ドキュメントが英語しかないので、コンソールのガイドを読み概要を把握してから、使いたいコマンドの部分をCLIのドキュメントで確認するという流れで進める。と思ったのだが。。。。
なるほど。わからん。
ということで、実際にCLIコマンドを実行してみて学習していく作戦に切り替えることとする。
CLIのインストールについてはこちら。⇨AWS Amplify CLI のインストールMEMO
WEBアプリのひな形作成
以下のコマンドで、WEBアプリのひな形が自動で作成される。
コマンド実行してからしばらく待つ。test
はフォルダ名。
npx create-react-app test
作成されたtestフォルダに移動し、以下のコマンドを実行する。 すると、 カレントディレクトリがAmplifyコンソールとも連携され、アプリが起動可能な状態となる。
cd test amplify init
エラーなく上記のコマンドが完了したら以下のコマンドを実行してほしい。
npm start
すると自動で次の画面が表示される。すごい。簡単だ。
初めてのAndroidアプリ作成
頑張ってお勉強するぞということで、Androidアプリの開発をしてみようと思う。
Androidアプリ作成からのAWS AmplifyとAWS AppSyncの使用で学習効率を高めようという作戦だ。
とにもかくにも、Hello Worldを表示しないことには始まらない。
以下の公式ドキュメントを参考にHello World画面出力まで実施してみる。
ドキュメントによると、2つの基本的なコンセプトを理解して欲しいとのこと。
先ず、1つ目は「アプリの持つ複数のエントリ ポイント」について。
要するにアプリをタップした時に表示されるメイン画面以外にも、色々呼ばれる仕組みがありますよということ。
次に、2つ目は「アプリは様々なデバイスに対応可能」について。
これはそのままですね。どんな端末でも対応できる仕組みがありますよということ。
非常にざっくりではあるが一旦これだけ押さえておけばいいだろう。
早速チュートリアルに移っていこう。
チュートリアルの手順通り[Empty Activity] を選択し、プロジェクトを開始すると、
コードに一切手を加えることなくアプリの起動が完了した。結果は以下の通り。
う〜ん。実に簡単である。
MACを使うときのMEMO
最近、初めてmacを使い出した。Windowsとは勝手が違う部分も多いので、
初めて知ったことは適当にメモとして記載していく。
・ターミナルからFinderを開く
ターミナルで以下のコマンドを入力するだけ。
$ open /usr/local/bin/
ターミナルログを出力するための設定
設定したbashrcとbash_profileの設定を記載する。
$ cat ~/.bashrc PS1="\d \t \W${LogMode} $"
$ cat ~/.bash_profile LogMode=" NoLogMode" DATE=`date +%Y-%m-%d-%H:%M:%S` logpath=~/scriptlogs/script_${DATE}.txt script ${logpath} source ~/.bashrc
Profileに記載しているDATE
はスクリプトの為。
LogModeをProfileで定義することで、ログ取得していない場合に、ターミナルにNoLogModeと表示される。こんな感じ。割と便利。
Last login: Tue May 5 16:16:43 on ttys001 Script started, output file is /Users/~/scriptlogs/script_2020-05-05-16:18:52.txt 2020/05/05 16:18:52 ~ $ 2020/05/05 16:18:52 ~ $exit exit Script done, output file is /Users/kubokazu/scriptlogs/script_2020-05-05-16:18:52.txt 2020/05/05 16:27:19 ~ NoLogMode $ 2020/05/05 16:27:19 ~ NoLogMode $