Timers Tech Blog

グローバルな家族アプリFammを運営するTimers inc (タイマーズ) の公式Tech Blogです。弊社のエンジニアリングを支える記事を随時公開。エンジニア絶賛採用中!→ https://timers-inc.com/engineering

BathHausで開発合宿してみた #bathhaus #appsync

BathHaus

弊社では普段のスプリント内では出来ないタスクやUXの改善、バグ修正などのタスクをするタスクデーという日が2週間に一度あります。
今月は年末があるという事で最終週が全てタスクデーのタスクウィークになったので、その内1日を使ってAWS AppSyncを触ってみるという合宿を行いました。

BathHausとは

BathHausチル・アンド・ワークプレイス というコンセプトで初台と代々木公園駅の間ぐらいにあるコワーキングスペースです。

代々木公園駅から歩いた動画を撮ってみたのでよかったらどうぞ。

事前準備

今回は1 Dayで予約したんですが、予約するとSesameというアプリをインストールを促され、予約時のメールアドレスと一致したアカウントでログインすると鍵が表示される様になります。
当日のみ、その鍵でコワーキングスペース入れる様になります。

内装

地下がコワーキングスペースになっています。

BathHausに入ってすぐ。 BathHausに入ってすぐ

AppleのThunderbolt Displayも設置されています 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アカウントのログインを促され、リージョンの設定、ユーザー名、 accessKeyIdsecretAccessKey とその他プロジェクトの設定などの入力をします。

プロジェクトのAPI IDを控えておき

amplify add codegen --apiId ${YOUR_API_ID}

${YOUR_API_ID} に控えておいたAPI IDを入力します。

AppSyncのプロジェクト内で既にスキーマが設定されていると、

amplify codegen

を叩くと API.swiftawsconfiguration.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

Timersでは各職種を積極採用中!

急成長スタートアップで、最高のものづくりをしよう。

募集の詳細をみる