PR
Calendar
引き続き、AWSとの格闘?の記録です。
テーブルを作ったのでiOSアプリから接続できるようにしよう!ということで、チュートリアルを元に環境構築を開始しました。
ここで結構ハマり、まず環境構築を開始するまでに2〜3日が経過しました。
※そもそも、ドキュメントちゃんと読めよって話なんですがね。。。
一応、経緯だけ書いておくと、DynamoDBのドキュメントには、Mobileアプリから呼び出す場合は「Mobile Hub」というページからプロジェクトを作ってね、と書いてあるのですが、現在は、実際そのリンクに飛ぶと「Amplify」という仕組みのページに飛んでいきます。
結論から言うと、この AmplifyというCLIツールを使用して環境構築が全て行えるのですが、そこを理解するのに時間がかかり、何をすれば Mobile Hub のページにたどり着くんだ!?という無駄な時間をすごしました。
おそらく、Mobile Hub は現行ユーザーは使用できるけど、新規の人は Amplify 使ってねっていう、Amazonさんの親切心だったんでしょう。が、ハマりました。
というわけで、以下 Amplify のインストールから、XCodeのプロジェクトにリソースをインストールしていくところまでの流れです。
まず、Amplify のトップページです。
https://us-east-2.console.aws.amazon.com/amplify/home?region=us-east-2#/

GET STARTED から進みます。
なんか、日々、トップ画面とかチュートリアルが変わっているような気がするんですが、そこは気にせず。
こんなページに進むので、迷わずiOSを選択します。
チュートリアルに進みます。
なんでいきなりチュートリアル?みたいな感じで、ここも嵌る原因の一つとなったのですが、
結果的に Amplify のインストールはこの手順通りに進めていけば全てうまくいきます。
要は、Amplify が 環境構築のためのツールだと理解できなかった故にはまっていたわけでした。
チュートリアルの内容は、コマンドをベースに書き進めていきますが、大前提として以下のツールが必要があるため、ない場合はインストールします。
CocoaPods と Amplify CLI ってやつが、ターミナルから環境構築をお手伝いしてくれるツールです。
役割を理解すると便利です。
Amplify CLI は以下のコマンでインストールできます。
$ sudo npm install -g @aws-amplify/cli
sudo コマンドで発行しないと権限不足でエラーになる可能性があります。
amplify CLI のインストールが終わったら、いざ環境構築。
まず、XCodeでプロジェクトを起動している場合は終了しましょう。
また、チュートリアルにはIAMユーザーの作成手順がありますが、割愛します。
チュートリアル通りに行えば簡単に作成することができます。
1.プロジェクトのディレクトリへ移動
以降の手順は、XCodeのプロジェクトのディレクトリで実行していく必要がありますのでcdコマンドで移動します。
$ cd
プロジェクトディレクトリのパス
2.CocoaPodsマネージャでプロジェクトを初期化
$ pod init
Podfile というファイルが作成されます。
中身はこんな感じ。
使用したいPod(ライブラリ)を追記します。
3.Podfile に記述した pod(ライブラリー等々)のインストール
以下のコマンドでPodのダウンロードが行われます。
$ pod install --repo-update

プロジェクトフォルダ内にPodと、workspaceファイルが作成されます。
以降は、xcodeprojファイルではなく、このxcworkspaceファイルを使ってプロジェクトを開きます。
Podsフォルダの中はこんな感じ。
以下のコマンドでワークスペースファイルが開きます。
普通にダブルクリックでも開ますが、なんか手順にあるんで。
$ xed .
4.プロジェクトにAmpify Tools を追加します。
ちょっとここの目的が理解できてないです。
TARGETS に 「New Run Script Phase」を追加します。

新しくできた「Run Script」を「[CP]Check Pods Manifest.lock」の下に移動します。
以下のコマンドを追加します。
"${PODS_ROOT}/AmplifyTools/amplify-tools.sh"
名前を「Run Amplify Tools」に変更。
プロジェクトをビルドしてこの手順は終了。
5.Amplifyの初期化を行います。
amplifyconfiguration.jsonとawsconfiguration.jsonをプロジェクトに追加します。
※チュートリアルの手順を何度も実行しては最初からやり直してを繰り返していたので、定かではないのですが、4の手順実行しておくとこれ必要ないかもしれません。
手動で追加する場合は、プロジェクト名と同一のフォルダの直下に配置します。

6.AppSync API を作成します。(多分)
実行時、いくつか質問されますが、基本的にはデフォルト設定で問題ありません。
AppSyncコンソールを開くと、APIが追加されています。
7.schema.graphqlファイルの編集
今までの手順(よく覚えてないけど、多分6)で、schema.graphqlというファイルが作成されます。
このファイルは、DynamoDB(に限らないかもだけど)のテーブル定義を記述します。
type テーブル名
@model {
項目名
: 型名
}
となります。
@model は、テーブルを作成することを意味します。
これをつけないと、テーブルは作成されず、オブジェクト型のデータとして認識させることができます。
また、型名の後に ! をつけるとNULL不可になります。
IDは、実質、String型らしいですが、ユニークキーとして認識しています。(間違えているかも)
テーブルと、テーブル内で使用するオブジェクト型の定義
下では、オブジェクト「TMGPSSector」のリスト(配列)を定義しています。
7.AppSync にスキーマを登録する。
以下のコマンドで、AppSync にスキーマを登録することができます。
$ amplify push
ここでもいくつか質問されますが、基本的にデフォルトでOKです。
正常終了すと、AppSyncのデータソースにテーブルが追加されます。
データソースからリソースのリンクをクリックしているとテーブルが作成されていることがわかります。
結果、旅立ちへんで作成したテーブルはまったくもって不要となったわけでした。
また、プロジェクトフォルダ内に「API.swift」というファイルが作成されますので、これをXCodeプロジェクトのプロジェクト名と同じ名前のフォルダに追加します。

「API.swift」ファイルは、プログラム(GraphQL)からDynamoDBを操作するためのAPIが全て記述されています。
データソースを作り替えても、「$amplify push」を実行することでこのファイルにも自動的に反映されます。
詳細は、プログラム編で記載しようと思います。
次回は、Swift からテーブルの読み書きをする方法を記載しようと思いますが、現在、プログラム中のため、いつ頃になるかわかりません。
以下、データソースの登録中吐いたエラーと、気づいたことをだらだら書いておきます。
DynamoDBを使おうと思って〜旅立ち〜 2020.06.01