弊社では普段のスプリント内では出来ないタスクやUXの改善、バグ修正などのタスクをするタスクデーという日が2週間に一度あります。
今月は年末があるという事で最終週が全てタスクデーのタスクウィークになったので、その内1日を使ってAWS AppSyncを触ってみるという合宿を行いました。
BathHausとは
BathHausは チル・アンド・ワークプレイス というコンセプトで初台と代々木公園駅の間ぐらいにあるコワーキングスペースです。
代々木公園駅から歩いた動画を撮ってみたのでよかったらどうぞ。
事前準備
今回は1 Dayで予約したんですが、予約するとSesameというアプリをインストールを促され、予約時のメールアドレスと一致したアカウントでログインすると鍵が表示される様になります。
当日のみ、その鍵でコワーキングスペース入れる様になります。
内装
地下がコワーキングスペースになっています。
BathHausに入ってすぐ。
AppleのThunderbolt Displayも設置されています
キッチンと畳スペース。
他にも
BathHausの1階では12時を過ぎるとクラフトビールの提供が始まり、15時から銭湯が入れる様になります。
今回男湯はタイルタイプでしたが、ヒノキタイプにも入ってみたいですね。
AWS AppSyncについて
AWS AppSyncはサーバーレスバックエンドが利用出来るAWSの機能の1つです。
詳細についてはサーバーエンジニアのしもてぃがきっと詳しい記事にしてくれると思いますが、僕はiOS側を担当したのですが全然ハマらずに開発をする事が出来ました。
環境構築手順を簡単に記述します。
最初に amplify
コマンドをインストールします。
npm install -g @aws-amplify/cli
.xcodeproj
もしくは .xcworkspace
があるディレクトリ内で次のコマンドを実行します。
amplify init
ここでAWSアカウントのログインを促され、リージョンの設定、ユーザー名、 accessKeyId
と secretAccessKey
とその他プロジェクトの設定などの入力をします。
プロジェクトのAPI IDを控えておき
amplify add codegen --apiId ${YOUR_API_ID}
${YOUR_API_ID}
に控えておいたAPI IDを入力します。
AppSyncのプロジェクト内で既にスキーマが設定されていると、
amplify codegen
を叩くと API.swift
と awsconfiguration.json
いうファイルが生成されるのでXcodeプロジェクトに追加します。
Podfileに pod 'AWSAppSync'
を追加して pod install
すればライブラリのインストールが完了します。
AppDelegate.swift
に
import AWSAppSync var appSyncClient: AWSAppSyncClient? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. let databaseURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("database_name") do { //AppSync configuration & client initialization let appSyncConfig = try AWSAppSyncClientConfiguration(appSyncClientInfo: AWSAppSyncClientInfo(), databaseURL: databaseURL) appSyncClient = try AWSAppSyncClient(appSyncConfig: appSyncConfig) // Set id as the cache key for objects. See architecture section for details appSyncClient?.apolloClient?.cacheKeyForObject = { $0["id"] } } catch { print("Error initializing appsync client. \(error)") } return true }
を追記します。
AppSyncからデータを取得する時は (UIApplication.shared.delegate as? AppDelegate).appSyncClient?.fetch
メソッドを利用し、 書き込む時は (UIApplication.shared.delegate as? AppDelegate).appSyncClient?.perform
メソッドを利用します。
まとめ
今回お邪魔したBathHausは人が少なかったのもありますが静かでとても集中して作業をする事が出来ました。
昼からビールが飲めたりお風呂に入って仕事が出来るという環境はなかなか無いので今後も利用してみたいです。
AppSyncについては先述した通り別途記事が上がるかと思いますが、既にAWSのデータベースを利用していて、GraphQLやリアルタイム同期機能を導入したい場合にはとても良い選択肢かなと思いました。
正式にプロダクトに導入するかは未定ですが今後もウォッチしていきます。
積極採用中!!
子育て家族アプリFamm、カップル専用アプリPairyを運営するTimers inc. では、現在エンジニアを積極採用中! 急成長中のサービスの技術の話を少しでも聞いてみたい方、スタートアップで働きたい方など、是非お気軽にご連絡ください! 採用HP : http://timers-inc.com/engineerings