
八起ななこ(やおき・ななこ)は新米プログラマー。 AWS Amplifyを使って比較的簡単にサービスをアプリ化したななこ達は、問い合わせ対応のために、アプリにリアルタイムのチャット機能を実装したいと AWS の Solutions Architect(ソリューションアーキテクト)に相談する。そんな細かい要望には応えてくれないかと思ったななこに対し、 SA が快く提案したのは、「 AWS AppSync 」という、フルマネージドなサーバーレスGraphQL サービスだった。


シンプルなGraphQLベースの実装!
AWS AppSync では、GraphQL を使用しているため、アプリケーションでクラウドからのデータを簡単にリクエストすることが可能です。GraphQLでは様々な実装ができるので、APIをシンプルにかつ、自由度の高い形を表現することができます。またGraphQL subscriptionを使用して、データのどの部分を利用可能にするかをリアルタイムで指定したり、特定のデータのみをリアルタイムで更新するといった処理も可能です。
開発者はこれらの機能を活用して、ブラウザ、モバイルアプリケーション、ネットワーク接続が失われた場合でも使用できる IoT デバイスなどを含む、リアルタイムなコラボレーション環境を数分で構築します。

豊富なチャット向け機能!
AWS AppSync には、オフラインプログラミングモデルがサポートされているため、ユーザーはアプリケーションデータをオフラインでも利用でき、データの追加や更新も実行できます。デバイスがオフラインのとき、アプリケーション UI はオフラインデータによって自動的に更新され、オフラインユーザーは再接続した時にアプリケーションデータを変更し、更新を取得できます。他にも、オフライン時のデータキャッシュ方法や、さまざまなネットワーク条件におけるキャッシュ更新の管理方法を指定することが可能です。
複数のユーザーが同時に更新を行うとデータ競合が発生しますが、AppSyncでは、データ競合を検出し解決されたことを確認するルールがデフォルトで設定されているので、マルチスレッドでのハンドリングや、排他制御などの実装を大きく短縮できます。またAWS Lambda 関数を使ってデータの競合解決プロセスに独自のビジネスロジックを追加することでカスタマイズも可能です。

柔軟にデータソースを選択可能!
AWS AppSync を使用することで、クライアントアプリケーションはデータ要件を GraphQL によって指定できるため、必要なデータのみがフェッチされ、サーバー側とクライアント側両方でのフィルタリングが可能です。AWS AppSync では AWS Lambda、Amazon DynamoDB、Amazon Elasticsearch、Amazon Aurora Serverless がサポートされているため、GraphQL では、簡単な検索、複雑なクエリやマッピング、テキストの全文検索、あいまい検索やキーワード検索、位置情報検索などのオペレーションが可能です。